X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fbeam.cc;h=a50f2904bc0b00e4a497c16c908b13cabf38d96b;hb=750b714488c5af6eae22d07163bba8b554734ac6;hp=206f6e9f4dfb4ff9f5a442f19596f80e17cef7e9;hpb=8920247a80a350aaab540166ab7a4937f45786a6;p=lilypond.git diff --git a/lily/beam.cc b/lily/beam.cc index 206f6e9f4d..a50f2904bc 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -259,7 +259,7 @@ position_with_maximal_common_beams (SCM left_beaming, SCM right_beaming, for (SCM s = scm_car (right_beaming); scm_is_pair (s); s = scm_cdr (s)) { int k = -right_dir * scm_to_int (scm_car (s)) + i; - if (scm_is_true (scm_c_memq (scm_from_int (k), left_beaming))) + if (scm_is_true (ly_memv (scm_from_int (k), left_beaming))) count++; } @@ -1006,7 +1006,7 @@ where_are_the_whole_beams (SCM beaming) for (SCM s = scm_car (beaming); scm_is_pair (s); s = scm_cdr (s)) { - if (scm_is_true (scm_c_memq (scm_car (s), scm_cdr (beaming)))) + if (scm_is_true (ly_memv (scm_car (s), scm_cdr (beaming)))) l.add_point (scm_to_int (scm_car (s))); } @@ -1220,21 +1220,23 @@ MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Beam, rest_collision_callback, 2, 1, ""); SCM Beam::rest_collision_callback (SCM smob, SCM prev_offset) { + if (!scm_is_number (prev_offset)) + prev_offset = SCM_INUM0; + Grob *rest = unsmob (smob); if (scm_is_number (rest->get_property ("staff-position"))) - return scm_from_int (0); + return prev_offset; - Real offset = robust_scm2double (prev_offset, 0.0); + Grob *stem = unsmob (rest->get_object ("stem")); - Grob *st = unsmob (rest->get_object ("stem")); - Grob *stem = st; if (!stem) - return scm_from_double (0.0); + return prev_offset; + Grob *beam = unsmob (stem->get_object ("beam")); if (!beam || !has_interface (beam) || !Beam::normal_stem_count (beam)) - return scm_from_double (0.0); + return prev_offset; Grob *common_y = rest->common_refpoint (beam, Y_AXIS); @@ -1276,8 +1278,9 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset) + (beam_count - 1) * beam_translation; Real beam_y = stem_y - d * height_of_my_beams; + Real offset = robust_scm2double (prev_offset, 0.0); Interval rest_extent = rest->extent (rest, Y_AXIS); - rest_extent.translate (offset + rest->get_parent (Y_AXIS)->relative_coordinate (common_y, Y_AXIS)); + rest_extent.translate (offset + rest->parent_relative (common_y, Y_AXIS)); Real rest_dim = rest_extent[d]; Real minimum_distance @@ -1313,17 +1316,18 @@ Beam::pure_rest_collision_callback (SCM smob, SCM, /* end */ SCM prev_offset) { - Real previous = robust_scm2double (prev_offset, 0.0); + if (!scm_is_number (prev_offset)) + prev_offset = SCM_INUM0; Grob *me = unsmob (smob); Grob *stem = unsmob (me->get_object ("stem")); if (!stem) - return scm_from_double (previous); + return prev_offset; Grob *beam = unsmob (stem->get_object ("beam")); if (!beam || !Beam::normal_stem_count (beam) || !is_direction (beam->get_property_data ("direction"))) - return scm_from_double (previous); + return prev_offset; Real ss = Staff_symbol_referencer::staff_space (me); @@ -1346,7 +1350,7 @@ Beam::pure_rest_collision_callback (SCM smob, Grob *right; if (idx == (vsize) - 1 || my_stems.size () == 1) - return scm_from_double (previous); + return prev_offset; else if (idx == 0) left = right = my_stems[1]; else if (idx == my_stems.size () - 1) @@ -1371,6 +1375,7 @@ Beam::pure_rest_collision_callback (SCM smob, Real offset = beam_pos * ss / 2.0 - minimum_distance * beamdir - me->extent (me, Y_AXIS)[beamdir]; + Real previous = robust_scm2double (prev_offset, 0.0); /* Always move by a whole number of staff spaces, always away from the beam */ offset = floor (min (0.0, (offset - previous) / ss * beamdir))