X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fhairpin.cc;h=bb4fec084bb66c10c64a2ea724731a9285294448;hb=5f7cf73d8ded2b822ed01d902c47cd576a581cfc;hp=6a98e55bf9bd4b3964787b4b0267220e366febcd;hpb=a6a4b3fc2009f17a1a48cca0c11bfd3f38645937;p=lilypond.git diff --git a/lily/hairpin.cc b/lily/hairpin.cc index 6a98e55bf9..bb4fec084b 100644 --- a/lily/hairpin.cc +++ b/lily/hairpin.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2008 Han-Wen Nienhuys + (c) 1997--2009 Han-Wen Nienhuys */ #include "hairpin.hh" @@ -20,48 +20,34 @@ #include "note-column.hh" #include "warn.hh" -MAKE_SCHEME_CALLBACK (Hairpin, after_line_breaking, 1); +MAKE_SCHEME_CALLBACK (Hairpin, height, 1); SCM -Hairpin::after_line_breaking (SCM smob) +Hairpin::height (SCM smob) { - Spanner *me = dynamic_cast (unsmob_grob (smob)); - consider_suicide (me); - - return SCM_UNSPECIFIED; + return Grob::stencil_height (smob); } -void -Hairpin::consider_suicide (Spanner*me) +MAKE_SCHEME_CALLBACK (Hairpin, pure_height, 3); +SCM +Hairpin::pure_height (SCM smob, SCM, SCM) { - Drul_array broken; - Drul_array bounds; - Direction d = LEFT; - do - { - bounds[d] = me->get_bound (d); - broken[d] = bounds[d]->break_status_dir () != CENTER; - } - while (flip (&d) != LEFT); + Grob *me = unsmob_grob (smob); + Real height = robust_scm2double (me->get_property ("height"), 0.0) + * Staff_symbol_referencer::staff_space (me); + + Real thickness = robust_scm2double (me->get_property ("thickness"), 1) + * Staff_symbol_referencer::line_thickness (me); - if (broken[LEFT] - && ly_is_equal (bounds[RIGHT]->get_column ()->get_property ("when"), - bounds[LEFT]->get_property ("when"))) - me->suicide (); + height += thickness / 2; + return ly_interval2scm (Interval (-height, height)); } MAKE_SCHEME_CALLBACK (Hairpin, print, 1); - SCM Hairpin::print (SCM smob) { - Spanner *me = dynamic_cast (unsmob_grob (smob)); + Spanner *me = unsmob_spanner (smob); - if (Spanner *orig = dynamic_cast (me->original ())) - { - for (vsize i = 0; i < orig->broken_intos_.size (); i++) - Hairpin::consider_suicide (orig->broken_intos_[i]); - } - SCM s = me->get_property ("grow-direction"); if (!is_direction (s)) {