- /*
- FIXME: uncommenting freaks out the Y-alignment of
- line-of-score.
- */
- if (ly_c_number_p (align))
- center_offset = total.linear_combination (scm_to_double (align));
-
- for (int j = 0 ; j < all_grobs.size (); j++)
- all_grobs[j]->translate_axis (all_translates[j] - center_offset, a);
+ vector<Real> translates = get_extents_aligned_translates (me, all_grobs, a, false, 0, 0);
+ if (translates.size ())
+ for (vsize j = 0; j < all_grobs.size (); j++)
+ all_grobs[j]->translate_axis (translates[j], a);
+}
+
+Real
+Align_interface::get_pure_child_y_translation (Grob *me, Grob *ch, int start, int end)
+{
+ extract_grob_set (me, "elements", all_grobs);
+ SCM dy_scm = me->get_property ("forced-distance");
+
+ if (scm_is_number (dy_scm))
+ {
+ Real dy = scm_to_double (dy_scm) * robust_scm2dir (me->get_property ("stacking-dir"), DOWN);
+ Real pos = 0;
+ for (vsize i = 0; i < all_grobs.size (); i++)
+ {
+ if (all_grobs[i] == ch)
+ return pos;
+ if (!Hara_kiri_group_spanner::has_interface (all_grobs[i])
+ || !Hara_kiri_group_spanner::request_suicide (all_grobs[i], start, end))
+ pos += dy;
+ }
+ }
+ else
+ {
+ vector<Real> translates = get_extents_aligned_translates (me, all_grobs, Y_AXIS, true, start, end);
+
+ if (translates.size ())
+ {
+ for (vsize i = 0; i < all_grobs.size (); i++)
+ if (all_grobs[i] == ch)
+ return translates[i];
+ }
+ else
+ return 0;