]> git.donarmstrong.com Git - lilypond.git/blob - lily/font-size-engraver.cc
39174d47d41bc74279bc41dc8c3f8a730a7a2c00
[lilypond.git] / lily / font-size-engraver.cc
1 /*   
2   font-size-engraver.cc --  implement Font_size_engraver
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 2001--2003  Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9
10 #include "grob.hh"
11 #include "engraver.hh"
12
13 class Font_size_engraver : public Engraver
14 {
15   
16   TRANSLATOR_DECLARATIONS(Font_size_engraver);
17 protected:
18   virtual void acknowledge_grob (Grob_info gi);
19 private:
20 };
21
22
23 Font_size_engraver::Font_size_engraver ()
24 {
25
26 }
27
28 void
29 Font_size_engraver::acknowledge_grob (Grob_info gi)
30 {
31   SCM sz = get_property ("fontSize");
32
33   /*
34     We only want to process a grob once.
35    */
36   if (gi.origin_trans_->daddy_trans_ != daddy_trans_)
37     return ;
38   
39   if (gh_number_p (sz) && gh_scm2double (sz))
40     {
41       Real font_size = gh_scm2double (sz);
42       
43       font_size +=  robust_scm2double (gi.grob_->get_grob_property ("font-size"), 0);
44       gi.grob_->set_grob_property ("font-size", gh_double2scm (font_size));
45     }
46 }
47
48
49 ENTER_DESCRIPTION(Font_size_engraver,
50 /* descr */       "Puts fontSize into font-relative-size grob property.",
51 /* creats*/       "",
52 /* accepts */     "",
53 /* acks  */      "font-interface",
54 /* reads */       "fontSize",
55 /* write */       "");