X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ffont-size-engraver.cc;h=46672d0ac10f150cf0b685873af45b556d877da8;hb=97ebd8b72cdd2db28ad8eb38629d51f285afff22;hp=6ca9eea7cacd2ff1ea54fe5f28b642f1a4b7f059;hpb=d9b43b93f2c885409bafdb157138158f65cc49aa;p=lilypond.git diff --git a/lily/font-size-engraver.cc b/lily/font-size-engraver.cc index 6ca9eea7ca..46672d0ac1 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--2002 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_->context () != context ()) + return ; + + if (scm_is_number (sz) && scm_to_double (sz)) { - gi.grob_l_->set_grob_property ("font-relative-size", sz); + Real font_size = scm_to_double (sz); + + font_size += robust_scm2double (gi.grob_->get_property ("font-size"), 0); + gi.grob_->set_property ("font-size", scm_make_real (font_size)); } } - -ENTER_DESCRIPTION(Font_size_engraver, +ADD_TRANSLATOR (Font_size_engraver, /* descr */ "Puts fontSize into font-relative-size grob property.", /* creats*/ "", -/* acks */ "grob-interface", +/* accepts */ "", +/* acks */ "font-interface", /* reads */ "fontSize", /* write */ "");