X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fbeam.cc;h=75f859ffe4a46e274be806ecce5c548631e3b452;hb=e3bd073b603167e110d3ecac4bfa3e1ca75e0106;hp=47c5b7fa485b7675de9c7287e718cf95f210a5fa;hpb=a276a19dc6bd57832db3107f2f2cbb04cb4677b6;p=lilypond.git diff --git a/lily/beam.cc b/lily/beam.cc index 47c5b7fa48..75f859ffe4 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -317,7 +317,7 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) { /* ugh, this has a side-effect that we need to ensure that Stem #'beaming is correct */ - (void) me_grob->get_property ("quantized-positions"); + (void) me_grob->get_property ("beaming"); Spanner *me = dynamic_cast (me_grob); @@ -409,7 +409,7 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) bool inside_stem = (event_dir == LEFT) ? segs[j].stem_index_ > 0 - : segs[j].stem_index_ < stems.size () - 1; + : segs[j].stem_index_ + 1 < stems.size () ; bool event = on_bound || abs (segs[j].rank_ - segs[j+event_dir].rank_) > 1 @@ -554,7 +554,7 @@ Beam::print (SCM grob) (me->layout ()->self_scm (), properties, quant_score)); if (!score.is_empty ()) - the_beam.add_at_edge (Y_AXIS, stem_dir, score, 1.0, 0); + the_beam.add_at_edge (Y_AXIS, stem_dir, score, 1.0); } #endif @@ -695,7 +695,7 @@ Beam::consider_auto_knees (Grob *me) sets stem directions, a constant shift does not have an influence. */ - head_extents += stem->relative_coordinate (common, Y_AXIS); + head_extents += stem->pure_relative_y_coordinate (common, 0, INT_MAX); if (to_dir (stem->get_property_data ("direction"))) { @@ -974,7 +974,6 @@ Beam::shift_region_to_valid (SCM grob, SCM posns) Real dx = lvs->relative_coordinate (commonx, X_AXIS) - x0; Drul_array pos = ly_scm2interval (posns); - scale_drul (&pos, Staff_symbol_referencer::staff_space (me)); @@ -1237,7 +1236,7 @@ Beam::set_beaming (Grob *me, Beaming_pattern const *beaming) { int count = beaming->beamlet_count (i, d); if (i > 0 - && i < stems.size () -1 + && i + 1 < stems.size () && Stem::is_invisible (stem)) count = min (count, beaming->beamlet_count (i,-d)); @@ -1421,6 +1420,24 @@ Beam::is_knee (Grob *me) return knee; } +bool +Beam::is_cross_staff (Grob *me) +{ + extract_grob_set (me, "stems", stems); + Grob *staff_symbol = Staff_symbol_referencer::get_staff_symbol (me); + for (vsize i = 0; i < stems.size (); i++) + if (Staff_symbol_referencer::get_staff_symbol (stems[i]) != staff_symbol) + return true; + return false; +} + +MAKE_SCHEME_CALLBACK (Beam, cross_staff, 1) +SCM +Beam::cross_staff (SCM smob) +{ + return scm_from_bool (is_cross_staff (unsmob_grob (smob))); +} + int Beam::get_direction_beam_count (Grob *me, Direction d) {