- Avoid too steep slurs.
- */
- Real damp_f = paper ()->get_var ("slur_slope_damping");
- Offset d_off = Offset (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT],
- dy_f_drul_[RIGHT] - dy_f_drul_[LEFT]);
- d_off[X_AXIS] += extent (X_AXIS).length ();
-
- Real ratio_f = abs (d_off[Y_AXIS] / d_off[X_AXIS]);
- if (ratio_f > damp_f)
- dy_f_drul_[(Direction)(- dir_ * sign (d_off[Y_AXIS]))] +=
- dir_ * (ratio_f - damp_f) * d_off[X_AXIS];
-}
+ If, after correcting, we're close to stem-end...
+ */
+ Drul_array<Real> snapy_f_drul;
+ snapy_f_drul[LEFT] = snapy_f_drul[RIGHT] = 0;
+ Drul_array<Real> snapx_f_drul;
+ snapx_f_drul[LEFT] = snapx_f_drul[RIGHT] = 0;
+ Drul_array<bool> snapped_b_drul;
+ snapped_b_drul[LEFT] = snapped_b_drul[RIGHT] = false;
+ do
+ {
+ Note_column * nc = note_column_drul[d];
+ if (nc == spanned_drul_[d]
+ && nc->stem_l_
+ && nc->stem_l_->dir_ == dir_
+ && abs (nc->stem_l_->extent (Y_AXIS)[dir_]
+ - dy_f_drul_[d] + (d == LEFT ? 0 : interstaff_f))
+ <= snap_f)
+ {
+ /*
+ prepare to attach to stem-end
+ */
+ snapx_f_drul[d] = nc->stem_l_->hpos_f ()
+ - spanned_drul_[d]->relative_coordinate (0, X_AXIS);
+
+ snapy_f_drul[d] = nc->stem_l_->extent (Y_AXIS)[dir_]
+ + interstaff_interval[d]
+ + dir_ * 2 * y_gap_f;
+
+ snapped_b_drul[d] = true;
+ }
+ }
+ while (flip (&d) != LEFT);