+/*
+ merge with align-to-extents?
+*/
+MAKE_SCHEME_CALLBACK(Align_interface, stretch_after_break, 1)
+SCM
+Align_interface::stretch_after_break (SCM grob)
+{
+ Grob *me = unsmob_grob (grob);
+
+ Spanner *me_spanner = dynamic_cast<Spanner *> (me);
+ extract_grob_set (me, "elements", elems);
+ if (me_spanner && elems.size ())
+ {
+ Grob *common = common_refpoint_of_array (elems, me, Y_AXIS);
+
+ /* force position callbacks */
+ for (int i = 0; i < elems.size (); i++)
+ elems[i]->relative_coordinate (common, Y_AXIS);
+
+ SCM details = me_spanner->get_bound (LEFT)->get_property ("line-break-system-details");
+ SCM extra_space_handle = scm_assoc (ly_symbol2scm ("fixed-alignment-extra-space"), details);
+
+ Real extra_space = robust_scm2double (scm_is_pair (extra_space_handle)
+ ? scm_cdr (extra_space_handle)
+ : SCM_EOL,
+ 0.0);
+
+ Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"),
+ DOWN);
+
+ Real delta = extra_space / elems.size();
+ for (int i = 0; i < elems.size (); i++)
+ elems[i]->translate_axis (i * delta, Y_AXIS);
+ }
+
+ return SCM_UNSPECIFIED;
+}
+