DECLARE_SCHEME_CALLBACK (calc_control_points, (SCM));
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (calc_connect_to_neighbors, (SCM smob));
+ DECLARE_SCHEME_CALLBACK (cross_staff, (SCM));
DECLARE_GROB_INTERFACE();
static Grob* get_common_x (Spanner *);
Pointer_group_interface::add_grob (me, ly_symbol2scm ("tuplets"), bracket);
}
+MAKE_SCHEME_CALLBACK (Tuplet_bracket, cross_staff, 1);
+SCM
+Tuplet_bracket::cross_staff (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ Grob *staff_symbol = 0;
+ extract_grob_set (me, "note-columns", cols);
+ for (vsize i = 0; i < cols.size (); i++)
+ {
+ Grob *stem = unsmob_grob (cols[i]->get_object ("stem"));
+ 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 "
struct Tuplet_number
{
DECLARE_SCHEME_CALLBACK (print, (SCM));
+ DECLARE_SCHEME_CALLBACK (cross_staff, (SCM));
DECLARE_GROB_INTERFACE ();
};
return stc_scm;
}
+MAKE_SCHEME_CALLBACK (Tuplet_number, cross_staff, 1)
+SCM
+Tuplet_number::cross_staff (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ return Tuplet_bracket::cross_staff (me->get_object ("bracket"));
+}
ADD_INTERFACE (Tuplet_number,
"The number for a bracket. "
(connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
(control-points . ,ly:tuplet-bracket::calc-control-points)
(stencil . ,ly:tuplet-bracket::print)
+ (cross-staff . ,ly:tuplet-bracket::cross-staff)
(meta . ((class . Spanner)
(interfaces . (line-interface
(font-shape . italic)
(font-size . -2)
(avoid-slur . inside)
+ (cross-staff . ,ly:tuplet-number::cross-staff)
(meta . ((class . Spanner)
(interfaces . (text-interface tuplet-number-interface
font-interface))))))