+
+
+Array<Offset>
+Slur_score_state::generate_avoid_offsets () const
+{
+ Array<Offset> avoid;
+ Link_array<Grob> encompasses = columns_;
+
+ for (int i = 0; i < encompasses.size (); i++)
+ {
+ if (extremes_[LEFT].note_column_ == encompasses[i]
+ || extremes_[RIGHT].note_column_ == encompasses[i])
+ continue;
+
+ Encompass_info inf (get_encompass_info (encompasses[i]));
+ Real y = dir_ * (max (dir_ * inf.head_, dir_ * inf.stem_));
+
+ avoid.push (Offset (inf.x_, y + dir_ * parameters_.free_head_distance_));
+ }
+
+ Link_array<Grob> extra_encompasses
+ = extract_grob_array (slur_, ly_symbol2scm ("encompass-objects"));
+ for (int i = 0; i < extra_encompasses.size (); i++)
+ if (Slur::has_interface (extra_encompasses[i]))
+ {
+ Grob *small_slur = extra_encompasses[i];
+ Bezier b = Slur::get_curve (small_slur);
+
+ Offset z = b.curve_point (0.5);
+ z += Offset (small_slur->relative_coordinate (common_[X_AXIS], X_AXIS),
+ small_slur->relative_coordinate (common_[Y_AXIS], Y_AXIS));
+
+ z[Y_AXIS] += dir_ * parameters_.free_slur_distance_;
+ avoid.push (z);
+ }
+
+ return avoid;
+}
+