source file of the GNU LilyPond music typesetter
- (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 2000--2009 Jan Nieuwenhuizen <janneke@gnu.org>
*/
#include "align-interface.hh"
}
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 ();
}
ADD_INTERFACE (Line_spanner,
- "Generic line drawn between two objects, e.g. for use with glissandi.\n"
- "The property @code{style} can be @code{line}, "
- "@code{dashed-line}, @code{trill}, \n"
- "@code{dotted-line} or @code{zigzag}.\n"
- "\n",
+ "Generic line drawn between two objects, e.g., for use with"
+ " glissandi.",
- "bound-details "
+ /* properties */
+ "bound-details "
"extra-dy "
"gap "
"left-bound-info "
"note-columns "
- "right-bound-info "
+ "right-bound-info "
"thickness "
+ "to-barline "
);