]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fixes issue 1628.
authorMike Solomon <mike@apollinemike.com>
Thu, 25 Aug 2011 07:32:53 +0000 (09:32 +0200)
committerMike Solomon <mike@apollinemike.com>
Thu, 25 Aug 2011 07:32:53 +0000 (09:32 +0200)
Changes the order in which callbacks are chained in the slur engravers,
allowing the correct callback order for articulations that are added
later on in a timestep.

input/regression/string-number-around-slur.ly
lily/new-fingering-engraver.cc
lily/phrasing-slur-engraver.cc
lily/slur-engraver.cc

index 0e48e0f878a60aa7696ac20496cc533c17323f8b..62ca07e9c4ddd28bdb49e98ef65e32c5f77233be 100644 (file)
@@ -7,6 +7,6 @@ is a collision."
 
 \relative c'' {
   \textLengthOn
-  <c\3>4-"inside"( d' <e,\2>-"inside" g
+  <c\3>4-"outside"( d' <e,\2>-"inside" g
   <c\1>1-"outside")
 }
index 6444a06bff056609c20e93652587c85604c86957..efb898bd54f864cfcbea00780c778c5b4a1dfbaa 100644 (file)
@@ -259,7 +259,7 @@ New_fingering_engraver::position_scripts (SCM orientations,
       Grob *f = ft.script_;
       f->set_parent (ft.head_, X_AXIS);
       f->set_parent (ft.head_, Y_AXIS);
-      f->set_property ("avoid-slur", SCM_BOOL_F);
+      f->set_property ("avoid-slur", ly_symbol2scm ("inside"));
       if (hordir == LEFT
           && unsmob_grob (ft.head_->get_object ("accidental-grob")))
         Side_position_interface::add_support (f,
index 4805960042b8317e1f45ba9ed86ab8598a5cba3b..8882a64285253be9380eeed6dd1961ddaeab1f44 100644 (file)
@@ -51,6 +51,7 @@ class Phrasing_slur_engraver : public Engraver
   vector<Stream_event *> stop_events_;
   vector<Grob *> slurs_;
   vector<Grob *> end_slurs_;
+  vector<Grob_info> objects_to_acknowledge_;
 
 protected:
   DECLARE_TRANSLATOR_LISTENER (phrasing_slur);
@@ -103,7 +104,7 @@ Phrasing_slur_engraver::acknowledge_note_column (Grob_info info)
 void
 Phrasing_slur_engraver::acknowledge_extra_object (Grob_info info)
 {
-  Slur::auxiliary_acknowledge_extra_object (info, slurs_, end_slurs_);
+  objects_to_acknowledge_.push_back (info);
 }
 
 void
@@ -209,9 +210,13 @@ Phrasing_slur_engraver::process_music ()
 void
 Phrasing_slur_engraver::stop_translation_timestep ()
 {
+  for (vsize i = 0; i < objects_to_acknowledge_.size (); i++)
+    Slur::auxiliary_acknowledge_extra_object (objects_to_acknowledge_[i], slurs_, end_slurs_);
+
   end_slurs_.clear ();
   start_events_.clear ();
   stop_events_.clear ();
+  objects_to_acknowledge_.clear ();
 }
 
 ADD_ACKNOWLEDGER (Phrasing_slur_engraver, accidental);
index 98f0bbf336fcf779559b49a1c9c9e018b32d2d9c..bd1a90a07b2494507e77505fabcc10f8dceb1898 100644 (file)
@@ -51,6 +51,7 @@ class Slur_engraver : public Engraver
   vector<Stream_event *> stop_events_;
   vector<Grob *> slurs_;
   vector<Grob *> end_slurs_;
+  vector<Grob_info> objects_to_acknowledge_;
 
   void set_melisma (bool);
 
@@ -110,7 +111,7 @@ Slur_engraver::acknowledge_note_column (Grob_info info)
 void
 Slur_engraver::acknowledge_extra_object (Grob_info info)
 {
-  Slur::auxiliary_acknowledge_extra_object (info, slurs_, end_slurs_);
+  objects_to_acknowledge_.push_back (info);
 }
 
 void
@@ -242,6 +243,11 @@ Slur_engraver::stop_translation_timestep ()
         s->set_bound (RIGHT, unsmob_grob (get_property ("currentMusicalColumn")));
       announce_end_grob (s, SCM_EOL);
     }
+
+  for (vsize i = 0; i < objects_to_acknowledge_.size (); i++)
+    Slur::auxiliary_acknowledge_extra_object (objects_to_acknowledge_[i], slurs_, end_slurs_);
+
+  objects_to_acknowledge_.clear ();
   end_slurs_.clear ();
   start_events_.clear ();
   stop_events_.clear ();