X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fdynamic-align-engraver.cc;h=29f35b4f6128014a4a683ba0c34177dc0f96625b;hb=dbaf1e56e37be0e204231c5bf1adcb14bd8ac3b8;hp=265498658abb01358aa6cd86b18ee21986fa666b;hpb=46e296f5381495ce30108aa981e549d61e55a009;p=lilypond.git diff --git a/lily/dynamic-align-engraver.cc b/lily/dynamic-align-engraver.cc index 265498658a..29f35b4f61 100644 --- a/lily/dynamic-align-engraver.cc +++ b/lily/dynamic-align-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2008--2012 Han-Wen Nienhuys + Copyright (C) 2008--2015 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify @@ -34,7 +34,8 @@ class Dynamic_align_engraver : public Engraver { TRANSLATOR_DECLARATIONS (Dynamic_align_engraver); - DECLARE_ACKNOWLEDGER (note_column); + DECLARE_ACKNOWLEDGER (rhythmic_head); + DECLARE_ACKNOWLEDGER (stem); DECLARE_ACKNOWLEDGER (dynamic); DECLARE_ACKNOWLEDGER (footnote_spanner); DECLARE_END_ACKNOWLEDGER (dynamic); @@ -43,7 +44,7 @@ protected: virtual void stop_translation_timestep (); private: - void create_line_spanner (Stream_event *cause); + void create_line_spanner (Grob *cause); void set_spanner_bounds (Spanner *line, bool end); Spanner *line_; Spanner *ended_line_; // Spanner manually broken, don't use it for new grobs @@ -63,23 +64,18 @@ Dynamic_align_engraver::Dynamic_align_engraver () current_dynamic_spanner_ = 0; } -ADD_ACKNOWLEDGER (Dynamic_align_engraver, dynamic); -ADD_ACKNOWLEDGER (Dynamic_align_engraver, note_column); -ADD_ACKNOWLEDGER (Dynamic_align_engraver, footnote_spanner); -ADD_END_ACKNOWLEDGER (Dynamic_align_engraver, dynamic); void -Dynamic_align_engraver::create_line_spanner (Stream_event *event) +Dynamic_align_engraver::create_line_spanner (Grob *cause) { if (!line_) - line_ = make_spanner ("DynamicLineSpanner", - event ? event->self_scm () : SCM_EOL); + line_ = make_spanner ("DynamicLineSpanner", cause->self_scm ()); } void Dynamic_align_engraver::acknowledge_end_dynamic (Grob_info info) { - if (Spanner::has_interface (info.grob ())) + if (has_interface (info.grob ())) ended_.push_back (info.spanner ()); /* If the break flag is set, store the current spanner and let new dynamics @@ -107,7 +103,13 @@ Dynamic_align_engraver::acknowledge_footnote_spanner (Grob_info info) } void -Dynamic_align_engraver::acknowledge_note_column (Grob_info info) +Dynamic_align_engraver::acknowledge_rhythmic_head (Grob_info info) +{ + support_.push_back (info.grob ()); +} + +void +Dynamic_align_engraver::acknowledge_stem (Grob_info info) { support_.push_back (info.grob ()); } @@ -133,8 +135,8 @@ Dynamic_align_engraver::acknowledge_dynamic (Grob_info info) } } - create_line_spanner (cause); - if (Spanner::has_interface (info.grob ())) + create_line_spanner (info.grob ()); + if (has_interface (info.grob ())) { started_.push_back (info.spanner ()); current_dynamic_spanner_ = info.spanner (); @@ -174,7 +176,7 @@ Dynamic_align_engraver::set_spanner_bounds (Spanner *line, bool end) bound = spanners[0]->get_bound (d); else { - bound = unsmob_grob (get_property ("currentMusicalColumn")); + bound = unsmob (get_property ("currentMusicalColumn")); programming_error ("started DynamicLineSpanner but have no left bound"); } @@ -225,6 +227,16 @@ Dynamic_align_engraver::stop_translation_timestep () support_.clear (); } +void +Dynamic_align_engraver::boot () +{ + ADD_ACKNOWLEDGER (Dynamic_align_engraver, dynamic); + ADD_ACKNOWLEDGER (Dynamic_align_engraver, rhythmic_head); + ADD_ACKNOWLEDGER (Dynamic_align_engraver, stem); + ADD_ACKNOWLEDGER (Dynamic_align_engraver, footnote_spanner); + ADD_END_ACKNOWLEDGER (Dynamic_align_engraver, dynamic); +} + ADD_TRANSLATOR (Dynamic_align_engraver, /* doc */ "Align hairpins and dynamic texts on a horizontal line.",