source file of the GNU LilyPond music typesetter
- (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 1997--2009 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
/*
We're connecting to a column, for the last bit of a broken
fullLength bracket.
-
- TODO: make padding tunable?
*/
- Real padding = 1.0;
+ Real padding =
+ robust_scm2double(me->get_property("full-length-padding"), 1.0);
if (bounds[d]->break_status_dir ())
padding = 0.0;
-
- x_span[d]
- = robust_relative_extent (bounds[d], commonx, X_AXIS) [LEFT]
- - padding;
+
+ Real coord = bounds[d]->relative_coordinate(commonx, X_AXIS);
+ if (to_boolean (me->get_property ("full-length-to-extent")))
+ coord = robust_relative_extent(bounds[d], commonx, X_AXIS)[LEFT];
+
+ coord = max (coord, x_span[LEFT]);
+
+ x_span[d] = coord - padding;
}
}
while (flip (&d) != LEFT);
else if (bracket == ly_symbol2scm ("if-no-beam"))
bracket_visibility = !par_beam;
+ /* Don't print a tuplet bracket and number if no control-points were calculated */
SCM cpoints = me->get_property ("control-points");
if (scm_ilength (cpoints) < 2)
{
me->suicide ();
return SCM_EOL;
}
+ /* if the tuplet does not span any time, i.e. a single-note tuplet, hide
+ the bracket, but still let the number be displayed */
+ if (robust_scm2moment (me->get_bound (LEFT)->get_column ()->get_property ("when"), Moment (0))
+ == robust_scm2moment (me->get_bound (RIGHT)->get_column ()->get_property ("when"), Moment (0)))
+ {
+ bracket_visibility = false;
+ }
Drul_array<Offset> points;
points[LEFT] = ly_scm2offset (scm_car (cpoints));
{
Spanner *me = unsmob_spanner (smob);
- /*
- Don't print if it doesn't span time.
- */
- if (robust_scm2moment (me->get_bound (LEFT)->get_column ()->get_property ("when"), Moment (0))
- == robust_scm2moment (me->get_bound (RIGHT)->get_column ()->get_property ("when"), Moment (0)))
- {
- me->suicide ();
- return SCM_EOL;
- }
-
Real dy = 0.0;
Real offset = 0.0;
calc_position_and_height (me, &offset, &dy);
Tuplet_bracket::calc_cross_staff (SCM smob)
{
Grob *me = unsmob_grob (smob);
- Grob *staff_symbol = 0;
extract_grob_set (me, "note-columns", cols);
+ extract_grob_set (me, "tuplets", tuplets);
+
+ Grob *commony = common_refpoint_of_array (cols, me, Y_AXIS);
+ commony = common_refpoint_of_array (tuplets, commony, Y_AXIS);
+ if (Grob *st = Staff_symbol_referencer::get_staff_symbol (me))
+ commony = st->common_refpoint (commony, Y_AXIS);
+ if (me->check_cross_staff (commony))
+ return SCM_BOOL_T;
+
bool equally_long = false;
Grob *par_beam = parallel_beam (me, cols, &equally_long);
- if (par_beam)
- return par_beam->get_property ("cross-staff");
+ if (par_beam && to_boolean (par_beam->get_property ("cross-staff")))
+ return SCM_BOOL_T;
for (vsize i = 0; i < cols.size (); i++)
{
Grob *stem = unsmob_grob (cols[i]->get_object ("stem"));
- if (!stem)
- continue;
-
- if (to_boolean (stem->get_property ("cross-staff")))
+ if (stem && to_boolean (stem->get_property ("cross-staff")))
return SCM_BOOL_T;
-
- Grob *stem_staff = Staff_symbol_referencer::get_staff_symbol (stem);
- if (staff_symbol && (stem_staff != staff_symbol))
- return SCM_BOOL_T;
- staff_symbol = stem_staff;
}
+
return SCM_BOOL_F;
}
ADD_INTERFACE (Tuplet_bracket,
- "A bracket with a number in the middle, used for tuplets. "
- "When the bracket spans a line break, the value of "
- "@code{break-overshoot} determines how far it extends "
- "beyond the staff. "
- "At a line break, the markups in the @code{edge-text} are printed "
- "at the edges. ",
-
+ "A bracket with a number in the middle, used for tuplets."
+ " When the bracket spans a line break, the value of"
+ " @code{break-overshoot} determines how far it extends"
+ " beyond the staff. At a line break, the markups in the"
+ " @code{edge-text} are printed at the edges.",
/* properties */
"bracket-flare "
"direction "
"edge-height "
"edge-text "
+ "full-length-padding "
+ "full-length-to-extent "
"gap "
"positions "
"note-columns "
"shorten-pair "
"staff-padding "
"thickness "
- "tuplets ");
+ "tuplets "
+ );