X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ffont-size-engraver.cc;h=46672d0ac10f150cf0b685873af45b556d877da8;hb=e3a368ad1c8dc7a06491ffc4305d68d8d6e8305e;hp=d71b5fddb6e1f824b679a2e1cf1131b86d06e37e;hpb=afa5829cd270e1b0c616b7ba5c5e6cdc0e920e5f;p=lilypond.git diff --git a/lily/font-size-engraver.cc b/lily/font-size-engraver.cc index d71b5fddb6..46672d0ac1 100644 --- a/lily/font-size-engraver.cc +++ b/lily/font-size-engraver.cc @@ -1,36 +1,55 @@ /* - font-size-grav.cc -- implement Font_size_engraver + font-size-engraver.cc -- implement Font_size_engraver source file of the GNU LilyPond music typesetter - (c) 1998 Han-Wen Nienhuys + (c) 2001--2004 Han-Wen Nienhuys */ -#include "font-size-engraver.hh" -#include "score-element.hh" +#include "grob.hh" +#include "engraver.hh" + +class Font_size_engraver : public Engraver +{ + + TRANSLATOR_DECLARATIONS (Font_size_engraver); +protected: + virtual void acknowledge_grob (Grob_info gi); +private: +}; + Font_size_engraver::Font_size_engraver () { - size_i_ = 0; + } void -Font_size_engraver::do_process_requests () +Font_size_engraver::acknowledge_grob (Grob_info gi) { - Scalar s (get_property ("fontsize", 0)); + SCM sz = get_property ("fontSize"); + + /* + We only want to process a grob once. + */ + if (gi.origin_trans_->context () != context ()) + return ; - if (s.length_i () && s.isnum_b ()) + if (scm_is_number (sz) && scm_to_double (sz)) { - size_i_ = int (s); + 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)); } } -void -Font_size_engraver::acknowledge_element (Score_element_info e) -{ - e.elem_l_->size_i_ = size_i_; -} - -ADD_THIS_TRANSLATOR (Font_size_engraver); +ADD_TRANSLATOR (Font_size_engraver, +/* descr */ "Puts fontSize into font-relative-size grob property.", +/* creats*/ "", +/* accepts */ "", +/* acks */ "font-interface", +/* reads */ "fontSize", +/* write */ "");