X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fauto-beam-engraver.cc;h=3f03362b3b4645a7517aebb0a51e35ef6b97ac97;hb=e7121831390ef4b0d09c1d509e1ccb0de2ea36a8;hp=6f3a4c01797f456a3ec09c542a699c33bb1fda4d;hpb=59a6d1a06432fc0ca88c3023c646182f389ec1b5;p=lilypond.git diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index 6f3a4c0179..3f03362b3b 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -33,8 +33,6 @@ #include "translator.icc" -using std::vector; - class Auto_beam_engraver : public Engraver { TRANSLATOR_DECLARATIONS (Auto_beam_engraver); @@ -47,12 +45,12 @@ protected: virtual void finalize (); virtual void derived_mark () const; - DECLARE_ACKNOWLEDGER (rest); - DECLARE_ACKNOWLEDGER (beam); - DECLARE_ACKNOWLEDGER (bar_line); - DECLARE_ACKNOWLEDGER (breathing_sign); - DECLARE_ACKNOWLEDGER (stem); - DECLARE_TRANSLATOR_LISTENER (beam_forbid); + void acknowledge_rest (Grob_info); + void acknowledge_beam (Grob_info); + void acknowledge_bar_line (Grob_info); + void acknowledge_breathing_sign (Grob_info); + void acknowledge_stem (Grob_info); + void listen_beam_forbid (Stream_event *); private: virtual bool test_moment (Direction, Moment, Moment); @@ -162,7 +160,6 @@ Auto_beam_engraver::Auto_beam_engraver () beam_settings_ = SCM_EOL; } -IMPLEMENT_TRANSLATOR_LISTENER (Auto_beam_engraver, beam_forbid); void Auto_beam_engraver::listen_beam_forbid (Stream_event *ev) { @@ -225,8 +222,7 @@ Auto_beam_engraver::create_beam () Beam::add_stem (beam, (*stems_)[i]); Grob_info i = make_grob_info (beam, (*stems_)[0]->self_scm ()); - i.rerouting_daddy_context_ = beam_start_context_.get_context (); - announce_grob (i); + announce_grob (i, beam_start_context_.get_context ()); return beam; } @@ -285,9 +281,8 @@ Auto_beam_engraver::end_beam () if (finished_beam_) { Grob_info i = make_grob_info (finished_beam_, SCM_EOL); - i.rerouting_daddy_context_ = beam_start_context_.get_context (); - announce_end_grob (i); + announce_end_grob (i, beam_start_context_.get_context ()); finished_grouping_ = grouping_; finished_beaming_options_ = beaming_options_; } @@ -442,7 +437,7 @@ Auto_beam_engraver::acknowledge_stem (Grob_info info) (to_boolean (stem->get_property ("tuplet-start")))); stems_->push_back (stem); last_add_mom_ = now; - extend_mom_ = std::max (extend_mom_, now) + get_event_length (ev, now); + extend_mom_ = max (extend_mom_, now) + get_event_length (ev, now); if (recheck_needed) recheck_beam (); } @@ -545,11 +540,17 @@ Auto_beam_engraver::process_acknowledged () process_acknowledged_count_++; } -ADD_ACKNOWLEDGER (Auto_beam_engraver, stem); -ADD_ACKNOWLEDGER (Auto_beam_engraver, bar_line); -ADD_ACKNOWLEDGER (Auto_beam_engraver, beam); -ADD_ACKNOWLEDGER (Auto_beam_engraver, breathing_sign); -ADD_ACKNOWLEDGER (Auto_beam_engraver, rest); +void +Auto_beam_engraver::boot () +{ + ADD_LISTENER (Auto_beam_engraver, beam_forbid); + ADD_ACKNOWLEDGER (Auto_beam_engraver, stem); + ADD_ACKNOWLEDGER (Auto_beam_engraver, bar_line); + ADD_ACKNOWLEDGER (Auto_beam_engraver, beam); + ADD_ACKNOWLEDGER (Auto_beam_engraver, breathing_sign); + ADD_ACKNOWLEDGER (Auto_beam_engraver, rest); +} + ADD_TRANSLATOR (Auto_beam_engraver, /* doc */ "Generate beams based on measure characteristics and observed" @@ -578,7 +579,7 @@ ADD_TRANSLATOR (Auto_beam_engraver, class Grace_auto_beam_engraver : public Auto_beam_engraver { TRANSLATOR_DECLARATIONS (Grace_auto_beam_engraver); - DECLARE_TRANSLATOR_LISTENER (beam_forbid); + TRANSLATOR_INHERIT (Auto_beam_engraver); private: Moment last_grace_start_; // Full starting time of last grace group @@ -595,13 +596,6 @@ Grace_auto_beam_engraver::Grace_auto_beam_engraver () // not considered. } -IMPLEMENT_TRANSLATOR_LISTENER (Grace_auto_beam_engraver, beam_forbid); -void -Grace_auto_beam_engraver::listen_beam_forbid (Stream_event *ev) -{ - Auto_beam_engraver::listen_beam_forbid (ev); -} - bool Grace_auto_beam_engraver::is_same_grace_state (Moment, Moment) { @@ -641,11 +635,17 @@ Grace_auto_beam_engraver::test_moment (Direction dir, Moment test_mom, Moment) return !test_mom.grace_part_; } -ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, stem); -ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, bar_line); -ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, beam); -ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, breathing_sign); -ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, rest); +void +Grace_auto_beam_engraver::boot () +{ + ADD_LISTENER (Grace_auto_beam_engraver, beam_forbid); + ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, stem); + ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, bar_line); + ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, beam); + ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, breathing_sign); + ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, rest); +} + ADD_TRANSLATOR (Grace_auto_beam_engraver, /* doc */ "Generates one autobeam group across an entire grace phrase. "