X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ffont-size-engraver.cc;h=9066bee1f6132c4f8f200d8d19beaaf7158cc83c;hb=947454c5cc430a9627262de4f25274a64789d3c2;hp=a8554d4453a543a5d54599b340da7021f720bae9;hpb=94375d04f45b415ad705fd444fdb344416f116d9;p=lilypond.git diff --git a/lily/font-size-engraver.cc b/lily/font-size-engraver.cc index a8554d4453..9066bee1f6 100644 --- a/lily/font-size-engraver.cc +++ b/lily/font-size-engraver.cc @@ -1,9 +1,9 @@ /* - font-size-engraver.cc -- implement + font-size-engraver.cc -- implement Font_size_engraver source file of the GNU LilyPond music typesetter - (c) 2001 Han-Wen Nienhuys + (c) 2001--2004 Han-Wen Nienhuys */ @@ -13,7 +13,7 @@ class Font_size_engraver : public Engraver { - TRANSLATOR_DECLARATIONS(Font_size_engraver); + TRANSLATOR_DECLARATIONS (Font_size_engraver); protected: virtual void acknowledge_grob (Grob_info gi); private: @@ -30,19 +30,26 @@ Font_size_engraver::acknowledge_grob (Grob_info gi) { SCM sz = get_property ("fontSize"); - if (gh_number_p (sz) - && gh_scm2int (sz) - && !gh_number_p (gi.grob_l_->get_grob_property ("font-relative-size"))) + /* + We only want to process a grob once. + */ + if (gi.origin_trans_->daddy_context_ != daddy_context_) + return ; + + if (gh_number_p (sz) && gh_scm2double (sz)) { - gi.grob_l_->set_grob_property ("font-relative-size", sz); + Real font_size = gh_scm2double (sz); + + font_size += robust_scm2double (gi.grob_->get_property ("font-size"), 0); + gi.grob_->set_property ("font-size", gh_double2scm (font_size)); } } - -ENTER_DESCRIPTION(Font_size_engraver, +ENTER_DESCRIPTION (Font_size_engraver, /* descr */ "Puts fontSize into font-relative-size grob property.", /* creats*/ "", -/* acks */ "grob-interface", +/* accepts */ "", +/* acks */ "font-interface", /* reads */ "fontSize", /* write */ "");