source file of the GNU LilyPond music typesetter
- (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ (c) 1997--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
#include "note-collision.hh"
&& !to_boolean (me->get_property ("merge-differently-headed")))
merge_possible = false;
- if (merge_possible
- && head_up->get_property ("style") == ly_symbol2scm ("fa")
- && head_down->get_property ("style") == ly_symbol2scm ("fa"))
- {
- Interval uphead_size = head_up->extent (head_up, Y_AXIS);
- Offset att = Offset (0.0, -1.0);
- head_up->set_property ("stem-attachment", ly_offset2scm (att));
- head_up->set_property ("transparent", SCM_BOOL_T);
- }
-
/* Should never merge quarter and half notes, as this would make
them indistinguishable. */
if (merge_possible
Real shift_amount = 1;
bool touch = (ups[0] >= dps.back ());
+ /* As a special case, if the topmost part of the downstem chord is a second,
+ the top note of which is the same pitch as the lowest upstem note, they
+ shouldn't count as touching.
+ */
+ if (dps.back () == ups[0] && dps.size () > 1 && dps[dps.size() - 2] == ups[0] - 1)
+ touch = false;
+
if (touch)
shift_amount *= -1;
else if (Rhythmic_head::dot_count (head_up) < Rhythmic_head::dot_count (head_down))
stem_to_stem = true;
}
+
+ /* The solfa is a triangle, which is inverted depending on stem
+ direction. In case of a collision, one of them should be removed,
+ so the resulting note does not look like a block.
+ */
+ if (merge_possible
+ && head_up->get_property ("style") == ly_symbol2scm ("fa")
+ && head_down->get_property ("style") == ly_symbol2scm ("fa"))
+ {
+ Interval uphead_size = head_up->extent (head_up, Y_AXIS);
+ Offset att = Offset (0.0, -1.0);
+ head_up->set_property ("stem-attachment", ly_offset2scm (att));
+ head_up->set_property ("transparent", SCM_BOOL_T);
+ }
if (merge_possible)
{