}
details = scm_acons (ly_symbol2scm ("X"),
- scm_from_double (bound_grob->extent (commonx, X_AXIS)
+ scm_from_double (robust_relative_extent (bound_grob, commonx, X_AXIS)
.linear_combination (attach)),
details);
}
Drul_array<Real> gaps (0, 0);
Drul_array<bool> arrows (0, 0);
+ Drul_array<Real> anchor_align (0, 0);
Drul_array<Stencil*> stencils (0,0);
Drul_array<Grob*> common_y (0, 0);
do
bounds[d], SCM_BOOL_F), 0.0);
arrows[d] = to_boolean (ly_assoc_get (ly_symbol2scm ("arrow"),
bounds[d], SCM_BOOL_F));
+ anchor_align[d] = robust_scm2double (ly_assoc_get (ly_symbol2scm ("anchor-alignment"),
+ bounds[d], SCM_BOOL_F), LEFT);
stencils[d] = unsmob_stencil (ly_assoc_get (ly_symbol2scm ("stencil"),
bounds[d], SCM_BOOL_F));
common_y[d] = unsmob_grob (ly_assoc_get (ly_symbol2scm ("common-Y"),
if (stencils[d])
{
- Stencil s = stencils[d]->translated (span_points[d]);
- SCM align = ly_assoc_get (ly_symbol2scm ("stencil-align-dir-y"),
- bounds[d], SCM_BOOL_F);
- SCM off = ly_assoc_get (ly_symbol2scm ("stencil-offset"),
- bounds[d], SCM_BOOL_F);
+ Interval ext = stencils[d]->extent (X_AXIS);
+ Real anchor = ext.linear_combination (anchor_align[d]) - ext[LEFT];
+ span_points[d][X_AXIS] -= anchor;
- if (scm_is_number (align))
- s.align_to (Y_AXIS, scm_to_double (align));
+ Stencil s = stencils[d]->translated (span_points[d]);
+ SCM align = ly_assoc_get (ly_symbol2scm ("stencil-align-dir-y"),
+ bounds[d], SCM_BOOL_F);
+ SCM off = ly_assoc_get (ly_symbol2scm ("stencil-offset"),
+ bounds[d], SCM_BOOL_F);
- /*
- todo: should use font-size.
+ if (scm_is_number (align))
+ s.align_to (Y_AXIS, scm_to_double (align));
+
+ /*
+ todo: should use font-size.
*/
- if (is_number_pair (off))
- s.translate (ly_scm2offset (off));
+ if (is_number_pair (off))
+ s.translate (ly_scm2offset (off));
- line.add_stencil (s);
+ line.add_stencil (s);
}
}
while (flip (&d) != LEFT);
line.translate (Offset (-me->relative_coordinate (commonx, X_AXIS),
-me->relative_coordinate (my_common_y, Y_AXIS)));
-
+
return line.smobbed_copy ();
}