]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/staff-symbol-referencer.cc
release: 1.3.32
[lilypond.git] / lily / staff-symbol-referencer.cc
index 8bd451109a9f864ffd326ccebe1311899f6ce7fa..0557fce059f8c2931e6ea9c032509d85d180c829 100644 (file)
@@ -35,10 +35,10 @@ Staff_symbol_referencer_interface::has_interface_b ()
 
 
 int
-Staff_symbol_referencer_interface::lines_i () const
+Staff_symbol_referencer_interface::line_count () const
 {
   Staff_symbol *st = staff_symbol_l ();
-  return st  ?  st->no_lines_i_ : 5;
+  return st  ?  st->line_count () : 0;
 }
 
 Staff_symbol*
@@ -49,13 +49,13 @@ Staff_symbol_referencer_interface::staff_symbol_l () const
 }
 
 Real
-Staff_symbol_referencer_interface::staff_line_leading_f () const
+Staff_symbol_referencer_interface::staff_space () const
 {
   Staff_symbol * st = staff_symbol_l ();
   if (st)
-    return st->staff_line_leading_f_;
+    return st->staff_space ();
   else if (elt_l_->pscore_l_ && elt_l_->paper_l ())
-    elt_l_->paper_l ()->get_var ("interline");
+    return elt_l_->paper_l ()->get_var ("interline");
  
   return 0.0;
 }
@@ -65,19 +65,22 @@ Real
 Staff_symbol_referencer_interface::position_f () const
 {
   Real p =0.0;
-  SCM pos = elt_l_->get_elt_property ("staff-position");
-  if (gh_number_p (pos))
-    p = gh_scm2double (pos);
-
   Staff_symbol * st = staff_symbol_l ();
-  if (st)
+  Score_element * c = st ? elt_l_->common_refpoint (st, Y_AXIS) : 0;
+  if (st && c)
     {
-      Score_element * c = elt_l_->common_refpoint (st, Y_AXIS);
       Real y = elt_l_->relative_coordinate (c, Y_AXIS)
        - st->relative_coordinate (c, Y_AXIS);
 
-      p += 2.0 * y / st->staff_line_leading_f ();
+      p += 2.0 * y / st->staff_space ();
+    }
+  else
+    {
+      SCM pos = elt_l_->get_elt_property ("staff-position");
+      if (gh_number_p (pos))
+       return gh_scm2double (pos);
     }
+  
   return  p;
 }
 
@@ -96,7 +99,7 @@ Staff_symbol_referencer_interface::callback (Dimension_cache const * c)
   Real off =0.0;
   if (gh_number_p (pos))
     {
-      Real space = staff_symbol_referencer_interface (sc).staff_line_leading_f ();
+      Real space = staff_symbol_referencer (sc).staff_space ();
       off = gh_scm2double (pos) * space/2.0;
     }
   sc->set_elt_property ("staff-position", gh_double2scm (0.0));
@@ -104,7 +107,9 @@ Staff_symbol_referencer_interface::callback (Dimension_cache const * c)
   return off;
 }
 
-
+/*
+  Huh? -- jcn
+ */
 void
 Staff_symbol_referencer_interface::set_position (Real p)
 {
@@ -112,6 +117,7 @@ Staff_symbol_referencer_interface::set_position (Real p)
   if (st && elt_l_->common_refpoint(st, Y_AXIS))
     {
       Real oldpos = position_f ();
+      // Aargh!
       elt_l_->set_elt_property ("staff-position", gh_double2scm (p - oldpos));
     }
   else
@@ -130,7 +136,16 @@ Staff_symbol_referencer_interface::set_position (Real p)
 }
 
 Staff_symbol_referencer_interface
-staff_symbol_referencer_interface (Score_element const*e)
+staff_symbol_referencer (Score_element const*e)
 {
   return e;                    // gee, I'm so smart!
 }
+
+int
+compare_position (Score_element *const  &a, Score_element * const &b)
+{
+  Staff_symbol_referencer_interface s1(a);
+  Staff_symbol_referencer_interface s2(b);      
+
+  return sign(s1.position_f () - s2.position_f ());
+}