X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Flyric-extender.cc;h=a56bae3fa4689200886674cff0d48d643ffc4674;hb=42c9f0b04886b8a8318cb23d7fe72a90abb41afe;hp=9ae0629bd6ce96be01bec049d69eb8e2afdef35a;hpb=c8e915a4f8c09d65db760d0637251e043320732a;p=lilypond.git diff --git a/lily/lyric-extender.cc b/lily/lyric-extender.cc index 9ae0629bd6..a56bae3fa4 100644 --- a/lily/lyric-extender.cc +++ b/lily/lyric-extender.cc @@ -6,7 +6,7 @@ Han-Wen Nienhuys */ -#include "dimension-cache.hh" + #include "box.hh" #include "debug.hh" #include "lookup.hh" @@ -16,24 +16,38 @@ #include "lyric-extender.hh" -MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(Lyric_extender,brew_molecule) +MAKE_SCHEME_CALLBACK(Lyric_extender,brew_molecule,1) SCM Lyric_extender::brew_molecule (SCM smob) { - Spanner *sp = dynamic_cast (unsmob_element (smob)); - - Real leftext = sp->get_bound (LEFT)->extent (X_AXIS).length (); - Real ss = sp->paper_l ()->get_var ("staffspace"); - Real w = sp->spanner_length () - leftext - ss/2; + Spanner *sp = dynamic_cast (unsmob_grob (smob)); + + // ugh: refp + Real leftext = sp->get_bound (LEFT)->extent (sp->get_bound (LEFT), + X_AXIS).length (); + + Real sl = sp->paper_l ()->get_var ("stafflinethickness"); + Real righttrim = 0.5; // default to half a space gap on the right + SCM righttrim_scm = sp->get_grob_property("right-trim-amount"); + if (gh_number_p (righttrim_scm)) { + righttrim = gh_scm2double (righttrim_scm); + } + // The extender can exist in the word space of the left lyric ... + SCM space = sp->get_bound (LEFT)->get_grob_property ("word-space"); + if (gh_number_p (space)) + { + leftext -= gh_scm2double (space); + } + Real w = sp->spanner_length () - leftext - righttrim; - Real h = sp->paper_l ()->get_var ("extender_height"); - Molecule mol (sp->lookup_l ()->filledbox ( Box (Interval (0,w), Interval (0,h)))); + Real h = sl * gh_scm2double (sp->get_grob_property ("height")); + Molecule mol (Lookup::filledbox ( Box (Interval (0,w), Interval (0,h)))); mol.translate (Offset (leftext, 0)); - return mol.create_scheme(); + return mol.smobbed_copy(); } void -Lyric_extender::set_textitem (Direction d, Score_element*s) +Lyric_extender::set_textitem (Direction d, Grob*s) { elt_l_->set_bound (d, s); elt_l_->add_dependency (s);