Index: src/pathops/SkOpAngle.cpp |
diff --git a/src/pathops/SkOpAngle.cpp b/src/pathops/SkOpAngle.cpp |
index 894758cfe8100dc1ef5dd8b60543978027173352..0c87d3ba9e840939bea323d5a6f6ba456e89b0c3 100644 |
--- a/src/pathops/SkOpAngle.cpp |
+++ b/src/pathops/SkOpAngle.cpp |
@@ -286,12 +286,9 @@ bool SkOpAngle::checkParallel(const SkOpAngle& rh) const { |
// would cause it to intersect one of the adjacent angles |
bool SkOpAngle::computeSector() { |
if (fComputedSector) { |
- // FIXME: logically, this should return !fUnorderable, but doing so breaks testQuadratic51 |
- // -- but in general, this code may not work so this may be the least of problems |
- // adding the bang fixes testQuads46x in release, however |
return !fUnorderable; |
} |
- SkASSERT(fSegment->verb() != SkPath::kLine_Verb && small()); |
+// SkASSERT(fSegment->verb() != SkPath::kLine_Verb && small()); |
fComputedSector = true; |
int step = fStart < fEnd ? 1 : -1; |
int limit = step > 0 ? fSegment->count() : -1; |
@@ -633,7 +630,7 @@ int SkOpAngle::findSector(SkPath::Verb verb, double x, double y) const { |
{{ 6, 3, 0}, { 7, -1, 15}, { 8, 11, 14}}, // abs(x) > abs(y) |
}; |
int sector = sedecimant[(xy >= 0) + (xy > 0)][(y >= 0) + (y > 0)][(x >= 0) + (x > 0)] * 2 + 1; |
- SkASSERT(SkPath::kLine_Verb == verb || sector >= 0); |
+// SkASSERT(SkPath::kLine_Verb == verb || sector >= 0); |
return sector; |
} |
@@ -934,12 +931,12 @@ void SkOpAngle::setCurveHullSweep() { |
void SkOpAngle::setSector() { |
SkPath::Verb verb = fSegment->verb(); |
if (SkPath::kLine_Verb != verb && small()) { |
- fSectorStart = fSectorEnd = -1; |
- fSectorMask = 0; |
- fComputeSector = true; // can't determine sector until segment length can be found |
- return; |
+ goto deferTilLater; |
} |
fSectorStart = findSector(verb, fSweep[0].fX, fSweep[0].fY); |
+ if (fSectorStart < 0) { |
+ goto deferTilLater; |
+ } |
if (!fIsCurve) { // if it's a line or line-like, note that both sectors are the same |
SkASSERT(fSectorStart >= 0); |
fSectorEnd = fSectorStart; |
@@ -948,6 +945,13 @@ void SkOpAngle::setSector() { |
} |
SkASSERT(SkPath::kLine_Verb != verb); |
fSectorEnd = findSector(verb, fSweep[1].fX, fSweep[1].fY); |
+ if (fSectorEnd < 0) { |
+deferTilLater: |
+ fSectorStart = fSectorEnd = -1; |
+ fSectorMask = 0; |
+ fComputeSector = true; // can't determine sector until segment length can be found |
+ return; |
+ } |
if (fSectorEnd == fSectorStart) { |
SkASSERT((fSectorStart & 3) != 3); // if the sector has no span, it can't be an exact angle |
fSectorMask = 1 << fSectorStart; |