]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fix #393
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 18 Aug 2007 04:05:52 +0000 (01:05 -0300)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 18 Aug 2007 04:05:52 +0000 (01:05 -0300)
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.

input/regression/beam-beamlet-break.ly [new file with mode: 0644]
lily/beam.cc

diff --git a/input/regression/beam-beamlet-break.ly b/input/regression/beam-beamlet-break.ly
new file mode 100644 (file)
index 0000000..460d702
--- /dev/null
@@ -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
+}
index 79bc076f212165339bb73497aa04d78dbc967d52..843278aff38e8b8f97c645ba73d24ed3f329ab6b 100644 (file)
@@ -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]