From: Joe Neeman Date: Tue, 21 Nov 2006 20:43:36 +0000 (+0200) Subject: Do skyline spacing in Y-extent, not after-breaking-callback. Otherwise if X-Git-Tag: release/2.11.0-1~10 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=612ecd956567e9a140ba467fcb4411872c432e33;p=lilypond.git Do skyline spacing in Y-extent, not after-breaking-callback. Otherwise if Y-extent is called before after-breaking-callback, our Y-extent doesn't reflect the shifted children. (cherry picked from 67162dca384a478a2f3c92c5b8df4e6925be03d3 commit) --- diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index 366519948d..2821c38466 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -184,6 +184,8 @@ SCM Axis_group_interface::generic_group_extent (Grob *me, Axis a) { extract_grob_set (me, "elements", elts); + if (a == Y_AXIS) + skyline_spacing (me, elts); Grob *common = common_refpoint_of_array (elts, me, a); Real my_coord = me->relative_coordinate (common, a); @@ -270,22 +272,19 @@ staff_priority_less (Grob * const &g1, Grob * const &g2) return rank_1 < rank_2; } -MAKE_SCHEME_CALLBACK (Axis_group_interface, skyline_spacing, 1) -SCM -Axis_group_interface::skyline_spacing (SCM smob) +void +Axis_group_interface::skyline_spacing (Grob *me, vector elements) { - Grob *me = unsmob_grob (smob); - extract_grob_set (me, "elements", ro_elements); - vector elements (ro_elements); vector_sort (elements, staff_priority_less); Grob *x_common = common_refpoint_of_array (elements, me, X_AXIS); + Grob *y_common = common_refpoint_of_array (elements, me, Y_AXIS); vsize i = 0; vector boxes; for (i = 0; i < elements.size () && !scm_is_number (elements[i]->get_property ("outside-staff-priority")); i++) boxes.push_back (Box (elements[i]->extent (x_common, X_AXIS), - elements[i]->extent (me, Y_AXIS))); + elements[i]->extent (y_common, Y_AXIS))); Drul_array skylines (Skyline (boxes, X_AXIS, DOWN), Skyline (boxes, X_AXIS, UP)); @@ -299,7 +298,7 @@ Axis_group_interface::skyline_spacing (SCM smob) } Box b (elements[i]->extent (x_common, X_AXIS), - elements[i]->extent (me, Y_AXIS)); + elements[i]->extent (y_common, Y_AXIS)); boxes.clear (); boxes.push_back (b); Skyline other = Skyline (boxes, X_AXIS, -dir); @@ -312,7 +311,6 @@ Axis_group_interface::skyline_spacing (SCM smob) } skylines[dir].insert (b, X_AXIS); } - return SCM_UNSPECIFIED; } ADD_INTERFACE (Axis_group_interface, "axis-group-interface", diff --git a/lily/include/axis-group-interface.hh b/lily/include/axis-group-interface.hh index 3f1dbb407d..b1bd975454 100644 --- a/lily/include/axis-group-interface.hh +++ b/lily/include/axis-group-interface.hh @@ -22,7 +22,6 @@ struct Axis_group_interface DECLARE_SCHEME_CALLBACK (width, (SCM smob)); DECLARE_SCHEME_CALLBACK (height, (SCM smob)); DECLARE_SCHEME_CALLBACK (pure_height, (SCM smob, SCM start, SCM end)); - DECLARE_SCHEME_CALLBACK (skyline_spacing, (SCM smob)); static Interval relative_group_extent (vector const &list, Grob *common, Axis); static Interval relative_pure_height (Grob *me, vector const &list, @@ -31,6 +30,7 @@ struct Axis_group_interface static Interval cached_pure_height (Grob *me, vector const &list, Grob *common, int, int); + static void skyline_spacing (Grob *me, vector elements); static void add_element (Grob *me, Grob *); static void set_axes (Grob *, Axis, Axis); static bool has_axis (Grob *, Axis); diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 5870f82dc4..bd5dee7706 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -1643,7 +1643,6 @@ (axes . (0 1)) (X-extent . ,ly:axis-group-interface::width) (Y-extent . ,ly:axis-group-interface::height) - (after-line-breaking . ,ly:axis-group-interface::skyline-spacing) (meta . ((class . System) (interfaces . (system-interface axis-group-interface)))))) @@ -1968,7 +1967,6 @@ (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback) (Y-extent . ,ly:hara-kiri-group-spanner::y-extent) (X-extent . ,ly:axis-group-interface::width) - (after-line-breaking . ,ly:axis-group-interface::skyline-spacing) (meta . ((class . Spanner) (interfaces . (axis-group-interface hara-kiri-group-interface