source file of the GNU LilyPond music typesetter
- (c) 1998--2003 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);
}
-
+/*
+ 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_realvar (ly_symbol2scm ("linethickness"));
- Real y = slt * tthick/2 * ss;
+ 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, 0);
m.add_at_edge (X_AXIS, LEFT, yb, 0, 0);
rod.distance_ = l->extent (l, X_AXIS)[BIGGER] - r->extent (r, X_AXIS)[SMALLER]
+ sym_width + 2.0; // 2.0 = magic!
- Real minlen =0.0;
- SCM ml =me->get_grob_property ("minimum-length");
- if (gh_number_p (ml)) minlen = gh_scm2double (ml);
+ Real minlen = robust_scm2double (me->get_grob_property ("minimum-length"), 0.0);
rod.distance_ = max(rod.distance_,
minlen);
rod.add_to_cols ();