- Atom s(lookup_l ()->rest (balltype_i_, streepjes_b));
- Molecule * m = new Molecule ( Atom (s));
- m->translate_axis (position_i_ * paper ()->internote_f (), Y_AXIS);
- return m;
+ String style;
+ SCM style_scm = me->get_property ("style");
+ if (ly_c_symbol_p (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);
+ Stencil out = fm->find_by_name (font_char);
+ if (out.is_empty ())
+ me->warning (_f ("rest `%s' not found", font_char.to_str0 ()));
+
+ return out.smobbed_copy ();
+}
+
+SCM
+Rest::print (SCM smob)
+{
+ return brew_internal_stencil (smob, true);
+}
+MAKE_SCHEME_CALLBACK (Rest,extent_callback,2);
+/*
+ We need the callback. The real stencil has ledgers depending on
+ Y-position. The Y-position is known only after line breaking. */
+SCM
+Rest::extent_callback (SCM smob, SCM ax)
+{
+ Axis a = (Axis) scm_to_int (ax);
+
+ /*
+ Don't want ledgers: ledgers depend on Y position, which depends on
+ rest collision, which depends on stem size which depends on beam
+ slop of opposite note column.
+
+ consequence: we get too small extents and potential collisions
+ with ledgered rests.
+ */
+ SCM m = brew_internal_stencil (smob, a != X_AXIS);
+ return ly_interval2scm (unsmob_stencil (m)->extent (a));