This reduces the chance that there will be a programming error when looking
for a Bezier intersection, as grobs that no longer intersect with the slur
will not be considered for shifting.
--- /dev/null
+
+\version "2.15.13"
+
+\header {
+ texidoc = "Outside staff callbacks that no longer apply to grobs
+because they are outside the X boundary of a slur should terminate
+early. The example below should generate no warnings about Bezier
+curves and there should be no change in StrokeFinger position between
+the first and second examples.
+"
+}
+
+\relative c'' {
+ \set strokeFingerOrientations = #'(up)
+ \override StrokeFinger #'avoid-slur = #'outside
+ \autoBeamOff
+ <a-\rightHandFinger #2 >16 b
+ <a-\rightHandFinger #2 >16( b)
+}
Interval yext = robust_relative_extent (script, cy, Y_AXIS);
Interval xext = robust_relative_extent (script, cx, X_AXIS);
+ Interval slur_wid (curve.control_[0][X_AXIS], curve.control_[3][X_AXIS]);
+
+ bool contains = false;
+ Direction d = LEFT;
+ do
+ contains |= slur_wid.contains (xext[d]);
+ while (flip (&d) != LEFT);
+
+ if (!contains)
+ return offset_scm;
Real offset = robust_scm2double (offset_scm, 0);
yext.translate (offset);