| Index: src/pathops/SkDQuadIntersection.cpp
|
| diff --git a/src/pathops/SkDQuadIntersection.cpp b/src/pathops/SkDQuadIntersection.cpp
|
| index fcb9171f32f798c1b5b93808d3d80fa8dd3aee4e..239711c3215b22ff40434f8f5b1a3ba44c1e75f7 100644
|
| --- a/src/pathops/SkDQuadIntersection.cpp
|
| +++ b/src/pathops/SkDQuadIntersection.cpp
|
| @@ -73,7 +73,6 @@
|
| } else if (approximately_greater_than_one(t)) {
|
| t = 1;
|
| }
|
| - SkASSERT(t >= 0 && t <= 1);
|
| valid[result++] = t;
|
| }
|
| return result;
|
| @@ -243,18 +242,10 @@
|
|
|
| // FIXME ? should this measure both and then use the quad that is the flattest as the line?
|
| static bool is_linear(const SkDQuad& q1, const SkDQuad& q2, SkIntersections* i) {
|
| - if (i->flatMeasure()) {
|
| - // for backward compatibility, use the old method when called from cubics
|
| - // FIXME: figure out how to fix cubics when it calls the new path
|
| - double measure = flat_measure(q1);
|
| - // OPTIMIZE: (get rid of sqrt) use approximately_zero
|
| - if (!approximately_zero_sqrt(measure)) { // approximately_zero_sqrt
|
| - return false;
|
| - }
|
| - } else {
|
| - if (!q1.isLinear(0, 2)) {
|
| - return false;
|
| - }
|
| + double measure = flat_measure(q1);
|
| + // OPTIMIZE: (get rid of sqrt) use approximately_zero
|
| + if (!approximately_zero_sqrt(measure)) {
|
| + return false;
|
| }
|
| return is_linear_inner(q1, 0, 1, q2, 0, 1, i, NULL);
|
| }
|
| @@ -314,16 +305,6 @@
|
| SkDebugf("%s t1=%1.9g t2=%1.9g (%1.9g,%1.9g) == (%1.9g,%1.9g)\n", __FUNCTION__,
|
| t1Seed, t2Seed, t1[1].fX, t1[1].fY, t2[1].fX, t2[1].fY);
|
| #endif
|
| - if (*t1Seed < 0) {
|
| - *t1Seed = 0;
|
| - } else if (*t1Seed > 1) {
|
| - *t1Seed = 1;
|
| - }
|
| - if (*t2Seed < 0) {
|
| - *t2Seed = 0;
|
| - } else if (*t2Seed > 1) {
|
| - *t2Seed = 1;
|
| - }
|
| return true;
|
| }
|
| if (calcMask & (1 << 0)) t1[0] = quad1.ptAtT(SkTMax(0., *t1Seed - tStep));
|
| @@ -417,13 +398,11 @@
|
|
|
| int SkIntersections::intersect(const SkDQuad& q1, const SkDQuad& q2) {
|
| fMax = 4;
|
| - bool exactMatch = false;
|
| // if the quads share an end point, check to see if they overlap
|
| for (int i1 = 0; i1 < 3; i1 += 2) {
|
| for (int i2 = 0; i2 < 3; i2 += 2) {
|
| if (q1[i1].asSkPoint() == q2[i2].asSkPoint()) {
|
| insert(i1 >> 1, i2 >> 1, q1[i1]);
|
| - exactMatch = true;
|
| }
|
| }
|
| }
|
| @@ -490,7 +469,6 @@
|
| int rootCount = findRoots(i2, q1, roots1, useCubic, flip1, 0);
|
| // OPTIMIZATION: could short circuit here if all roots are < 0 or > 1
|
| double roots1Copy[4];
|
| - SkDEBUGCODE(sk_bzero(roots1Copy, sizeof(roots1Copy)));
|
| int r1Count = addValidRoots(roots1, rootCount, roots1Copy);
|
| SkDPoint pts1[4];
|
| for (index = 0; index < r1Count; ++index) {
|
| @@ -504,14 +482,12 @@
|
| for (index = 0; index < r2Count; ++index) {
|
| pts2[index] = q2.ptAtT(roots2Copy[index]);
|
| }
|
| - bool triedBinary = false;
|
| if (r1Count == r2Count && r1Count <= 1) {
|
| if (r1Count == 1 && used() == 0) {
|
| if (pts1[0].approximatelyEqual(pts2[0])) {
|
| insert(roots1Copy[0], roots2Copy[0], pts1[0]);
|
| } else {
|
| // find intersection by chasing t
|
| - triedBinary = true;
|
| if (binary_search(q1, q2, roots1Copy, roots2Copy, pts1)) {
|
| insert(roots1Copy[0], roots2Copy[0], pts1[0]);
|
| }
|
| @@ -552,18 +528,7 @@
|
| }
|
| }
|
| if (r1Count && r2Count && !foundSomething) {
|
| - if (exactMatch) {
|
| - SkASSERT(fUsed > 0);
|
| - return fUsed;
|
| - }
|
| relaxed_is_linear(&q1, 0, 1, &q2, 0, 1, this);
|
| - if (fUsed) {
|
| - return fUsed;
|
| - }
|
| - // maybe the curves are nearly coincident
|
| - if (!triedBinary && binary_search(q1, q2, roots1Copy, roots2Copy, pts1)) {
|
| - insert(roots1Copy[0], roots2Copy[0], pts1[0]);
|
| - }
|
| return fUsed;
|
| }
|
| int used = 0;
|
| @@ -588,30 +553,3 @@
|
| } while (++used < r1Count);
|
| return fUsed;
|
| }
|
| -
|
| -void SkIntersections::alignQuadPts(const SkPoint q1[3], const SkPoint q2[3]) {
|
| - for (int index = 0; index < used(); ++index) {
|
| - const SkPoint result = pt(index).asSkPoint();
|
| - if (q1[0] == result || q1[2] == result || q2[0] == result || q2[2] == result) {
|
| - continue;
|
| - }
|
| - if (SkDPoint::ApproximatelyEqual(q1[0], result)) {
|
| - fPt[index].set(q1[0]);
|
| -// SkASSERT(way_roughly_zero(fT[0][index])); // this value can be bigger than way rough
|
| - fT[0][index] = 0;
|
| - } else if (SkDPoint::ApproximatelyEqual(q1[2], result)) {
|
| - fPt[index].set(q1[2]);
|
| -// SkASSERT(way_roughly_equal(fT[0][index], 1));
|
| - fT[0][index] = 1;
|
| - }
|
| - if (SkDPoint::ApproximatelyEqual(q2[0], result)) {
|
| - fPt[index].set(q2[0]);
|
| -// SkASSERT(way_roughly_zero(fT[1][index]));
|
| - fT[1][index] = 0;
|
| - } else if (SkDPoint::ApproximatelyEqual(q2[2], result)) {
|
| - fPt[index].set(q2[2]);
|
| -// SkASSERT(way_roughly_equal(fT[1][index], 1));
|
| - fT[1][index] = 1;
|
| - }
|
| - }
|
| -}
|
|
|