(c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
*/
+#include "align-interface.hh"
#include "axis-group-interface.hh"
-#include "spanner.hh"
-#include "output-def.hh"
-#include "item.hh"
-#include "staff-symbol-referencer.hh"
#include "font-interface.hh"
-#include "warn.hh"
-#include "align-interface.hh"
+#include "grob-interface.hh"
+#include "item.hh"
+#include "lily-proto.hh"
#include "line-interface.hh"
#include "moment.hh"
+#include "output-def.hh"
+#include "pointer-group-interface.hh"
+#include "spanner.hh"
+#include "staff-symbol-referencer.hh"
#include "system.hh"
-
-#include "lily-proto.hh"
-#include "grob-interface.hh"
#include "text-interface.hh"
+#include "warn.hh"
class Line_spanner
{
? ly_symbol2scm ("left-broken")
: ly_symbol2scm ("right-broken"), bound_details, SCM_EOL);
- for (SCM s = extra; scm_is_pair (s); s = scm_cdr (s))
+ for (SCM s = scm_reverse (extra); scm_is_pair (s); s = scm_cdr (s))
details = scm_cons (scm_car (s), details);
}
details, SCM_BOOL_F),
CENTER);
+ Item *bound_item = me->get_bound (dir);
+ Grob *bound_grob = bound_item;
+ if (to_boolean (ly_assoc_get (ly_symbol2scm ("end-on-note"), details, SCM_BOOL_F))
+ && bound_item->break_status_dir ())
+ {
+ extract_grob_set (me, "note-columns", columns);
+ if (columns.size ())
+ bound_grob = (dir == LEFT)
+ ? columns[0] : columns.back();
+ }
+
details = scm_acons (ly_symbol2scm ("X"),
- scm_from_double (me->get_bound (dir)->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 ();
}
"@code{dotted-line} or @code{zigzag}.\n"
"\n",
+ "bound-details "
"extra-dy "
"gap "
- "thickness "
- "bound-details "
- "left-bound-info "
+ "left-bound-info "
+ "note-columns "
"right-bound-info "
+ "thickness "
);