]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/scaled-font-metric.cc
* stepmake/stepmake/omf-targets.make (local-install): add
[lilypond.git] / lily / scaled-font-metric.cc
index 3327b2d8b639e157017a0dd6af8163cc35e1a4cf..8583887b5855aa225ad2ae78ada741f371b15531 100644 (file)
@@ -1,35 +1,66 @@
-#include "font-metric.hh"
+/*   
+     scaled-font-metric.cc -- declare Scaled_font_metric
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "scaled-font-metric.hh"
 #include "string.hh"
 #include "molecule.hh"
 
 
 Scaled_font_metric::Scaled_font_metric (Font_metric* m, Real magn)
 {
-  magnification_f_ = magn;
-  orig_l_ = m;
+  magnification_ = magn;
+  SCM desc = m->description_;
+
+  Real total_mag = magn * gh_scm2double (ly_cdr (desc));
+  assert (total_mag);
+  
+  description_ = gh_cons (ly_car (desc), gh_double2scm (total_mag));
+  orig_ = m;
 }
 
 SCM
 Scaled_font_metric::make_scaled_font_metric (Font_metric*m, Real s)
 {
   Scaled_font_metric *sfm = new Scaled_font_metric (m,s);
-  sfm->name_ = m->name_;
-  
   return sfm->self_scm ();
 }
 
-SCM
-Scaled_font_metric::description () const
+Molecule
+Scaled_font_metric::find_by_name (String s) const
 {
-  SCM od = orig_l_->description ();
-  // todo:
-  //  gh_set_cdr_x (od, gh_int2scm (magstep_i_));
-  return od;
+  Molecule m = orig_->find_by_name (s);
+  Box b = m.extent_box ();
+  b.scale (magnification_);
+  Molecule q (b,fontify_atom ((Font_metric*) this, m.get_expr ()));
+
+  return q ;
 }
 
+Box 
+Scaled_font_metric::get_char (int i) const
+{
+  Box b = orig_->get_char (i);
+  b.scale (magnification_);
+  return b;  
+}
 
-Molecule
-Scaled_font_metric::find_by_name (String s, Real mag) const
+Box
+Scaled_font_metric::text_dimension (String t) const
+{
+  Box b (orig_->text_dimension (t));
+
+  b.scale (magnification_);
+  return b;
+}
+
+int
+Scaled_font_metric::count () const
 {
-  return orig_l_->find_by_name (s, magnification_f_ * mag);    // ugh.
+  return orig_->count ();
 }