X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fauto-beam-engraver.cc;h=48766e7e5245573324613f59e929431db0a4f31e;hb=a1741dc78d0f4a71cd6790b4306fdcd618e5c40a;hp=5ced1d2cfef9815647a5fa0730dc2afa075c1065;hpb=7693db10b018da89a3123cb4c9e21e3956638c56;p=lilypond.git diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index 5ced1d2cfe..48766e7e52 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -6,17 +6,18 @@ (c) 1999--2006 Jan Nieuwenhuizen */ -#include "engraver.hh" +#include "bar-line.hh" #include "beaming-pattern.hh" #include "beam.hh" -#include "stem.hh" -#include "warn.hh" -#include "bar-line.hh" -#include "rest.hh" -#include "item.hh" -#include "spanner.hh" #include "context.hh" #include "duration.hh" +#include "engraver.hh" +#include "item.hh" +#include "rest.hh" +#include "spanner.hh" +#include "stream-event.hh" +#include "stem.hh" +#include "warn.hh" #include "translator.icc" @@ -28,7 +29,6 @@ protected: void stop_translation_timestep (); void start_translation_timestep (); void process_music (); - virtual bool try_music (Music *); virtual void finalize (); virtual void derived_mark () const; @@ -36,6 +36,7 @@ protected: DECLARE_ACKNOWLEDGER (beam); DECLARE_ACKNOWLEDGER (bar_line); DECLARE_ACKNOWLEDGER (stem); + DECLARE_TRANSLATOR_LISTENER (beam_forbid); void process_acknowledged (); @@ -50,7 +51,7 @@ private: bool is_same_grace_state (Grob *e); void typeset_beam (); - Music *forbid_; + Stream_event *forbid_; /* shortest_mom is the shortest note in the beam. */ @@ -128,16 +129,11 @@ Auto_beam_engraver::Auto_beam_engraver () beam_settings_ = SCM_EOL; } -bool -Auto_beam_engraver::try_music (Music *m) +IMPLEMENT_TRANSLATOR_LISTENER (Auto_beam_engraver, beam_forbid); +void +Auto_beam_engraver::listen_beam_forbid (Stream_event *ev) { - if (m->is_mus_type ("beam-forbid-event")) - { - forbid_ = m; - return true; - } - - return false; + ASSIGN_EVENT_ONCE (forbid_, ev); } bool @@ -335,8 +331,8 @@ Auto_beam_engraver::acknowledge_stem (Grob_info info) { check_bar_property (); Item *stem = dynamic_cast (info.grob ()); - Music *m = info.ultimate_music_cause (); - if (!m->is_mus_type ("rhythmic-event")) + Stream_event *ev = info.ultimate_event_cause (); + if (!ev->in_event_class ("rhythmic-event")) { programming_error ("stem must have rhythmic structure"); return; @@ -359,7 +355,7 @@ Auto_beam_engraver::acknowledge_stem (Grob_info info) return; } - int durlog = unsmob_duration (m->get_property ("duration"))->duration_log (); + int durlog = unsmob_duration (ev->get_property ("duration"))->duration_log (); if (durlog <= 2) { @@ -375,7 +371,7 @@ Auto_beam_engraver::acknowledge_stem (Grob_info info) if (bool (beam_start_location_.grace_part_) != bool (now.grace_part_)) return; - Moment dur = unsmob_duration (m->get_property ("duration"))->get_length (); + Moment dur = unsmob_duration (ev->get_property ("duration"))->get_length (); consider_end (dur); consider_begin (dur); @@ -390,7 +386,7 @@ Auto_beam_engraver::acknowledge_stem (Grob_info info) durlog - 2); stems_->push_back (stem); last_add_mom_ = now; - extend_mom_ = max (extend_mom_, now) + m->get_length (); + extend_mom_ = max (extend_mom_, now) + get_event_length (ev); } void @@ -431,6 +427,5 @@ ADD_TRANSLATOR (Auto_beam_engraver, "@ref{Stem_engraver} properties @code{stemLeftBeamCount} and " "@code{stemRightBeamCount}. ", /* create */ "Beam", - /* accept */ "beam-forbid-event", /* read */ "autoBeaming autoBeamSettings beatLength subdivideBeams", /* write */ "");