+ The other parts of a note column (eg. flags, accidentals, etc.) don't get
+ the full amount of space. We give them half the amount of space, but then
+ adjust things so there are no collisions.
+ */
+ Drul_array<Skyline> skys = Spacing_interface::skylines (me, right_col);
+ Real distance = skys[LEFT].distance (skys[RIGHT]);
+ Real min_dist = max (0.0, distance);
+ Real min_desired_space = left_head_end + (min_dist - left_head_end + base_space - increment) / 2;
+ Real ideal = base_space - increment + left_head_end;
+
+ /* If we have a NonMusical column on the right, we measure the ideal distance
+ to the bar-line (if present), not the start of the column. */
+ if (!Paper_column::is_musical (right_col)
+ && !skys[RIGHT].is_empty ()
+ && to_boolean (me->get_property ("space-to-barline")))
+ {
+ Grob *bar = Pointer_group_interface::find_grob (right_col,
+ ly_symbol2scm ("elements"),
+ Bar_line::non_empty_barline);
+
+ if (bar)
+ {
+ Real shift = bar->extent (right_col, X_AXIS)[LEFT];
+ ideal -= shift;
+ min_desired_space -= max (shift, 0.0);
+ }
+ else
+ ideal -= right_col->extent (right_col, X_AXIS)[RIGHT];
+ }
+
+ ideal = max (ideal, min_desired_space);
+ stem_dir_correction (me, right_col, increment, &ideal, &min_desired_space);
+
+ /* TODO: grace notes look bad when things are stretched. Should we increase
+ their stretch strength? */
+ Spring ret (max (0.0, ideal), min_dist);
+ ret.set_inverse_compress_strength (max (0.0, ideal - min_desired_space));
+ ret.set_inverse_stretch_strength (max (0.1, base_space - increment));
+ return ret;