X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fbeam-engraver.cc;h=c1b9d54c30142029de847038957799090c62894b;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=0432218ce2a02337f4cdf732d395f67a54e23d09;hpb=a905dbde62f57143b45fc94608b30e4ba371c0a4;p=lilypond.git diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc index 0432218ce2..c1b9d54c30 100644 --- a/lily/beam-engraver.cc +++ b/lily/beam-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1998--2006 Han-Wen Nienhuys + (c) 1998--2008 Han-Wen Nienhuys */ #include "beam.hh" @@ -46,9 +46,9 @@ protected: /// moment (global time) where beam started. Moment beam_start_mom_; - bool subdivide_beams_; - Moment beat_length_; - + Beaming_options beaming_options_; + Beaming_options finished_beaming_options_; + void typeset_beam (); void set_melisma (bool); @@ -135,13 +135,17 @@ Beam_engraver::process_music () beam_start_location_ = mp; beam_start_mom_ = now_mom (); + beaming_options_.from_context (context ()); beam_info_ = new Beaming_pattern; /* urg, must copy to Auto_beam_engraver too */ } typeset_beam (); if (stop_ev_ && beam_) - announce_end_grob (beam_, stop_ev_->self_scm ()); + { + announce_end_grob (beam_, stop_ev_->self_scm ()); + + } } void @@ -151,8 +155,8 @@ Beam_engraver::typeset_beam () { if (!finished_beam_->get_bound (RIGHT)) finished_beam_->set_bound (RIGHT, finished_beam_->get_bound (LEFT)); - - finished_beam_info_->beamify (context ()); + + finished_beam_info_->beamify (finished_beaming_options_); Beam::set_beaming (finished_beam_, finished_beam_info_); delete finished_beam_info_; @@ -179,7 +183,8 @@ Beam_engraver::stop_translation_timestep () { finished_beam_ = beam_; finished_beam_info_ = beam_info_; - + finished_beaming_options_ = beaming_options_; + stop_ev_ = 0; beam_ = 0; beam_info_ = 0; @@ -210,7 +215,7 @@ Beam_engraver::acknowledge_rest (Grob_info info) if (beam_ && !scm_is_number (info.grob ()->get_property_data ("staff-position"))) { - chain_offset_callback (info.grob(), + chain_offset_callback (info.grob (), Beam::rest_collision_callback_proc, Y_AXIS); } } @@ -257,7 +262,8 @@ Beam_engraver::acknowledge_stem (Grob_info info) scm_from_int (durlog)); Moment stem_location = now - beam_start_mom_ + beam_start_location_; beam_info_->add_stem (stem_location, - max (durlog- 2, 0)); + max (durlog- 2, 0), + Stem::is_invisible (stem)); Beam::add_stem (beam_, stem); } @@ -266,19 +272,20 @@ ADD_ACKNOWLEDGER (Beam_engraver, rest); ADD_TRANSLATOR (Beam_engraver, /* doc */ - - "Handles Beam events by engraving Beams. If omitted, then notes will be " - "printed with flags instead of beams.", + "Handle @code{Beam} events by engraving beams. If omitted," + " then notes are printed with flags instead of beams.", - /* create */ "Beam", + /* create */ + "Beam ", /* read */ "beamMelismaBusy " "beatLength " - "subdivideBeams " - , + "subdivideBeams ", + /* write */ - "forbidBreak"); + "forbidBreak" + ); class Grace_beam_engraver : public Beam_engraver { @@ -330,18 +337,20 @@ ADD_ACKNOWLEDGER (Grace_beam_engraver, stem); ADD_ACKNOWLEDGER (Grace_beam_engraver, rest); ADD_TRANSLATOR (Grace_beam_engraver, - /* doc */ - - "Handles Beam events by engraving Beams. If omitted, then notes will " - "be printed with flags instead of beams. Only engraves beams when we " - " are at grace points in time. ", + "Handle @code{Beam} events by engraving beams. If omitted," + " then notes are printed with flags instead of beams. Only" + " engraves beams when we are at grace points in time.", - /* create */ "Beam", + /* create */ + "Beam ", + /* read */ "beamMelismaBusy " "beatLength " - "subdivideBeams " - , - /* write */ ""); + "subdivideBeams ", + + /* write */ + "" + );