]> git.donarmstrong.com Git - lilypond.git/commitdiff
Prevent TupletBracket and TupletNumber from triggering cross-staff
authorJoe Neeman <joeneeman@gmail.com>
Tue, 6 Feb 2007 20:33:09 +0000 (22:33 +0200)
committerJoe Neeman <joeneeman@gmail.com>
Tue, 6 Feb 2007 20:33:09 +0000 (22:33 +0200)
callbacks. Fixes (partially) #279

lily/include/tuplet-bracket.hh
lily/tuplet-bracket.cc
lily/tuplet-number.cc
scm/define-grobs.scm

index 2097e98d58dd79934b7d326a0f866ba7e06d2329..6108244cf60cefefe4d108ac6e7f743a3f7de463 100644 (file)
@@ -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 *);
index 489d3bc76e58eff0cf199c4b78b31fd398195e98..baa42b727c7a223cb446f8b32056585c42fb8652 100644 (file)
@@ -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 "
index 54032803e9d0f216f402ec01404a113de04c2488..b888a5dd97eff3e016dab2aac247bd739b861b77 100644 (file)
@@ -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. "
index 6cfc4ed18845310cf8dba7dd0d1c62920fcacef9..00394458fa71bf03d53db2b7697a8e32fa83ba11 100644 (file)
        (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))))))