]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/tie-performer.cc
($(outdir)/$(redhat-package)): use passive ftp.
[lilypond.git] / lily / tie-performer.cc
index 2129c57a3de92fbec0489c4a69838d21995ae289..da9696c2a5890cf8dad25f40c3f15c2d80daf135 100644 (file)
@@ -41,8 +41,8 @@ class Tie_performer : public Performer
 public:
   TRANSLATOR_DECLARATIONS(Tie_performer);
 private:
-  bool done_;
-  
+
+  bool ties_created_;
   Array<CNote_melodic_tuple> now_notes_;
   Array<CNote_melodic_tuple> tied_notes_;
 
@@ -64,7 +64,7 @@ protected:
 Tie_performer::Tie_performer ()
 {
   event_ = 0;
-  done_ = false;
+  ties_created_ = false;
 }
 
 ENTER_DESCRIPTION (Tie_performer, "", "",
@@ -76,6 +76,7 @@ void
 Tie_performer::initialize ()
 {
   event_ = 0;
+  prev_event_ = 0;
 }
 
 
@@ -129,8 +130,10 @@ Tie_performer::create_audio_elements ()
                  p->set_note (RIGHT, now_notes_[j].note_);
                  ties_.push (p);
                  announce_element (Audio_element_info (p, event_));
+                 ties_created_ = true;
 
                  tied_notes_.del (i);
+                 break ; 
                }
            }
        }
@@ -141,27 +144,28 @@ Tie_performer::create_audio_elements ()
 void
 Tie_performer::stop_translation_timestep ()
 {
-  if (prev_event_ && tied_notes_.size () && !ties_.size ())
+  if (prev_event_ && tied_notes_.size () && !ties_.size ()
+      && now_notes_.size ())
     {
       prev_event_->origin ()->warning (_ ("No ties were performed."));
     }
-  else
-    prev_event_ = 0;
+
+  if (ties_created_)
+    {
+      prev_event_ = 0;
+      tied_notes_.clear();
+    }
   
   if (event_)
     {
       tied_notes_ = now_notes_ ;
       prev_event_ = event_;
     }
-  else
-    {
-      tied_notes_.clear (); 
-    }
 
   event_ = 0;
   now_notes_ .clear ();
 
-  for (int i=0; i<  ties_.size (); i++)
+  for (int i=ties_.size (); i--;)
     {
       ties_[i]->note_drul_[RIGHT]->tie_to (ties_[i]->note_drul_[LEFT]);
     }
@@ -173,10 +177,9 @@ void
 Tie_performer::start_translation_timestep ()
 {
   event_ =0;
-  done_ = false;
+  ties_created_ = false;
   Moment now = now_mom ();
-  for (int i= tied_notes_.size ();
-       i -- ;)
+  for (int i= tied_notes_.size (); i-- ;)
     {
       if (tied_notes_[i].end_ < now)
        tied_notes_.del (i);