]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/font-size-engraver.cc
* lily/modified-font-metric.cc (text_dimension): try
[lilypond.git] / lily / font-size-engraver.cc
index 4f706b34bf29ad2094e0f6797a2b0c86d27cf89f..46672d0ac10f150cf0b685873af45b556d877da8 100644 (file)
@@ -1,45 +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--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 2001--2004  Han-Wen Nienhuys <hanwen@cs.uu.nl>
   
  */
 
-#include "font-size-engraver.hh"
-#include "score-element.hh"
-#include "lily-guile.hh"
+#include "grob.hh"
+#include "engraver.hh"
 
-Font_size_engraver::Font_size_engraver ()
+class Font_size_engraver : public Engraver
 {
-  size_ = SCM_EOL;
-}
+  
+  TRANSLATOR_DECLARATIONS (Font_size_engraver);
+protected:
+  virtual void acknowledge_grob (Grob_info gi);
+private:
+};
 
-void
-Font_size_engraver::do_process_requests ()
+
+Font_size_engraver::Font_size_engraver ()
 {
-  SCM s (get_property ("fontSize", 0));
-  
-  if (gh_number_p(s))
-    {
-      size_ = gh_scm2int (s);
-    }
-  else
-    {
-      size_ = SCM_EOL;
-    }
+
 }
 
 void
-Font_size_engraver::acknowledge_element (Score_element_info e)
+Font_size_engraver::acknowledge_grob (Grob_info gi)
 {
-  if (size_ != SCM_EOL
-      && e.elem_l_->get_elt_property (fontsize_scm_sym) == SCM_BOOL_F)
+  SCM sz = get_property ("fontSize");
+
+  /*
+    We only want to process a grob once.
+   */
+  if (gi.origin_trans_->context () != context ())
+    return ;
+  
+  if (scm_is_number (sz) && scm_to_double (sz))
     {
-      e.elem_l_->set_elt_property (fontsize_scm_sym, size_);
+      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));
     }
 }
 
-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 */       "");