From d53ecd7512b3a2bb43478ce59a4764e644231a57 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sun, 29 Oct 2006 00:24:20 +0200 Subject: [PATCH] Use X of separation item as slur start. Fixes #120 --- lily/include/slur-scoring.hh | 4 +++- lily/slur-scoring.cc | 31 +++++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/lily/include/slur-scoring.hh b/lily/include/slur-scoring.hh index 4668c58489..3e5b9d86b4 100644 --- a/lily/include/slur-scoring.hh +++ b/lily/include/slur-scoring.hh @@ -98,7 +98,7 @@ struct Slur_score_state Bezier get_best_curve (); void fill (Grob *); void set_next_direction (); - + vector generate_avoid_offsets () const; Drul_array get_bound_info () const; void generate_curves () const; @@ -109,6 +109,8 @@ struct Slur_score_state vector get_extra_encompass_infos () const; Real move_away_from_staffline (Real y, Grob *on_staff) const; int get_closest_index (SCM inspect_quants) const; + + Grob *breakable_bound_item (Direction) const; }; void set_slur_control_points (Grob *me); diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc index 6b4b569911..618786867e 100644 --- a/lily/slur-scoring.cc +++ b/lily/slur-scoring.cc @@ -412,6 +412,23 @@ Slur_score_state::get_best_curve () return configurations_[opt_idx]->curve_; } +Grob * +Slur_score_state::breakable_bound_item (Direction d) const +{ + Grob *col = slur_->get_bound (d)->get_column (); + + extract_grob_set (slur_, "encompass-objects", extra_encompasses); + + for (vsize i = 0; i < extra_encompasses.size (); i++) + { + Item *item = dynamic_cast (extra_encompasses[i]); + if (item && col == item->get_column ()) + return item; + } + + return 0; +} + int Slur_score_state::get_closest_index (SCM inspect_quants) const { @@ -450,7 +467,7 @@ Slur_score_state::get_y_attachment_range () const { end_ys[d] = dir_ * max (max (dir_ * (base_attachments_[d][Y_AXIS] - + parameters_.region_size_ * dir_), + + parameters_.region_size_ * dir_), dir_ * (dir_ + extremes_[d].note_column_->extent (common_[Y_AXIS], Y_AXIS)[dir_])), dir_ * base_attachments_[-d][Y_AXIS]); } @@ -524,12 +541,18 @@ Slur_score_state::get_base_attachments () const { if (!extremes_[d].note_column_) { - Real x, y; - if (d == RIGHT) + Real x = 0; + Real y = 0; + + if (Grob *g = breakable_bound_item (d)) + { + x = robust_relative_extent (g, common_[X_AXIS], X_AXIS)[RIGHT]; + } + else if (d == RIGHT) x = robust_relative_extent (extremes_[d].bound_, common_[X_AXIS], X_AXIS)[d]; else x = slur_->get_broken_left_end_align (); - + Grob *col = (d == LEFT) ? columns_[0] : columns_.back (); if (extremes_[-d].bound_ != col) -- 2.39.5