| Index: src/pathops/SkPathOpsQuad.cpp
|
| diff --git a/src/pathops/SkPathOpsQuad.cpp b/src/pathops/SkPathOpsQuad.cpp
|
| index 63e20388dd8edab2d5c5c3bd1b8457359980a9cb..c1d068af345701e64c5251007d172d29e83fbeb3 100644
|
| --- a/src/pathops/SkPathOpsQuad.cpp
|
| +++ b/src/pathops/SkPathOpsQuad.cpp
|
| @@ -252,10 +252,10 @@ SkDPoint SkDQuad::subDivide(const SkDPoint& a, const SkDPoint& c, double t1, dou
|
| SkDLine b1 = {{c, sub[1] + (c - sub[2])}};
|
| SkIntersections i;
|
| i.intersectRay(b0, b1);
|
| - if (i.used() == 1) {
|
| + if (i.used() == 1 && i[0][0] >= 0 && i[1][0] >= 0) {
|
| b = i.pt(0);
|
| } else {
|
| - SkASSERT(i.used() == 2 || i.used() == 0);
|
| + SkASSERT(i.used() <= 2);
|
| b = SkDPoint::Mid(b0[1], b1[1]);
|
| }
|
| #endif
|
| @@ -265,14 +265,14 @@ SkDPoint SkDQuad::subDivide(const SkDPoint& a, const SkDPoint& c, double t1, dou
|
| if (t1 == 1 || t2 == 1) {
|
| align(2, &b);
|
| }
|
| - if (precisely_subdivide_equal(b.fX, a.fX)) {
|
| + if (AlmostBequalUlps(b.fX, a.fX)) {
|
| b.fX = a.fX;
|
| - } else if (precisely_subdivide_equal(b.fX, c.fX)) {
|
| + } else if (AlmostBequalUlps(b.fX, c.fX)) {
|
| b.fX = c.fX;
|
| }
|
| - if (precisely_subdivide_equal(b.fY, a.fY)) {
|
| + if (AlmostBequalUlps(b.fY, a.fY)) {
|
| b.fY = a.fY;
|
| - } else if (precisely_subdivide_equal(b.fY, c.fY)) {
|
| + } else if (AlmostBequalUlps(b.fY, c.fY)) {
|
| b.fY = c.fY;
|
| }
|
| return b;
|
| @@ -340,16 +340,3 @@ void SkDQuad::SetABC(const double* quad, double* a, double* b, double* c) {
|
| *a -= *b; // a = A - 2*B + C
|
| *b -= *c; // b = 2*B - 2*C
|
| }
|
| -
|
| -#ifdef SK_DEBUG
|
| -void SkDQuad::dump() {
|
| - SkDebugf("{{");
|
| - int index = 0;
|
| - do {
|
| - fPts[index].dump();
|
| - SkDebugf(", ");
|
| - } while (++index < 2);
|
| - fPts[index].dump();
|
| - SkDebugf("}}\n");
|
| -}
|
| -#endif
|
|
|