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);
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<Grob*> elements)
{
- Grob *me = unsmob_grob (smob);
- extract_grob_set (me, "elements", ro_elements);
- vector<Grob*> 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<Box> 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<Skyline> skylines (Skyline (boxes, X_AXIS, DOWN),
Skyline (boxes, X_AXIS, UP));
}
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);
}
skylines[dir].insert (b, X_AXIS);
}
- return SCM_UNSPECIFIED;
}
ADD_INTERFACE (Axis_group_interface, "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<Grob*> const &list,
Grob *common, Axis);
static Interval relative_pure_height (Grob *me, vector<Grob*> const &list,
static Interval cached_pure_height (Grob *me, vector<Grob*> const &list,
Grob *common, int, int);
+ static void skyline_spacing (Grob *me, vector<Grob*> elements);
static void add_element (Grob *me, Grob *);
static void set_axes (Grob *, Axis, Axis);
static bool has_axis (Grob *, Axis);
(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))))))
(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