+
+ SCM s = me->get_grob_property ("number-threshold");
+ if (measures > gh_scm2int (s))
+ {
+ Molecule s = Text_item::text2molecule (me,
+ scm_makfrom0str (to_string (measures).to_str0 ()),
+ alist_chain);
+
+ s.align_to (X_AXIS, CENTER);
+ s.translate_axis (gh_scm2double (me->get_grob_property ("padding")) + 2,
+ Y_AXIS);
+
+ s.translate_axis (mol.extent (X_AXIS).center (), X_AXIS);
+ mol.add_molecule (s);
+ }
+ mol.translate_axis (x_off, X_AXIS);
+ return mol.smobbed_copy ();
+}
+
+
+Molecule
+Multi_measure_rest::symbol_molecule (Grob *me, Real space)
+{
+ 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);
+
+ SCM style_chain =
+ Font_interface::add_style (me, ly_symbol2scm ("mmrest-symbol"),
+ alist_chain);
+
+ Real staff_space = Staff_symbol_referencer::staff_space (me);
+ Font_metric *musfont
+ = Font_interface::get_font (me,style_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);
+ }
+}
+
+
+
+Molecule
+Multi_measure_rest::big_rest (Grob *me, Real width)
+{
+ Real thick = gh_scm2double (me->get_grob_property ("thickness"));
+ Real ss = Staff_symbol_referencer::staff_space (me);
+
+ Real slt = me->get_paper ()->get_var ("linethickness");
+ Real y = slt * thick/2 * ss;
+ Box b(Interval (0, width), Interval (-y, y));
+ Real ythick = slt * ss;
+
+ Molecule m = Lookup::filledbox (b);
+ Molecule yb = Lookup::filledbox (Box (Interval (-ythick, ythick), Interval (-ss, ss)));
+
+ m.add_at_edge (X_AXIS, RIGHT, yb, -ythick);
+ m.add_at_edge (X_AXIS, LEFT, yb, -ythick);
+
+ m.align_to (X_AXIS, LEFT);