source file of the GNU LilyPond music typesetter
- (c) 1999--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1999--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+#include "staff-symbol-referencer.hh"
+
#include <math.h>
-#include "staff-symbol-referencer.hh"
#include "staff-symbol.hh"
#include "output-def.hh"
#include "libc-extension.hh"
-
int
Staff_symbol_referencer::line_count (Grob *me)
{
- Grob *st = get_staff_symbol (me);
- return st ? Staff_symbol::line_count (st) : 0;
+ Grob *st = get_staff_symbol (me);
+ return st ? Staff_symbol::line_count (st) : 0;
}
bool
return on_staffline (me, (int) rint (get_position (me)));
}
+/*
+ This does not take size into account.
+ maybe rename: on_virtual_staffline, on_staff_or_ledger_line?
+*/
bool
Staff_symbol_referencer::on_staffline (Grob *me, int pos)
{
return ((pos + sz) % 2) == 0;
}
-Grob*
+Grob *
Staff_symbol_referencer::get_staff_symbol (Grob *me)
{
if (Staff_symbol::has_interface (me))
return me;
-
+
SCM st = me->get_property ("staff-symbol");
return unsmob_grob (st);
}
Grob *st = get_staff_symbol (me);
if (st)
return Staff_symbol::get_line_thickness (st);
- return me->get_paper ()->get_dimension (ly_symbol2scm ("linethickness"));
+ return me->get_layout ()->get_dimension (ly_symbol2scm ("linethickness"));
}
Real
p += 2.0 * y / Staff_symbol::staff_space (st);
return p;
}
-
+ else if (!st)
+ {
+ return me->relative_coordinate (me->get_parent (Y_AXIS), Y_AXIS) * 2;
+ }
return robust_scm2double (me->get_property ("staff-position"), p);
}
int
-Staff_symbol_referencer::get_rounded_position (Grob*me)
+Staff_symbol_referencer::get_rounded_position (Grob *me)
{
return int (rint (get_position (me)));
}
LY_DEFINE (ly_grob_staff_position, "ly:grob-staff-position",
- 1, 0,0, (SCM sg),
+ 1, 0, 0, (SCM sg),
"Return the Y-position of @var{sg} relative to the staff.")
{
Grob *g = unsmob_grob (sg);
return scm_make_real (pos);
}
-
/* should use offset callback! */
-MAKE_SCHEME_CALLBACK (Staff_symbol_referencer,callback,2);
+MAKE_SCHEME_CALLBACK (Staff_symbol_referencer, callback, 2);
SCM
Staff_symbol_referencer::callback (SCM element_smob, SCM)
{
SCM pos = me->get_property ("staff-position");
Real off = 0.0;
- if (ly_c_number_p (pos))
+ if (scm_is_number (pos))
{
Real space = Staff_symbol_referencer::staff_space (me);
- off = ly_scm2double (pos) * space / 2.0;
+ off = scm_to_double (pos) * space / 2.0;
me->set_property ("staff-position", scm_int2num (0));
}
int
compare_position (Grob *const &a, Grob *const &b)
{
- return sign (Staff_symbol_referencer::get_position ((Grob*)a)
- - Staff_symbol_referencer::get_position ((Grob*) b));
+ return sign (Staff_symbol_referencer::get_position ((Grob *)a)
+ - Staff_symbol_referencer::get_position ((Grob *) b));
}
-ADD_INTERFACE (Staff_symbol_referencer,"staff-symbol-referencer-interface",
+ADD_INTERFACE (Staff_symbol_referencer, "staff-symbol-referencer-interface",
"An object whose Y position is meant relative to a staff "
"symbol. "
"These usually have @code{Staff_symbol_referencer::callback} "
- "in their @code{Y-offset-callbacks}. "
- ,
+ "in their @code{Y-offset-callbacks}. ",
"staff-position");