From: Han-Wen Nienhuys Date: Sat, 18 Sep 2004 10:20:02 +0000 (+0000) Subject: (score_extra_encompass): check if extra X-Git-Tag: release/2.3.17~3 X-Git-Url: https://git.donarmstrong.com/lilypond.git?a=commitdiff_plain;h=bea2c0711843ba48971270ce9557c4ce794e8ca0;p=lilypond.git (score_extra_encompass): check if extra objects are on boundary column. --- diff --git a/ChangeLog b/ChangeLog index 722c36776b..bd0d0eb9fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2004-09-18 Han-Wen Nienhuys + * lily/slur-scoring.cc (score_extra_encompass): check if extra + objects are on boundary column. + * lily/main.cc (parse_argv): process --tex too. * ly/music-functions-init.ly (keepWithTag): add music functions diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index 180f216340..d60fdb76a6 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -81,8 +81,7 @@ Auto_beam_engraver::process_music () junk_beam (); } - if (forbid_ - || !to_boolean (get_property ("autoBeaming"))) + if (forbid_) { consider_end (shortest_mom_); junk_beam (); diff --git a/lily/beam.cc b/lily/beam.cc index 9b71b10331..949d3ae65b 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -815,6 +815,8 @@ Beam::after_line_breaking (SCM smob) void Beam::position_beam (Grob *me) { + if (!me->is_live ()) + return ; if (to_boolean (me->get_property ("positioning-done"))) return ; diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc index 6f91aa9b12..68e1400732 100644 --- a/lily/slur-scoring.cc +++ b/lily/slur-scoring.cc @@ -1030,18 +1030,21 @@ struct Extra_collision_info Real idx_; Box extents_; Real penalty_; - - Extra_collision_info (Real idx, Interval x, Interval y, Real p) + Grob * grob_; + + Extra_collision_info (Grob *g, Real idx, Interval x, Interval y, Real p) { idx_ = idx; extents_[X_AXIS] = x; extents_[Y_AXIS] = y; - penalty_ = p; + penalty_ = p; + grob_ = g; } Extra_collision_info () { idx_ = 0.0; penalty_ = 0.; + grob_ = 0; } }; @@ -1096,7 +1099,8 @@ score_extra_encompass (Grob *me, Grob *common[], Interval xext(-1, 1); xext = xext *(thick*2) + z[X_AXIS]; - Extra_collision_info info (k - 1.0, + Extra_collision_info info (small_slur, + k - 1.0, xext, yext, score_param->extra_object_collision_); @@ -1147,7 +1151,7 @@ score_extra_encompass (Grob *me, Grob *common[], ye.widen (thick * 0.5); xe.widen (thick * 1.0); - Extra_collision_info info (xp, xe, ye, penalty); + Extra_collision_info info (g, xp, xe, ye, penalty); collision_infos.push (info); } } @@ -1169,7 +1173,17 @@ score_extra_encompass (Grob *me, Grob *common[], do { - if (collision_infos[j].extents_[X_AXIS].contains (attachment[d][X_AXIS])) + /* + We need to check for the bound explicitly, since the + slur-ending can be almost vertical, making the Y + coordinate a bad approximation of the object-slur + distance. + */ + Item * as_item = dynamic_cast (collision_infos[j].grob_); + if( (as_item + && as_item->get_column () + == extremes[d] .bound_->get_column ()) + || collision_infos[j].extents_[X_AXIS].contains (attachment[d][X_AXIS])) { y = attachment[d][Y_AXIS]; found = true;