X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Faxis-group-interface.cc;h=291c799910e56d6f8109adc593597ac5275ced02;hb=147adca77eb528935da9595722b136b9b01fc026;hp=da08f53526eb4f1fa333df1126cd3ccdb77478c1;hpb=be8e0ed9c4d9bf06fb150e1f0d3cfe1518dfc3a7;p=lilypond.git diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index da08f53526..291c799910 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -90,6 +90,9 @@ Axis_group_interface::cached_pure_height (Grob *me, int start, int end) SCM extents = me->get_property ("adjacent-pure-heights"); + if (!scm_is_vector (extents)) + return Interval (0, 0); + Interval ext; for (vsize i = 0; i + 1 < breaks.size (); i++) { @@ -131,7 +134,8 @@ Axis_group_interface::adjacent_pure_heights (SCM smob) Item *it = dynamic_cast (items[j]); int rank = it->get_column ()->get_rank (); - if (rank <= end && it->pure_is_visible (start, end)) + if (rank <= end && it->pure_is_visible (start, end) + && !to_boolean (it->get_property ("cross-staff"))) { Interval dims = items[j]->pure_height (common, start, end); if (!dims.is_empty ()) @@ -147,7 +151,8 @@ Axis_group_interface::adjacent_pure_heights (SCM smob) for (vsize j = 0; j < spanners.size (); j++) { Interval_t rank_span = spanners[j]->spanned_rank_interval (); - if (rank_span[LEFT] <= end && rank_span[RIGHT] >= start) + if (rank_span[LEFT] <= end && rank_span[RIGHT] >= start + && !to_boolean (spanners[j]->get_property ("cross-staff"))) { Interval dims = spanners[j]->pure_height (common, start, end); if (!dims.is_empty ()) @@ -279,8 +284,10 @@ Axis_group_interface::combine_skylines (SCM smob) Grob *me = unsmob_grob (smob); extract_grob_set (me, "elements", elements); Grob *y_common = common_refpoint_of_array (elements, me, Y_AXIS); + Grob *x_common = common_refpoint_of_array (elements, me, X_AXIS); - assert (y_common == me); + if (y_common != me) + programming_error ("combining skylines that don't belong to me"); Skyline_pair ret; for (vsize i = 0; i < elements.size (); i++) @@ -291,6 +298,7 @@ Axis_group_interface::combine_skylines (SCM smob) Real offset = elements[i]->relative_coordinate (y_common, Y_AXIS); Skyline_pair other = *Skyline_pair::unsmob (skyline_scm); other.raise (offset); + other.shift (elements[i]->relative_coordinate (x_common, X_AXIS)); ret.merge (other); } } @@ -478,7 +486,7 @@ add_boxes (Grob *me, Grob *x_common, Grob *y_common, vector *const boxes, S positions, one for above the staff, one for below). In each pass, we loop through the unplaced grobs from left to right. - If the grob overlaps the right-most affected position, we place it + If the grob doesn't overlap the right-most affected position, we place it (and then update the right-most affected position to point to the right edge of the just-placed grob). Otherwise, we skip it until the next pass. */ @@ -620,6 +628,7 @@ ADD_INTERFACE (Axis_group_interface, "elements " "keep-fixed-while-stretching " "max-stretch " + "no-alignment " "pure-Y-common " "pure-relevant-items " "pure-relevant-spanners "