From 29d1121d260318ed07f152c346a1a69e5dadb69d Mon Sep 17 00:00:00 2001 From: Mike Solomon Date: Thu, 25 Aug 2011 09:32:53 +0200 Subject: [PATCH] Fixes issue 1628. 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 | 2 +- lily/new-fingering-engraver.cc | 2 +- lily/phrasing-slur-engraver.cc | 7 ++++++- lily/slur-engraver.cc | 8 +++++++- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/input/regression/string-number-around-slur.ly b/input/regression/string-number-around-slur.ly index 0e48e0f878..62ca07e9c4 100644 --- a/input/regression/string-number-around-slur.ly +++ b/input/regression/string-number-around-slur.ly @@ -7,6 +7,6 @@ is a collision." \relative c'' { \textLengthOn - 4-"inside"( d' -"inside" g + 4-"outside"( d' -"inside" g 1-"outside") } diff --git a/lily/new-fingering-engraver.cc b/lily/new-fingering-engraver.cc index 6444a06bff..efb898bd54 100644 --- a/lily/new-fingering-engraver.cc +++ b/lily/new-fingering-engraver.cc @@ -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, diff --git a/lily/phrasing-slur-engraver.cc b/lily/phrasing-slur-engraver.cc index 4805960042..8882a64285 100644 --- a/lily/phrasing-slur-engraver.cc +++ b/lily/phrasing-slur-engraver.cc @@ -51,6 +51,7 @@ class Phrasing_slur_engraver : public Engraver vector stop_events_; vector slurs_; vector end_slurs_; + vector 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); diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc index 98f0bbf336..bd1a90a07b 100644 --- a/lily/slur-engraver.cc +++ b/lily/slur-engraver.cc @@ -51,6 +51,7 @@ class Slur_engraver : public Engraver vector stop_events_; vector slurs_; vector end_slurs_; + vector 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 (); -- 2.39.2