X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmelody-engraver.cc;h=885c570894085a3a3946ecc5a775bb3bb638c417;hb=7fe7bd5c2266a35c7815314d757fca3bc80917b4;hp=557da5a0123198efa51b55eb67f98b5f7b8e5655;hpb=7600f31342bd7b7f7b1a3d56cd6ed61dc0ebdda4;p=lilypond.git diff --git a/lily/melody-engraver.cc b/lily/melody-engraver.cc index 557da5a012..885c570894 100644 --- a/lily/melody-engraver.cc +++ b/lily/melody-engraver.cc @@ -13,41 +13,74 @@ #include "melody-spanner.hh" #include "pointer-group-interface.hh" -/** - Make stems upon receiving noteheads. -*/ class Melody_engraver : public Engraver { Grob *melody_item_; + Grob *stem_; protected: DECLARE_ACKNOWLEDGER (stem); + DECLARE_ACKNOWLEDGER (slur); TRANSLATOR_DECLARATIONS (Melody_engraver); + void stop_translation_timestep (); + void process_music (); }; Melody_engraver::Melody_engraver () { + stem_ = 0; melody_item_ = 0; } void -Melody_engraver::acknowledge_stem (Grob_info info) +Melody_engraver::process_music () { - extract_grob_set (info.grob (), "rests", rests); - if (rests.size ()) + if (scm_is_string (get_property ("whichBar"))) melody_item_ = 0; - else +} + +void +Melody_engraver::stop_translation_timestep () +{ + if (stem_) { - if (!melody_item_) - melody_item_ = make_item ("MelodyItem", info.grob ()->self_scm ()); + extract_grob_set (stem_, "rests", rests); + if (rests.size ()) + melody_item_ = 0; + else + { + if (!melody_item_) + melody_item_ = make_item ("MelodyItem", stem_->self_scm ()); - Melody_spanner::add_stem (melody_item_, info.grob ()); + Melody_spanner::add_stem (melody_item_, stem_); + } } + stem_ = 0; +} + + +void +Melody_engraver::acknowledge_slur (Grob_info info) +{ + (void)info; + melody_item_ = 0; } + +void +Melody_engraver::acknowledge_stem (Grob_info info) +{ + stem_ = info.grob (); +} + + + #include "translator.icc" + ADD_ACKNOWLEDGER (Melody_engraver, stem); +ADD_ACKNOWLEDGER (Melody_engraver, slur); + ADD_TRANSLATOR (Melody_engraver, "Create information for context dependent typesetting decisions. ", "MelodyItem",