X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Flyric-extender.cc;h=a56bae3fa4689200886674cff0d48d643ffc4674;hb=42c9f0b04886b8a8318cb23d7fe72a90abb41afe;hp=f5209e36aab1eb8b5d372843ce37964cdefc981c;hpb=0af2486a28f1c60b9de929a9101964d880927e54;p=lilypond.git diff --git a/lily/lyric-extender.cc b/lily/lyric-extender.cc index f5209e36aa..a56bae3fa4 100644 --- a/lily/lyric-extender.cc +++ b/lily/lyric-extender.cc @@ -16,24 +16,38 @@ #include "lyric-extender.hh" -MAKE_SCHEME_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)); + 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 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; - - 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);