source file of the GNU LilyPond music typesetter
- (c) 1998--2002 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 1998--2004 Jan Nieuwenhuizen <janneke@gnu.org>
*/
#include "text-item.hh"
#include "percent-repeat-item.hh"
#include "lookup.hh"
+#include "separation-item.hh"
MAKE_SCHEME_CALLBACK (Multi_measure_rest,percent,1);
SCM
Grob *common = sp->get_bound (LEFT)->common_refpoint (sp->get_bound (RIGHT), X_AXIS);
do
{
- Item * col = sp->get_bound (d)->get_column ();
+ Item * b = sp->get_bound (d);
- Interval coldim = col->extent (common, X_AXIS);
+ Interval coldim = (Separation_item::has_interface (b))
+ ? Separation_item::relative_width (b, common)
+ : b->extent (common, X_AXIS);
- sp_iv[d] = coldim[-d] ;
+ sp_iv[d] = coldim.is_empty () ? b->relative_coordinate (common, X_AXIS) : coldim[-d];
}
while ((flip (&d)) != LEFT);
Real staff_space = Staff_symbol_referencer::staff_space (me);
Font_metric *musfont
- = Font_interface::get_font (me,alist_chain);
+ = select_font (me->get_paper (), alist_chain);
SCM sml = me->get_grob_property ("use-breve-rest");
if (measures == 1)
}
-
+/*
+ WIDTH can also be 0 to determine the minimum size of the object.
+ */
Molecule
Multi_measure_rest::big_rest (Grob *me, Real width)
{
- Real tthick = gh_scm2double (me->get_grob_property ("thick-thickness"));
- Real hair_thick = gh_scm2double (me->get_grob_property ("hair-thickness"));
+ Real thick_thick =robust_scm2double (me->get_grob_property ("thick-thickness"), 1.0);
+ Real hair_thick = robust_scm2double (me->get_grob_property ("hair-thickness"), .1);
Real ss = Staff_symbol_referencer::staff_space (me);
-
- Real slt = me->get_paper ()->get_var ("linethickness");
- Real y = slt * tthick/2 * ss;
+ 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, width - 2 * ythick), Interval (-y, y));
+ Box b(Interval (0, 0 >? (width - 2 * ythick)), Interval (-y, y));
+
+ Real blot = width ? (.8 * (y <? ythick)) : 0.0;
- Molecule m = Lookup::filledbox (b);
- Molecule yb = Lookup::filledbox (Box (Interval (-0.5, 0.5)* ythick, Interval (-ss, ss)));
+ 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);
- m.add_at_edge (X_AXIS, LEFT, yb, 0);
+ 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);
Molecule mol;
for (SCM s = mols; gh_pair_p (s); s = gh_cdr(s))
{
- mol.add_at_edge (X_AXIS, LEFT, *unsmob_molecule (gh_car (s)), inner_padding);
+ mol.add_at_edge (X_AXIS, LEFT, *unsmob_molecule (gh_car (s)), inner_padding, 0);
}
mol.align_to (X_AXIS, LEFT);
mol.translate_axis (outer_padding_factor * inner_padding, X_AXIS);
MAKE_SCHEME_CALLBACK (Multi_measure_rest, set_spacing_rods,1);
-
SCM
Multi_measure_rest::set_spacing_rods (SCM smob)
{
- return SCM_UNSPECIFIED;
-
Grob*me = unsmob_grob (smob);
Spanner*sp = dynamic_cast<Spanner*> (me);
rod.distance_ = l->extent (l, X_AXIS)[BIGGER] - r->extent (r, X_AXIS)[SMALLER]
+ sym_width + 2.0; // 2.0 = magic!
+ Real minlen = robust_scm2double (me->get_grob_property ("minimum-length"), 0.0);
+ rod.distance_ = max(rod.distance_,
+ minlen);
rod.add_to_cols ();
}
return SCM_UNSPECIFIED;
ADD_INTERFACE (Multi_measure_rest,"multi-measure-rest-interface",
- "A rest that spans a whole number of measures.\n",
- "expand-limit measure-count hair-thickness thick-thickness use-breve-rest");
+ "A rest that spans a whole number of measures.",
+ "expand-limit measure-count hair-thickness thick-thickness use-breve-rest minimum-length");