child_refpoints.push_back (child_common);
}
- Grob *common_refpoint = common_refpoint_of_array (child_refpoints, me, other_axis (a));
+
+ Grob *other_common = common_refpoint_of_array (child_refpoints, me, other_axis (a));
for (vsize i = elements->size (); i--;)
{
to some absolute reference point */
if (!pure)
{
- Skyline_pair *skys = Skyline_pair::unsmob (g->get_property ("skylines"));
+ Skyline_pair *skys = Skyline_pair::unsmob (g->get_property (a == Y_AXIS
+ ? "vertical-skylines"
+ : "horizontal-skylines"));
if (skys)
skylines = *skys;
/* this is perhaps an abuse of minimum-?-extent: maybe we should create
another property? But it seems that the only (current) use of
minimum-Y-extent is to separate vertically-aligned elements */
- SCM min_extent = g->get_property (a == X_AXIS ? "minimum-X-extent" : "minimum-Y-extent");
+ SCM min_extent = g->get_property (a == X_AXIS
+ ? ly_symbol2scm ("minimum-X-extent")
+ : ly_symbol2scm ("minimum-Y-extent"));
if (is_number_pair (min_extent))
{
Box b;
- Interval other_extent = g->extent (common_refpoint, other_axis (a));
+ Interval other_extent = g->extent (other_common, other_axis (a));
b[a] = ly_scm2interval (min_extent);
b[other_axis (a)] = other_extent;
if (!other_extent.is_empty ())
skylines.insert (b, 0, other_axis (a));
}
- Real offset = child_refpoints[i]->relative_coordinate (common_refpoint, other_axis (a));
+ Real offset = child_refpoints[i]->relative_coordinate (other_common, other_axis (a));
skylines.shift (offset);
}
else
line_break_details = me_spanner->get_bound (LEFT)->get_property ("line-break-system-details");
if (!me->get_system () && !pure)
- me->warning (_ ("vertical alignment called before line-breaking.\n"
- "Only do cross-staff spanners with PianoStaff."));
-
+ me->programming_error ("vertical alignment called before line-breaking");
}
Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"),
dy = down_skyline.distance (skylines[j][-stacking_dir]);
}
+ if (isinf (dy)) /* if the skyline is empty, maybe max_height is infinity_f */
+ dy = 0.0;
+
dy = max (0.0, dy + padding + extra_space / elems.size ());
down_skyline.raise (-stacking_dir * dy);
where += stacking_dir * dy;
Real non_empty_elts = stretchable_children_count (me);
Real offset = 0.0;
Direction dir = robust_scm2dir (me->get_property ("stacking-dir"), DOWN);
- for (vsize i = 0; i < elts.size (); i++)
+ for (vsize i = 1; i < elts.size (); i++)
{
- elts[i]->translate_axis (dir * offset, a);
if (!elts[i]->extent (me, a).is_empty ()
&& !to_boolean (elts[i]->get_property ("keep-fixed-while-stretching")))
offset += amount / non_empty_elts;
+ elts[i]->translate_axis (dir * offset, a);
}
me->flush_extent_cache (Y_AXIS);
}