X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fhairpin.cc;h=bb4fec084bb66c10c64a2ea724731a9285294448;hb=cc761ded26d0b440969ed5b92b71f4e791e08c74;hp=f11e78def56b17a95cfa46188ac42ce8a3dc17a0;hpb=16cb456cabf477f6d398ff731aa0f10b60913394;p=lilypond.git diff --git a/lily/hairpin.cc b/lily/hairpin.cc index f11e78def5..bb4fec084b 100644 --- a/lily/hairpin.cc +++ b/lily/hairpin.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2007 Han-Wen Nienhuys + (c) 1997--2009 Han-Wen Nienhuys */ #include "hairpin.hh" @@ -20,49 +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); - if (broken[LEFT] - && ly_is_equal (bounds[RIGHT]->get_column ()->get_property ("when"), - bounds[LEFT]->get_property ("when"))) - me->suicide (); - + Real thickness = robust_scm2double (me->get_property ("thickness"), 1) + * Staff_symbol_referencer::line_thickness (me); + + 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)) { @@ -207,7 +192,6 @@ Hairpin::print (SCM smob) /* should do relative to staff-symbol staff-space? */ - Stencil mol; Real x = 0.0; @@ -236,7 +220,7 @@ Hairpin::print (SCM smob) Box extent (Interval (-rad, rad), Interval (-rad, rad)); /* Hmmm, perhaps we should have a Lookup::circle () method? */ - Stencil circle(extent, + Stencil circle (extent, scm_list_4 (ly_symbol2scm ("circle"), scm_from_double (rad), scm_from_double (thick), @@ -246,7 +230,7 @@ Hairpin::print (SCM smob) don't add another circle the hairpin is broken */ if (!broken[tip_dir]) - mol.add_at_edge (X_AXIS, tip_dir, Stencil (circle), 0, 0); + mol.add_at_edge (X_AXIS, tip_dir, Stencil (circle), 0); } mol.translate_axis (x_points[LEFT] @@ -256,9 +240,9 @@ Hairpin::print (SCM smob) } ADD_INTERFACE (Hairpin, - "A hairpin crescendo/decrescendo.", + "A hairpin crescendo or decrescendo.", - /* props */ + /* properties */ "adjacent-hairpins " "circled-tip " "bound-padding "