}
/* We calculate three things here: the ideal distance, the minimum distance
- (which is the distance at which collisions will occure) and the "fixed"
+ (which is the distance at which collisions will occur) and the "fixed"
distance, which is the distance at which things start to look really bad.
We arrange things so that the fixed distance will be attained when the
line is compressed with a force of 1.0 */
Spring
Staff_spacing::get_spacing (Grob *me, Grob *right_col)
{
- Grob *separation_item = 0;
Item *me_item = dynamic_cast<Item *> (me);
-
- extract_grob_set (me, "left-items", items);
- for (vsize i = items.size (); i--;)
- {
- Grob *cand = items[i];
- if (cand && Separation_item::has_interface (cand))
- separation_item = cand;
- }
-
- // printf ("doing col %d\n" , Paper_column::get_rank (left_col));
- if (!separation_item)
- {
- programming_error ("no sep item");
- return Spring ();
- }
+ Grob *left_col = me_item->get_column ();
Interval last_ext;
- Grob *last_grob = Separation_item::extremal_break_aligned_grob (separation_item, RIGHT,
- &last_ext);
+ Direction break_dir = me_item->break_status_dir ();
+ Grob *last_grob = Spacing_interface::extremal_break_aligned_grob (me, LEFT,
+ break_dir,
+ &last_ext);
if (!last_grob)
{
/*
ideal = fixed;
}
+
Real optical_correction = next_notes_correction (me, last_grob);
- Real min_dist = Spacing_interface::minimum_distance (me, right_col);
+ Real min_dist = Paper_column::minimum_distance (left_col, right_col);
/* ensure that the "fixed" distance will leave a gap of at least 0.3 ss. */
Real min_dist_correction = max (0.0, 0.3 + min_dist - fixed);
ideal += correction;
Spring ret (ideal, min_dist);
- ret.set_inverse_stretch_strength (ideal - fixed);
+ ret.set_inverse_stretch_strength (max (0.0, ideal - fixed));
return ret;
}