+
+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));
+}
+
+MAKE_SCHEME_CALLBACK (Rest, polyphonic_offset_callback, 2);
+SCM
+Rest::polyphonic_offset_callback (SCM smob, SCM)
+{
+ Grob *me = unsmob_grob (smob);
+ if (scm_is_number (me->get_property ("staff-position")))
+ return scm_make_real (0);
+
+ Direction d = get_grob_direction (me);
+ Real off = 2 * d;
+ if (off)
+ off *= Staff_symbol_referencer::staff_space (me);
+
+ return scm_make_real (off);
+}
+
+ADD_INTERFACE (Rest, "rest-interface",
+ "A rest symbol.",
+ "style direction minimum-distance");
+