#include "rest.hh"
-#include "stencil.hh"
-#include "output-def.hh"
-#include "font-interface.hh"
+#include "directional-element-interface.hh"
#include "dots.hh"
+#include "font-interface.hh"
+#include "international.hh"
+#include "output-def.hh"
#include "paper-score.hh"
#include "staff-symbol-referencer.hh"
-#include "directional-element-interface.hh"
+#include "stencil.hh"
+#include "grob.hh"
// -> offset callback
MAKE_SCHEME_CALLBACK (Rest, y_offset_callback, 1);
int line_count = Staff_symbol_referencer::line_count (me);
Real ss = Staff_symbol_referencer::staff_space (me);
+ bool position_override = scm_is_number (me->get_property ("staff-position"));
Real amount = robust_scm2double (me->get_property ("staff-position"), 0)
* 0.5 * ss;
+
if (line_count % 2)
{
if (duration_log == 0 && line_count > 1)
if (dot && duration_log >= -1 && duration_log <= 1) // UGH again.
{
dot->set_property ("staff-position",
- scm_from_int ((duration_log == 0) ? -1 : 1));
+ scm_from_int ((duration_log == 0) ? -1 : 1));
}
- amount += 2 * ss * get_grob_direction (me);;
+ if (!position_override)
+ amount += 2 * ss * get_grob_direction (me);;
return scm_from_double (amount);
}
/*
make this function easily usable in C++
*/
-String
-Rest::glyph_name (Grob *me, int balltype, String style, bool try_ledgers)
+string
+Rest::glyph_name (Grob *me, int balltype, string style, bool try_ledgers)
{
bool is_ledgered = false;
if (try_ledgers && (balltype == 0 || balltype == 1))
is_ledgered |= (balltype == 1) && (pos <= -rad - 2 || pos > +rad);
}
- String actual_style (style.c_str ());
+ string actual_style (style.c_str ());
if ((style == "mensural") || (style == "neomensural"))
{
int balltype = scm_to_int (balltype_scm);
- String style;
+ string style;
SCM style_scm = me->get_property ("style");
if (scm_is_symbol (style_scm))
style = ly_scm2string (scm_symbol_to_string (style_scm));
Font_metric *fm = Font_interface::get_default_font (me);
- String font_char = glyph_name (me, balltype, style, ledgered);
+ string font_char = glyph_name (me, balltype, style, ledgered);
Stencil out = fm->find_by_name (font_char);
if (out.is_empty ())
me->warning (_f ("rest `%s' not found", font_char.c_str ()));
return ly_interval2scm (unsmob_stencil (m)->extent (a));
}
-ADD_INTERFACE (Rest, "rest-interface",
+ADD_INTERFACE (Rest,
"A rest symbol.",
/* properties */