From 62c6679f1deeb3abebd40583416189582de03d2e Mon Sep 17 00:00:00 2001 From: Joe Neeman Date: Tue, 6 Feb 2007 22:33:09 +0200 Subject: [PATCH] Prevent TupletBracket and TupletNumber from triggering cross-staff callbacks. Fixes (partially) #279 --- lily/include/tuplet-bracket.hh | 1 + lily/tuplet-bracket.cc | 18 ++++++++++++++++++ lily/tuplet-number.cc | 8 ++++++++ scm/define-grobs.scm | 2 ++ 4 files changed, 29 insertions(+) diff --git a/lily/include/tuplet-bracket.hh b/lily/include/tuplet-bracket.hh index 2097e98d58..6108244cf6 100644 --- a/lily/include/tuplet-bracket.hh +++ b/lily/include/tuplet-bracket.hh @@ -19,6 +19,7 @@ public: 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 *); diff --git a/lily/tuplet-bracket.cc b/lily/tuplet-bracket.cc index 489d3bc76e..baa42b727c 100644 --- a/lily/tuplet-bracket.cc +++ b/lily/tuplet-bracket.cc @@ -737,6 +737,24 @@ Tuplet_bracket::add_tuplet_bracket (Grob *me, Grob *bracket) 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 " diff --git a/lily/tuplet-number.cc b/lily/tuplet-number.cc index 54032803e9..b888a5dd97 100644 --- a/lily/tuplet-number.cc +++ b/lily/tuplet-number.cc @@ -17,6 +17,7 @@ struct Tuplet_number { DECLARE_SCHEME_CALLBACK (print, (SCM)); + DECLARE_SCHEME_CALLBACK (cross_staff, (SCM)); DECLARE_GROB_INTERFACE (); }; @@ -66,6 +67,13 @@ Tuplet_number::print (SCM smob) 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. " diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 6cfc4ed188..00394458fa 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -1990,6 +1990,7 @@ (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 @@ -2002,6 +2003,7 @@ (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)))))) -- 2.39.5