X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstaff-symbol-engraver.cc;h=c147d54dfff9bd1f7430c1ab5959bd21c4c12ca2;hb=51522dcf41e4178a0e16fada95a4e87cefd1d0b4;hp=849b063861f2f06f21af313fea1533fd408ce3c5;hpb=16650b0059c28ae4ad8623ebad2c1da58d7fdf95;p=lilypond.git diff --git a/lily/staff-symbol-engraver.cc b/lily/staff-symbol-engraver.cc index 849b063861..c147d54dff 100644 --- a/lily/staff-symbol-engraver.cc +++ b/lily/staff-symbol-engraver.cc @@ -6,8 +6,31 @@ (c) 1997--2006 Han-Wen Nienhuys */ -#include "staff-symbol-engraver.hh" #include "spanner.hh" +#include "engraver.hh" + +class Staff_symbol_engraver : public Engraver +{ +public: + TRANSLATOR_DECLARATIONS (Staff_symbol_engraver); + +protected: + Drul_array span_events_; + Spanner *span_; + Spanner *finished_span_; + bool first_start_; + +protected: + virtual void start_spanner (); + virtual void stop_spanner (); + + void stop_translation_timestep (); + virtual bool try_music (Music *); + virtual ~Staff_symbol_engraver (); + DECLARE_ACKNOWLEDGER (grob); + virtual void finalize (); + void process_music (); +}; Staff_symbol_engraver::~Staff_symbol_engraver () { @@ -66,8 +89,17 @@ Staff_symbol_engraver::start_spanner () void Staff_symbol_engraver::stop_spanner () { - if (finished_span_ && !finished_span_->get_bound (RIGHT)) + if (!finished_span_) + return; + + if (!finished_span_->get_bound (RIGHT)) finished_span_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn"))); + + announce_end_grob (finished_span_, + span_events_[STOP] + ? span_events_[STOP]->self_scm () + : SCM_EOL); + finished_span_ = 0; }