]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/staff-symbol-referencer.cc
Issue 5167/6: Changes: show \markup xxx = ... \etc assignments
[lilypond.git] / lily / staff-symbol-referencer.cc
index 74c2c448c61c2407bb14778050b62c354f91b3ab..09b3d2856ec5405162e50f58e817a2e784933cce 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  Copyright (C) 1999--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -41,17 +41,18 @@ Staff_symbol_referencer::on_line (Grob *me, int pos)
 bool
 Staff_symbol_referencer::on_staff_line (Grob *me, int pos)
 {
-  return on_line (me, pos) && abs (pos) <= 2 * staff_radius (me);
+  Grob *st = get_staff_symbol (me);
+  return st ? Staff_symbol::on_line (st, pos, false) : false;
 }
 
 Grob *
 Staff_symbol_referencer::get_staff_symbol (Grob *me)
 {
-  if (Staff_symbol::has_interface (me))
+  if (has_interface<Staff_symbol> (me))
     return me;
 
   SCM st = me->get_object ("staff-symbol");
-  return unsmob_grob (st);
+  return unsmob<Grob> (st);
 }
 
 Real
@@ -137,7 +138,7 @@ MAKE_SCHEME_CALLBACK (Staff_symbol_referencer, callback, 1);
 SCM
 Staff_symbol_referencer::callback (SCM smob)
 {
-  Grob *me = unsmob_grob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   SCM pos = me->get_property ("staff-position");
   Real off = 0.0;
@@ -188,11 +189,23 @@ Staff_symbol_referencer::internal_set_position (Grob *me, Real p, bool pure)
   me->translate_axis ((p - oldpos) * ss * 0.5, Y_AXIS);
 }
 
-/* Half of the height, in staff space, i.e. 2.0 for a normal staff. */
+Interval
+Staff_symbol_referencer::staff_span (Grob *me)
+{
+  Interval result;
+  if (me)
+    if (Grob *symb = get_staff_symbol (me))
+      result = Staff_symbol::line_span (symb);
+  return result;
+}
+
 Real
 Staff_symbol_referencer::staff_radius (Grob *me)
 {
-  return (line_count (me) - 1) / 2.0;
+  /*
+    line_span is measured in pitch steps, not in staff spaces
+  */
+  return staff_span (me).length () / 4.0;
 }
 
 int