From 1f103ff8a8f963ce246a1fb506326014b2d64315 Mon Sep 17 00:00:00 2001
From: Han-Wen Nienhuys <hanwen@xs4all.nl>
Date: Sat, 17 Feb 2007 23:35:37 +0100
Subject: [PATCH] Fix #295.

For invisible stems, use note head extent for gapped beams.
---
 input/regression/chord-tremolo-whole.ly |  3 +++
 lily/beam.cc                            | 19 ++++++++++++++++++-
 2 files changed, 21 insertions(+), 1 deletion(-)
 create mode 100644 input/regression/chord-tremolo-whole.ly

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 8ccf632ea0..6b0a71ce78 100644
--- a/lily/beam.cc
+++ b/lily/beam.cc
@@ -432,7 +432,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)
-- 
2.39.5