/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
TODO: This is way too hairy
/* Tremolo stuff. */
Grob *t_flag = Grob::unsmob (me->get_object ("tremolo-flag"));
- if (t_flag && (!Grob::unsmob (me->get_object ("beam")) || !calc_beam))
+ if (t_flag && (!Grob::is_smob (me->get_object ("beam")) || !calc_beam))
{
/* Crude hack: add extra space if tremolo flag is there.
stem 100% whereas reversed heads only overlaps the
stem 50%
*/
-
Real reverse_overlap = 0.5;
- heads[i]->translate_axis ((ell - thick * reverse_overlap) * d,
- X_AXIS);
+
+ /*
+ However, the first reverse head has to be shifted even
+ more than the full reverse overlap if it is the same
+ height as the first head or there will be a gap
+ because of the head slant (issue 346).
+ */
+
+ if (i == 1 && dy < 0.1)
+ reverse_overlap = 1.1;
if (is_invisible (me))
- heads[i]->translate_axis (-thick * (2 - reverse_overlap) * d,
- X_AXIS);
+ {
+ // Semibreves and longer are tucked in considerably
+ // to be recognizable as chorded rather than
+ // parallel voices. During the course of issue 346
+ // there was a discussion to change this for unisons
+ // (dy < 0.1) to reduce overlap but without reaching
+ // agreement and with Gould being rather on the
+ // overlapping front.
+ reverse_overlap = 2;
+ }
+
+ heads[i]->translate_axis ((ell - thick * reverse_overlap) * d,
+ X_AXIS);
/* TODO:
If there is a beam but no stem, slope calculations depend on this
routine to return where the stem end /would/ be.
*/
- if (calc_beam && !beam && !Stencil::unsmob (me->get_property ("stencil")))
+ if (calc_beam && !beam && !Stencil::is_smob (me->get_property ("stencil")))
return Interval ();
Real y1 = robust_scm2double ((calc_beam
Stem::calc_length (SCM smob)
{
Grob *me = Grob::unsmob (smob);
- if (Grob::unsmob (me->get_object ("beam")))
+ if (Grob::is_smob (me->get_object ("beam")))
{
me->programming_error ("ly:stem::calc-length called but will not be used for beamed stem.");
return scm_from_double (0.0);
{
/* TODO: make the stem start a direction ?
This is required to avoid stems passing in tablature chords. */
+ if (!me)
+ return false;
Grob *lh = get_reference_head (me);
Grob *beam = Grob::unsmob (me->get_object ("beam"));