X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftuplet-number.cc;h=117179eb112a3f9464ac3604a6e8b68c091eaadd;hb=9c3ecc7d6e596e8151a58ce7ed0dd9e1b0802d1e;hp=d04e8f3aadfd4d1f934a5846e142dd483f6d8330;hpb=75eebcb49e52d296b1da3e1074e0825d2c780db4;p=lilypond.git diff --git a/lily/tuplet-number.cc b/lily/tuplet-number.cc index d04e8f3aad..117179eb11 100644 --- a/lily/tuplet-number.cc +++ b/lily/tuplet-number.cc @@ -3,50 +3,73 @@ source file of the GNU LilyPond music typesetter - (c) 2005--2006 Han-Wen Nienhuys + (c) 2005--2009 Han-Wen Nienhuys */ #include "tuplet-bracket.hh" +#include "moment.hh" +#include "paper-column.hh" #include "text-interface.hh" #include "spanner.hh" #include "lookup.hh" struct Tuplet_number { - DECLARE_SCHEME_CALLBACK(print, (SCM)); - static bool has_interface (Grob *); + DECLARE_SCHEME_CALLBACK (print, (SCM)); + DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM)); + DECLARE_GROB_INTERFACE (); }; -MAKE_SCHEME_CALLBACK(Tuplet_number, print, 1); +MAKE_SCHEME_CALLBACK (Tuplet_number, print, 1); SCM Tuplet_number::print (SCM smob) { - Stencil *stc = unsmob_stencil (Text_interface::print (smob)); + Spanner *me = unsmob_spanner (smob); + Spanner *tuplet = unsmob_spanner (me->get_object ("bracket")); + + if (!tuplet || !tuplet->is_live ()) + { + me->suicide (); + return SCM_EOL; + } + + SCM stc_scm = Text_interface::print (smob); + Stencil *stc = unsmob_stencil (stc_scm); stc->align_to (X_AXIS, CENTER); stc->align_to (Y_AXIS, CENTER); - Spanner *me = unsmob_spanner (smob); - Spanner *tuplet = unsmob_spanner (me->get_object ("bracket")); SCM cpoints = tuplet->get_property ("control-points"); Drul_array points; - points[LEFT] = ly_scm2offset (scm_car (cpoints)); - points[RIGHT] = ly_scm2offset (scm_cadr (cpoints)); - + if (scm_is_pair (cpoints)) + { + points[LEFT] = ly_scm2offset (scm_car (cpoints)); + points[RIGHT] = ly_scm2offset (scm_cadr (cpoints)); + } + else + { + programming_error ("wrong type for control-points"); + } stc->translate ((points[RIGHT] + points[LEFT]) / 2); - return stc->smobbed_copy (); + return stc_scm; } +MAKE_SCHEME_CALLBACK (Tuplet_number, calc_cross_staff, 1) +SCM +Tuplet_number::calc_cross_staff (SCM smob) +{ + Grob *me = unsmob_grob (smob); + return unsmob_grob (me->get_object ("bracket"))->get_property ("cross-staff"); +} ADD_INTERFACE (Tuplet_number, - "tuplet-number-interface", - "The number for a bracket. " - , + "The number for a bracket.", /* properties */ "avoid-slur " // UGH. - "bracket "); + "bracket " + );