+ if (off[X_AXIS].is_empty () || off[Y_AXIS].is_empty ())
+ return scm_from_double (0.0);
+
+ my_min_h = off[a][dir];
+
+ Real skyline_padding = 0.1;
+
+ Skyline my_dim (off, skyline_padding, other_axis (a), -dir);
+ my_dim.set_minimum_height (my_min_h);
+
+ bool include_staff
+ = staff_symbol
+ && a == Y_AXIS
+ && scm_is_number (me->get_property ("staff-padding"))
+ && !to_boolean (me->get_property ("quantize-position"));
+
+ vector<Box> boxes;
+ Real min_h = dir == LEFT ? infinity_f : -infinity_f;
+ for (vsize i = 0; i < support.size (); i++)
+ {
+ Grob *e = support[i];
+
+ // In the case of a stem, we will find a note head as well
+ // ignoring the stem solves cyclic dependencies if the stem is
+ // attached to a cross-staff beam.
+ if (a == Y_AXIS
+ && Stem::has_interface (e)
+ && dir == - get_grob_direction (e))
+ continue;
+
+ if (e)
+ {
+ if (Accidental_interface::has_interface (e))
+ {
+ vector<Box> bs = Accidental_interface::accurate_boxes (e, common);
+ boxes.insert (boxes.end (), bs.begin (), bs.end ());
+ }
+ else
+ {
+ Box b;
+ for (Axis ax = X_AXIS; ax < NO_AXES; incr (ax))
+ b[ax] = e->maybe_pure_extent (common[ax], ax, pure, start, end);
+
+ if (b[X_AXIS].is_empty () || b[Y_AXIS].is_empty ())
+ continue;
+
+ boxes.push_back (b);
+ min_h = minmax (dir, b[a][-dir], min_h);
+ }
+ }