- encompass_arr_.sort (Note_column_compare);
- if (!dir_)
- set_default_dir ();
-
- Real interline_f = paper_l ()->get_realvar (interline_scm_sym);
- Real internote_f = interline_f / 2;
- // URG
- Real notewidth_f = paper_l ()->note_width () * 0.8;
-
- /*
- [OSU]: slur and tie placement
-
- slurs:
- * x = centre of head (upside-down: inner raakpunt stem) - d * gap
-
- * y = length < 5ss : horizontal raakpunt + d * 0.25 ss
- y = length >= 5ss : y next interline - d * 0.25 ss
- --> height <= 5 length ?? we use <= 3 length, now...
- */
-
- Real gap_f = paper_l ()->get_var ("slur_x_gap");
-
- Drul_array<Note_column*> extrema;
- extrema[LEFT] = encompass_arr_[0];
- extrema[RIGHT] = encompass_arr_.top ();
-
- Direction d=LEFT;
-
- do
- {
- if (broken_edge_b (this, extrema, d))
- {
- // ugh -- check if needed
- dx_f_drul_[d] = -d
- *(spanned_drul_[d]->extent (X_AXIS).length () - 0.5 * notewidth_f);
-
- // prebreak
- if (d == RIGHT)
- {
- dx_f_drul_[LEFT] = spanned_drul_[LEFT]->extent (X_AXIS).length ();
-
- // urg -- check if needed
- if (encompass_arr_.size () > 1)
- dx_f_drul_[RIGHT] += notewidth_f;
- }
- }
- /*
- normal slur
- */
- else if (normal_edge_b (this, extrema, d))
- {
- Real notewidth_f = extrema[d]->extent (X_AXIS).length ();
- dy_f_drul_[d] = (int)rint (extrema[d]->stem_l_-> extent (Y_AXIS)[dir_]);
- dx_f_drul_[d] += 0.5 * notewidth_f - d * gap_f;
- if (dir_ == extrema[d]->stem_l_->dir_)
- {
- if (dir_ == d)
- dx_f_drul_[d] += 0.5 * (dir_ * d) * d * notewidth_f;
- else
- dx_f_drul_[d] += 0.25 * (dir_ * d) * d * notewidth_f;
- }
- }
- else
- {
- Real notewidth_f = extrema[d]->extent (X_AXIS).length ();
- dy_f_drul_[d] = (int)rint (extrema[d]->head_positions_interval ()
- [dir_]) * internote_f;
- dx_f_drul_[d] += 0.5 * notewidth_f - d * gap_f;
- }
- dy_f_drul_[d] += dir_ * interline_f;
- if (extrema[d]->stem_l_ && (dir_ == extrema[d]->stem_l_->dir_))
- dy_f_drul_[d] -= dir_ * internote_f;
- }
- while (flip(&d) != LEFT);
-
- // now that both are set, do dependent
- do