source file of the GNU LilyPond music typesetter
- (c) 1998--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1998--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
make_rod (Single_malt_grouping_item *l, Single_malt_grouping_item *r)
{
Rod rod;
- rod.item_l_drul_[LEFT] =l;
- rod.item_l_drul_[RIGHT]=r;
Interval li (l->my_width ());
Interval ri (r->my_width ());
-
+
+ rod.item_l_drul_[LEFT] =l;
+ rod.item_l_drul_[RIGHT]=r;
+
if (li.empty_b () || ri.empty_b ())
rod.distance_f_ = 0;
else
rod.distance_f_ = li[RIGHT] - ri[LEFT];
+ rod.columnize ();
return rod;
}
for (SCM s = get_elt_property ("elements"); gh_pair_p (s) && gh_pair_p (gh_cdr (s)); s = gh_cdr (s))
{
- SCM elt = gh_car (s);
- SCM next_elt = gh_cadr (s);
+ /*
+ Order of elements is reversed!
+ */
+ SCM elt = gh_cadr (s);
+ SCM next_elt = gh_car (s);
Single_malt_grouping_item *l = dynamic_cast<Single_malt_grouping_item*> (unsmob_element (elt));
Single_malt_grouping_item *r = dynamic_cast<Single_malt_grouping_item*> (unsmob_element ( next_elt));
continue;
Single_malt_grouping_item *lb
- = dynamic_cast<Single_malt_grouping_item*>(l->find_broken_piece (RIGHT));
+ = dynamic_cast<Single_malt_grouping_item*>(l->find_prebroken_piece (RIGHT));
Single_malt_grouping_item *rb
- = dynamic_cast<Single_malt_grouping_item*>(r->find_broken_piece (LEFT));
+ = dynamic_cast<Single_malt_grouping_item*>(r->find_prebroken_piece (LEFT));
a.push (make_rod(l, r));
if (lb)
a.push (rod);
}
}
-
+
+ /*
+ We've done our job, so we get lost.
+ */
+ for (SCM s = get_elt_property ("elements"); gh_pair_p (s); s = gh_cdr (s))
+ {
+ Item * it =dynamic_cast<Item*>(unsmob_element (gh_car (s)));
+ if (it && it->broken_b ())
+ {
+ it->find_prebroken_piece (LEFT) ->suicide ();
+ it->find_prebroken_piece (RIGHT)->suicide ();
+ }
+ it->suicide ();
+ }
+
+ ((Separating_group_spanner *)this)->suicide ();
+
return a;
}