From: Han-Wen Nienhuys Date: Sat, 18 Aug 2007 04:05:52 +0000 (-0300) Subject: Fix #393 X-Git-Tag: release/2.11.30-1~15^2~3 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=91da88e63b390a40589fc1ee679f52b6dee03a17;p=lilypond.git Fix #393 Distinguish between beam bound and line bound in beamlet X position calculation. For a beam bound that is not a line bound, we should not go to the end of line. --- diff --git a/input/regression/beam-beamlet-break.ly b/input/regression/beam-beamlet-break.ly new file mode 100644 index 0000000000..460d70249e --- /dev/null +++ b/input/regression/beam-beamlet-break.ly @@ -0,0 +1,16 @@ +\header { + texidoc = "beamlets don't run to end of line if there are no other + beamlets on the same height." + +} +\version "2.11.30" + +\paper { + raggedright = ##t +} + +\relative { + \time 1/4 + \override Beam #'breakable = ##t + r16 r16. c32[ c16 \break c8. ] r16 +} diff --git a/lily/beam.cc b/lily/beam.cc index 79bc076f21..843278aff3 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -336,7 +336,6 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness")); Slice ranks; - for (vsize i = 0; i < stems.size (); i++) { Grob *stem = stems[i]; @@ -366,7 +365,7 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) Beam_stem_segment seg; seg.stem_ = stem; seg.stem_x_ = stem_x; - seg.rank_ = 2 * i + (d+1)/2; + seg.rank_ = 2 * i + (d+1)/2; seg.width_ = stem_width; seg.stem_index_ = i; seg.dir_ = d; @@ -404,14 +403,15 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) Direction event_dir = LEFT; do { - bool on_bound = (event_dir == LEFT) ? j == 0 : + bool on_line_bound = (segs[j].dir_ == LEFT) ? segs[j].stem_index_ == 0 + : segs[j].stem_index_ == stems.size() - 1; + bool on_beam_bound = (event_dir == LEFT) ? j == 0 : j == segs.size () - 1; - bool inside_stem = (event_dir == LEFT) - ? segs[j].stem_index_ > 0 - : segs[j].stem_index_ + 1 < stems.size () ; + ? segs[j].stem_index_ > 0 + : segs[j].stem_index_ + 1 < stems.size () ; - bool event = on_bound + bool event = on_beam_bound || abs (segs[j].rank_ - segs[j+event_dir].rank_) > 1 || (abs (vertical_count) >= segs[j].max_connect_ || abs (vertical_count) >= segs[j + event_dir].max_connect_); @@ -423,7 +423,7 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) current.horizontal_[event_dir] = segs[j].stem_x_; if (segs[j].dir_ == event_dir) { - if (on_bound + if (on_line_bound && me->get_bound (event_dir)->break_status_dir ()) { current.horizontal_[event_dir]