X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fchord-tremolo-engraver.cc;h=28790b5a868019d928deada7a9d305f50d5d55eb;hb=1f8f8075de6d90783386aea28af67755ed57da16;hp=805cb52554a864eb5e50bb8a71085314e492883d;hpb=16cb456cabf477f6d398ff731aa0f10b60913394;p=lilypond.git diff --git a/lily/chord-tremolo-engraver.cc b/lily/chord-tremolo-engraver.cc index 805cb52554..28790b5a86 100644 --- a/lily/chord-tremolo-engraver.cc +++ b/lily/chord-tremolo-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 2000--2007 Han-Wen Nienhuys + (c) 2000--2009 Han-Wen Nienhuys Erik Sandberg */ @@ -43,13 +43,11 @@ class Chord_tremolo_engraver : public Engraver protected: Stream_event *repeat_; - int flags_; - // number of beams for short tremolos - int expected_beam_count_; // current direction of beam (first RIGHT, then LEFT) Direction beam_dir_; Spanner *beam_; + protected: virtual void finalize (); void process_music (); @@ -61,8 +59,6 @@ Chord_tremolo_engraver::Chord_tremolo_engraver () { beam_ = 0; repeat_ = 0; - flags_ = 0; - expected_beam_count_ = 0; beam_dir_ = CENTER; } @@ -75,10 +71,6 @@ Chord_tremolo_engraver::listen_tremolo_span (Stream_event *ev) { if (ASSIGN_EVENT_ONCE (repeat_, ev)) { - int type = scm_to_int (ev->get_property ("tremolo-type")); - /* e.g. 1 for type 8, 2 for type 16 */ - flags_ = intlog2 (type) - 2; - expected_beam_count_ = scm_to_int (ev->get_property ("expected-beam-count")); beam_dir_ = RIGHT; } } @@ -88,7 +80,6 @@ Chord_tremolo_engraver::listen_tremolo_span (Stream_event *ev) ev->origin ()->warning (_ ("No tremolo to end")); repeat_ = 0; beam_ = 0; - expected_beam_count_ = 0; beam_dir_ = CENTER; } } @@ -118,12 +109,16 @@ Chord_tremolo_engraver::acknowledge_stem (Grob_info info) { if (beam_) { - Grob *s = info.grob (); + int tremolo_type = robust_scm2int (repeat_->get_property ("tremolo-type"), 1); + int flags = max (0, intlog2 (tremolo_type) - 2); + int repeat_count = robust_scm2int (repeat_->get_property ("repeat-count"), 1); + int gap_count = min (flags, intlog2 (repeat_count) + 1); - Stem::set_beaming (s, flags_, beam_dir_); + Grob *s = info.grob (); + Stem::set_beaming (s, flags, beam_dir_); if (Stem::duration_log (s) != 1) - beam_->set_property ("gap-count", scm_from_int (flags_ - expected_beam_count_)); + beam_->set_property ("gap-count", scm_from_int (gap_count)); if (beam_dir_ == RIGHT) { @@ -146,7 +141,15 @@ Chord_tremolo_engraver::acknowledge_stem (Grob_info info) ADD_ACKNOWLEDGER (Chord_tremolo_engraver, stem); ADD_TRANSLATOR (Chord_tremolo_engraver, - /* doc */ "Generates beams for tremolo repeats.", - /* create */ "Beam", - /* read */ "", - /* write */ ""); + /* doc */ + "Generate beams for tremolo repeats.", + + /* create */ + "Beam ", + + /* read */ + "", + + /* write */ + "" + );