From: Han-Wen Nienhuys <hanwen@xs4all.nl>
Date: Sat, 17 Feb 2007 22:35:37 +0000 (+0100)
Subject: Fix #295.
X-Git-Tag: release/2.11.19-1~3
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=cde53873a239e07c06b1df80e9aecabc18eb522b;p=lilypond.git

Fix #295.

For invisible stems, use note head extent for gapped beams.
---

diff --git a/input/regression/chord-tremolo-whole.ly b/input/regression/chord-tremolo-whole.ly
new file mode 100644
index 0000000000..74f4e57e64
--- /dev/null
+++ b/input/regression/chord-tremolo-whole.ly
@@ -0,0 +1,3 @@
+ 
+\version "2.11.16"
+\relative c'''{    \repeat tremolo 32{ g64 a }} 
diff --git a/lily/beam.cc b/lily/beam.cc
index 02ee8c4f3b..f9bd03d9d2 100644
--- a/lily/beam.cc
+++ b/lily/beam.cc
@@ -453,7 +453,24 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common)
 		{
 		  current.horizontal_[event_dir] += event_dir * segs[j].width_/2;
 		  if (segs[j].gapped_)
-		    current.horizontal_[event_dir] -= event_dir * gap_length;  
+		    {
+		      current.horizontal_[event_dir] -= event_dir * gap_length;
+
+		      if (Stem::is_invisible (segs[j].stem_))
+			{
+			  /*
+			    Need to do this in case of whole notes. We don't want the
+			    heads to collide with the beams.
+			   */
+			  extract_grob_set (segs[j].stem_, "note-heads", heads);
+
+			  for (vsize k = 0; k < heads.size (); k ++)
+			    current.horizontal_[event_dir]
+			      = event_dir * min  (event_dir * current.horizontal_[event_dir],
+						  - gap_length/2
+						  + event_dir * heads[k]->extent (commonx, X_AXIS)[-event_dir]);
+			}
+		    }
 		}
 
 	      if (event_dir == RIGHT)