]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/bend-engraver.cc
Run `make grand-replace'.
[lilypond.git] / lily / bend-engraver.cc
index b260f6fbfb6ebc2f4d4e28eba94bf2c48852c46c..4545fb7297c0202c5105b926ec5ff99abbaa191b 100644 (file)
@@ -1,7 +1,7 @@
 /*
   bend-engraver.cc -- implement Bend_engraver
 
-  (c) 2006 Han-Wen Nienhuys
+  (c) 2006--2008 Han-Wen Nienhuys
 
   
 */
@@ -22,6 +22,7 @@ public:
 
 protected:
   DECLARE_TRANSLATOR_LISTENER (bend_after);
+  void finalize ();
   void process_music ();
   void stop_translation_timestep ();
   void start_translation_timestep ();
@@ -31,9 +32,19 @@ private:
   Moment stop_moment_;
   Stream_event *fall_event_;
   Spanner *fall_;
+  Spanner *last_fall_;
   Grob *note_head_;
 };
 
+void
+Bend_engraver::finalize ()
+{
+  // We shouldn't end a spanner on the last musical column of a piece because then
+  // it would extend past the last breakable column of the piece.
+  if (last_fall_)
+    last_fall_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn")));
+}
+
 void
 Bend_engraver::stop_fall ()
 {
@@ -43,6 +54,7 @@ Bend_engraver::stop_fall ()
   fall_->set_bound (RIGHT, unsmob_grob (bar
                                        ? get_property ("currentCommandColumn")
                                        : get_property ("currentMusicalColumn")));
+  last_fall_ = fall_;
   fall_ = 0;
   note_head_ = 0;
   fall_event_ = 0;
@@ -61,6 +73,8 @@ Bend_engraver::stop_translation_timestep ()
 void
 Bend_engraver::start_translation_timestep ()
 {
+  last_fall_ = 0;
+
   if (fall_ && now_mom ().main_part_ >= stop_moment_.main_part_)
     {
       stop_fall ();
@@ -79,12 +93,14 @@ Bend_engraver::acknowledge_note_head (Grob_info info)
     }
 
   note_head_ = info.grob ();
-  stop_moment_ = now_mom () + get_event_length (info.event_cause ());
+  stop_moment_ = now_mom () + get_event_length (info.event_cause (),
+                                               now_mom ());
 }
 
 Bend_engraver::Bend_engraver ()
 {
   fall_ = 0;
+  last_fall_ = 0;
   note_head_ = 0;
   fall_event_ = 0;
 }
@@ -110,7 +126,15 @@ Bend_engraver::process_music ()
 ADD_ACKNOWLEDGER (Bend_engraver, note_head);
 
 ADD_TRANSLATOR (Bend_engraver,
-               /* doc */ "Create fall spanners.",
-               /* create */ "BendAfter",
-               /* read */ "",
-               /* write */ "");
+               /* doc */
+               "Create fall spanners.",
+
+               /* create */
+               "BendAfter ",
+
+               /* read */
+               "",
+
+               /* write */
+               ""
+               );