diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index 2ede254..c6452d3 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -269,6 +269,22 @@ staff_priority_less (Grob * const &g1, G return rank_1 < rank_2; } +static void +add_boxes (Grob *me, Grob *x_common, Grob *y_common, vector *const boxes) +{ + if (Axis_group_interface::has_interface (me) + && Axis_group_interface::has_axis (me, Y_AXIS)) + { + Grob_array *elements = unsmob_grob_array (me->get_object ("elements")); + if (elements) + for (vsize i = 0; i < elements->size (); i++) + add_boxes (elements->grob (i), x_common, y_common, boxes); + } + else + boxes->push_back (Box (me->extent (x_common, X_AXIS), + me->extent (y_common, Y_AXIS))); +} + void Axis_group_interface::skyline_spacing (Grob *me, vector elements) { @@ -281,9 +297,7 @@ Axis_group_interface::skyline_spacing (G 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 (y_common, Y_AXIS))); - + add_boxes (elements[i], x_common, y_common, &boxes); Drul_array skylines (Skyline (boxes, X_AXIS, DOWN), Skyline (boxes, X_AXIS, UP));