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++)
{
Item *it = dynamic_cast<Item*> (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 ())
for (vsize j = 0; j < spanners.size (); j++)
{
Interval_t<int> 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 ())
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++)
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);
}
}