- {
- Slur_configuration s;
- Direction d = LEFT;
- Drul_array<bool> attach_to_stem (false, false);
- do
- {
- os[d][X_AXIS] = base_attachments_[d][X_AXIS];
- if (extremes_[d].stem_
- && !Stem::is_invisible (extremes_[d].stem_)
- && extremes_[d].stem_dir_ == dir_)
- {
- Interval stem_y = extremes_[d].stem_extent_[Y_AXIS];
- stem_y.widen (0.25 * staff_space_);
- if (stem_y.contains (os[d][Y_AXIS]))
- {
- os[d][X_AXIS] = extremes_[d].stem_extent_[X_AXIS][-d]
- - d * 0.3;
- attach_to_stem[d] = true;
- }
- else if (dir_ * extremes_[d].stem_extent_[Y_AXIS][dir_]
- < dir_ * os[d][Y_AXIS]
- && !extremes_[d].stem_extent_[X_AXIS].is_empty ())
-
- os[d][X_AXIS] = extremes_[d].stem_extent_[X_AXIS].center ();
- }
- }
- while (flip (&d) != LEFT);
-
- Offset dz;
- dz = os[RIGHT] - os[LEFT];
- if (dz[X_AXIS] < minimum_length
- || fabs (dz[Y_AXIS] / dz[X_AXIS]) > parameters_.max_slope_)
- {
- do
- {
- if (extremes_[d].slur_head_
- && !extremes_[d].slur_head_x_extent_.is_empty ())
- {
- os[d][X_AXIS] = extremes_[d].slur_head_x_extent_.center ();
- attach_to_stem[d] = false;
- }
- }
- while (flip (&d) != LEFT);
- }
-
- dz = os[RIGHT] - os[LEFT];
- do
- {
- if (extremes_[d].slur_head_
- && !attach_to_stem[d])
- {
- /* Horizontally move tilted slurs a little. Move
- more for bigger tilts.
-
- TODO: parameter */
- os[d][X_AXIS]
- -= dir_ * extremes_[d].slur_head_x_extent_.length ()
- * sin (dz.arg ()) / 3;
- }
- }
- while (flip (&d) != LEFT);
-
- s.attachment_ = os;
- s.index_ = scores.size ();
-
- scores.push_back (new Slur_configuration (s));
-
- os[RIGHT][Y_AXIS] += dir_ * staff_space_ / 2;
- }
+ {
+
+ Drul_array<bool> attach_to_stem (false, false);
+ for (LEFT_and_RIGHT (d))
+ {
+ os[d][X_AXIS] = base_attachments_[d][X_AXIS];
+ if (extremes_[d].stem_
+ && !Stem::is_invisible (extremes_[d].stem_)
+ && extremes_[d].stem_dir_ == dir_)
+ {
+ Interval stem_y = extremes_[d].stem_extent_[Y_AXIS];
+ stem_y.widen (0.25 * staff_space_);
+ if (stem_y.contains (os[d][Y_AXIS]))
+ {
+ os[d][X_AXIS] = extremes_[d].stem_extent_[X_AXIS][-d]
+ - d * 0.3;
+ attach_to_stem[d] = true;
+ }
+ else if (dir_ * extremes_[d].stem_extent_[Y_AXIS][dir_]
+ < dir_ * os[d][Y_AXIS]
+ && !extremes_[d].stem_extent_[X_AXIS].is_empty ())
+
+ os[d][X_AXIS] = extremes_[d].stem_extent_[X_AXIS].center ();
+ }
+ }
+
+ Offset dz;
+ dz = os[RIGHT] - os[LEFT];
+ if (dz[X_AXIS] < minimum_length
+ || fabs (dz[Y_AXIS] / dz[X_AXIS]) > parameters_.max_slope_)
+ {
+ for (LEFT_and_RIGHT (d))
+ {
+ if (extremes_[d].slur_head_
+ && !extremes_[d].slur_head_x_extent_.is_empty ())
+ {
+ os[d][X_AXIS] = extremes_[d].slur_head_x_extent_.center ();
+ attach_to_stem[d] = false;
+ }
+ }
+ }
+
+ dz = (os[RIGHT] - os[LEFT]).direction ();
+ for (LEFT_and_RIGHT (d))
+ {
+ if (extremes_[d].slur_head_
+ && !attach_to_stem[d])
+ {
+ /* Horizontally move tilted slurs a little. Move
+ more for bigger tilts.
+
+ TODO: parameter */
+ os[d][X_AXIS]
+ -= dir_ * extremes_[d].slur_head_x_extent_.length ()
+ * dz[Y_AXIS] / 3;
+ }
+ }
+
+ scores.push_back (Slur_configuration::new_config (os, scores.size ()));
+
+ os[RIGHT][Y_AXIS] += dir_ * staff_space_ / 2;
+ }