From: Joe Neeman Date: Tue, 6 Feb 2007 20:33:09 +0000 (+0200) Subject: Prevent TupletBracket and TupletNumber from triggering cross-staff X-Git-Tag: release/2.11.17-1~7^2~3 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=62c6679f1deeb3abebd40583416189582de03d2e;p=lilypond.git Prevent TupletBracket and TupletNumber from triggering cross-staff callbacks. Fixes (partially) #279 --- 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))))))