From: Mike Solomon Date: Wed, 28 Dec 2011 09:08:04 +0000 (+0100) Subject: Implements script-accidental collision avoidance for Scripts created by the New_finge... X-Git-Tag: release/2.15.24-1~31 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=d4d2066396729b224a3b041d37573efbb30c5303;p=lilypond.git Implements script-accidental collision avoidance for Scripts created by the New_fingering_engraver --- diff --git a/input/regression/script-accidental-collision.ly b/input/regression/script-accidental-collision.ly index 39e204d037..7cf3738e80 100644 --- a/input/regression/script-accidental-collision.ly +++ b/input/regression/script-accidental-collision.ly @@ -1,4 +1,4 @@ -\version "2.15.15" +\version "2.15.24" \header { texidoc = "Scripts use skylines with accurate boxes to avoid accidentals. @@ -6,16 +6,28 @@ } { - ees''1^\espressivo - e''!1^\espressivo - eis''1^\espressivo - ees''1^\fermata - e''!1^\fermata - eis''1^\fermata - ees'1_\espressivo - e'!1_\espressivo - eis'1_\espressivo - ees'1_\fermata - e'!1_\fermata - eis'1_\fermata + ees''1^\espressivo + e''!1^\espressivo + eis''1^\espressivo + ees''1^\fermata + e''!1^\fermata + eis''1^\fermata + ees'1_\espressivo + e'!1_\espressivo + eis'1_\espressivo + ees'1_\fermata + e'!1_\fermata + eis'1_\fermata + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 } diff --git a/lily/new-fingering-engraver.cc b/lily/new-fingering-engraver.cc index 76ec02d69d..777aaec0af 100644 --- a/lily/new-fingering-engraver.cc +++ b/lily/new-fingering-engraver.cc @@ -63,6 +63,7 @@ class New_fingering_engraver : public Engraver vector string_numbers_; vector heads_; + vector accidentals_; Grob *stem_; void position_all (); @@ -71,6 +72,7 @@ public: protected: void stop_translation_timestep (); DECLARE_ACKNOWLEDGER (rhythmic_head); + DECLARE_ACKNOWLEDGER (inline_accidental); DECLARE_ACKNOWLEDGER (stem); void add_fingering (Grob *, SCM, vector *, @@ -80,6 +82,12 @@ protected: void position_scripts (SCM orientations, vector *); }; +void +New_fingering_engraver::acknowledge_inline_accidental (Grob_info inf) +{ + accidentals_.push_back(inf.grob ()); +} + void New_fingering_engraver::acknowledge_rhythmic_head (Grob_info inf) { @@ -342,6 +350,10 @@ New_fingering_engraver::position_all () { Grob *script = articulations_[i].script_; + for (vsize j = 0; j < accidentals_.size (); j++) + Side_position_interface::add_support (script, accidentals_[j]); + + accidentals_.resize (0); for (vsize j = heads_.size (); j--;) Side_position_interface::add_support (script, heads_[j]); @@ -360,6 +372,7 @@ New_fingering_engraver::New_fingering_engraver () } ADD_ACKNOWLEDGER (New_fingering_engraver, rhythmic_head); +ADD_ACKNOWLEDGER (New_fingering_engraver, inline_accidental); ADD_ACKNOWLEDGER (New_fingering_engraver, stem); ADD_TRANSLATOR (New_fingering_engraver,