+ int measures = 0;
+ SCM m (me->get_grob_property ("measure-count"));
+ if (gh_number_p (m))
+ {
+ measures = gh_scm2int (m);
+ }
+ if (measures <= 0)
+ return Molecule();
+
+
+ SCM limit = me->get_grob_property ("expand-limit");
+ if (measures > gh_scm2int (limit))
+ {
+ Real padding = 0.15;
+ Molecule s = big_rest (me, (1.0 - 2*padding) * space);
+ s.translate_axis (padding * space, X_AXIS);
+ return s;
+ }
+
+ SCM alist_chain = Font_interface::font_alist_chain (me);
+
+ Real staff_space = Staff_symbol_referencer::staff_space (me);
+ Font_metric *musfont
+ = select_font (me->get_paper (), alist_chain);
+
+ SCM sml = me->get_grob_property ("use-breve-rest");
+ if (measures == 1)
+ {
+ if (sml == SCM_BOOL_T)
+ {
+ Molecule s = musfont->find_by_name (Rest::glyph_name (me, -1, ""));
+
+ s.translate_axis ((space - s.extent (X_AXIS).length ())/2, X_AXIS);
+
+ return s ;
+ }
+ else
+ {
+ Molecule s = musfont->find_by_name (Rest::glyph_name (me, 0, ""));
+
+ /*
+ ugh.
+ */
+ if (Staff_symbol_referencer::get_position (me) == 0.0)
+ s.translate_axis (staff_space, Y_AXIS);
+
+ s.translate_axis ((space - s.extent (X_AXIS).length ())/2, X_AXIS);
+
+ return s ;
+ }
+ }
+ else
+ {
+ return church_rest (me, musfont, measures, space);
+ }
+}
+
+
+/*
+ WIDTH can also be 0 to determine the minimum size of the object.
+ */
+Molecule
+Multi_measure_rest::big_rest (Grob *me, Real width)
+{
+ Real thick_thick = gh_scm2double (me->get_grob_property ("thick-thickness"));
+ Real hair_thick = gh_scm2double (me->get_grob_property ("hair-thickness"));
+
+
+ Real ss = Staff_symbol_referencer::staff_space (me);
+ Real slt = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
+ Real y = slt * thick_thick/2 * ss;
+ Real ythick = hair_thick * slt * ss;
+ Box b(Interval (0, 0 >? (width - 2 * ythick)), Interval (-y, y));
+
+ Real blot = width ? (.8 * (y <? ythick)) : 0.0;
+
+ Molecule m = Lookup::round_filled_box (b, blot);
+ Molecule yb = Lookup::round_filled_box (Box (Interval (-0.5, 0.5)* ythick, Interval (-ss, ss)), blot);
+
+ m.add_at_edge (X_AXIS, RIGHT, yb, 0, 0);
+ m.add_at_edge (X_AXIS, LEFT, yb, 0, 0);
+
+ m.align_to (X_AXIS, LEFT);
+
+ return m;