diff options
author | caryclark <caryclark@google.com> | 2014-11-13 06:58:52 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-13 06:58:52 -0800 |
commit | 65f553182ab7069378ef863d30094d0327f178d0 (patch) | |
tree | 4e7a435941ae82ddd6cab0abcfb2ed7946f79969 /src/pathops/SkOpContour.h | |
parent | b1cff03325c42bb1cd87204d9b0dd3d6b9678d3e (diff) |
These tests stress pathops by describing the union of circle-like paths that have tiny line segments embedded and double back to create near-coincident conditions.
The fixes include
- detect when finding the active top loops between two possible answers
- preflight chasing winding to ensure answer is consistent
- binary search more often when quadratic intersection fails
- add more failure paths when an intersect is missed
While this fixes the chrome bug, reenabling path ops in svg should be deferred until additional fixes are landed.
TBR=
BUG=421132
Committed: https://skia.googlesource.com/skia/+/6f726addf3178b01949bb389ef83cf14a1d7b6b2
Review URL: https://codereview.chromium.org/633393002
Diffstat (limited to 'src/pathops/SkOpContour.h')
-rw-r--r-- | src/pathops/SkOpContour.h | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/pathops/SkOpContour.h b/src/pathops/SkOpContour.h index 899367ab0e..7a1cc09247 100644 --- a/src/pathops/SkOpContour.h +++ b/src/pathops/SkOpContour.h @@ -127,9 +127,9 @@ public: } } - void checkEnds() { + bool checkEnds() { if (!fContainsCurves) { - return; + return true; } int segmentCount = fSegments.count(); for (int sIndex = 0; sIndex < segmentCount; ++sIndex) { @@ -140,8 +140,11 @@ public: if (segment->done()) { continue; // likely coincident, nothing to do } - segment->checkEnds(); + if (!segment->checkEnds()) { + return false; + } } + return true; } void checkMultiples() { |