]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/staff-symbol.cc
Uniformize, internalize.
[lilypond.git] / lily / staff-symbol.cc
index bda21ab5e4073c20a4af81161baba10cfeb0160e..c1634ac4fee4dff6305216f059a56e02a09f63c8 100644 (file)
@@ -3,22 +3,20 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 1997--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
+#include "staff-symbol.hh"
+
 #include "lookup.hh"
 #include "dimensions.hh"
-#include "paper-def.hh"
-#include "stencil.hh"
+#include "output-def.hh"
 #include "warn.hh"
 #include "item.hh"
-#include "staff-symbol.hh"
 #include "staff-symbol-referencer.hh"
 #include "spanner.hh"
 
-
-
-MAKE_SCHEME_CALLBACK (Staff_symbol,print,1);
+MAKE_SCHEME_CALLBACK (Staff_symbol, print, 1);
 
 SCM
 Staff_symbol::print (SCM smob)
@@ -28,7 +26,7 @@ Staff_symbol::print (SCM smob)
   Grob * common
     = sp->get_bound (LEFT)->common_refpoint (sp->get_bound (RIGHT), X_AXIS);
   
-  Interval span_points (0,0);
+  Interval span_points (0, 0);
   
 
   /*
@@ -38,18 +36,21 @@ Staff_symbol::print (SCM smob)
 
     --hwn.
    */
+  Real t = me->get_layout ()->get_dimension (ly_symbol2scm ("linethickness"));
+  t *= robust_scm2double (me->get_property ("thickness"), 1.0);
+  
   Direction d = LEFT;
   do
     {
       SCM width_scm = me->get_property ("width");
-      if (d == RIGHT && is_number (width_scm))
+      if (d == RIGHT && scm_is_number (width_scm))
        {
          /*
            don't multiply by Staff_symbol_referencer::staff_space (me),
            since that would make aligning staff symbols of different sizes to
            one right margin hell.
          */      
-         span_points[RIGHT] = ly_scm2double (width_scm);
+         span_points[RIGHT] = scm_to_double (width_scm);
        }
       else
        {
@@ -60,13 +61,12 @@ Staff_symbol::print (SCM smob)
              && !x->extent (x, X_AXIS).is_empty ())
            span_points[d] += x->extent (x, X_AXIS)[d];
        }
+
+      span_points[d] -= d* t/2;
     }
-  while (flip (&d) !=LEFT);
+  while (flip (&d) != LEFT);
 
 
-  Real t = me->get_paper ()->get_dimension (ly_symbol2scm ("linethickness"));
-  t *= robust_scm2double (me->get_property ("thickness"), 1.0);
-  
   int l = Staff_symbol::line_count (me);
   
   Real height = (l-1) * staff_space (me) /2;
@@ -76,7 +76,7 @@ Staff_symbol::print (SCM smob)
                             t);
 
   Stencil m;
-  for (int i=0; i < l; i++)
+  for (int i = 0; i < l; i++)
     {
       Stencil b(a);
       b.translate_axis (height - i * staff_space (me), Y_AXIS);
@@ -95,8 +95,8 @@ int
 Staff_symbol::line_count (Grob*me) 
 {
   SCM c = me->get_property ("line-count");
-  if (is_number (c))
-    return ly_scm2int (c);
+  if (scm_is_number (c))
+    return scm_to_int (c);
   else
     return 0;
 }
@@ -104,13 +104,13 @@ Staff_symbol::line_count (Grob*me)
 Real
 Staff_symbol::staff_space (Grob*me)
 {
-  return robust_scm2double ( me->get_property ("staff-space"), 1.0);
+  return robust_scm2double (me->get_property ("staff-space"), 1.0);
 }
 
 Real
 Staff_symbol::get_line_thickness (Grob* me)
 {
-  Real lt =  me->get_paper ()->get_dimension (ly_symbol2scm ("linethickness"));
+  Real lt =  me->get_layout ()->get_dimension (ly_symbol2scm ("linethickness"));
 
   return robust_scm2double (me->get_property ("thickness"), 1.0) * lt;
 }
@@ -125,7 +125,7 @@ Staff_symbol::get_ledger_line_thickness (Grob * me)
 }
 
 
-ADD_INTERFACE (Staff_symbol,"staff-symbol-interface",
+ADD_INTERFACE (Staff_symbol, "staff-symbol-interface",
               "This spanner draws the lines of a staff. "
               "A staff symbol definines a vertical unit, the staff space. "
               "Quantities that go by a half staff space are called positions "