Add tolerance to quadratic and linear cubic detection
authorcsmartdalton <csmartdalton@google.com>
Wed, 8 Mar 2017 23:10:45 +0000 (16:10 -0700)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Thu, 9 Mar 2017 17:13:42 +0000 (17:13 +0000)
Otherwise these can be misclassified as cusps since there is already
tolerance in the discriminant test.

BUG=skia:

Change-Id: Id02c12f671714cebf799953ebed5335ee4c4d52a
Reviewed-on: https://skia-review.googlesource.com/9355
Reviewed-by: Cary Clark <caryclark@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>

src/core/SkGeometry.cpp

index 175ea50..c2e9b60 100644 (file)
@@ -550,8 +550,9 @@ static SkCubicType classify_cubic(const SkPoint p[4], const SkScalar d[3]) {
     } else if (discr < -SK_ScalarNearlyZero) {
         return kLoop_SkCubicType;
     } else {
-        if (0.f == d[0] && 0.f == d[1]) {
-            return (0.f == d[2] ? kLine_SkCubicType : kQuadratic_SkCubicType);
+        if (SkScalarAbs(d[0]) < SK_ScalarNearlyZero && SkScalarAbs(d[1]) < SK_ScalarNearlyZero) {
+            return ((SkScalarAbs(d[2]) < SK_ScalarNearlyZero) ? kLine_SkCubicType
+                                                              : kQuadratic_SkCubicType);
         } else {
             return kCusp_SkCubicType;
         }