Index: src/pathops/SkPathOpsOp.cpp |
=================================================================== |
--- src/pathops/SkPathOpsOp.cpp (revision 8862) |
+++ src/pathops/SkPathOpsOp.cpp (working copy) |
@@ -226,7 +226,7 @@ |
{{ false, true }, { false, false }}, // rev diff |
}; |
-void Op(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result) { |
+bool Op(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result) { |
op = gOpInverse[op][one.isInverseFillType()][two.isInverseFillType()]; |
SkPath::FillType fillType = gOutInverse[op][one.isInverseFillType()][two.isInverseFillType()] |
? SkPath::kInverseEvenOdd_FillType : SkPath::kEvenOdd_FillType; |
@@ -246,7 +246,9 @@ |
SkOpEdgeBuilder builder(*minuend, contours); |
const int xorMask = builder.xorMask(); |
builder.addOperand(*subtrahend); |
- builder.finish(); |
+ if (!builder.finish()) { |
+ return false; |
+ } |
result->reset(); |
result->setFillType(fillType); |
const int xorOpMask = builder.xorMask(); |
@@ -255,7 +257,7 @@ |
xorOpMask == kEvenOdd_PathOpsMask); |
SkOpContour** currentPtr = contourList.begin(); |
if (!currentPtr) { |
- return; |
+ return true; |
} |
SkOpContour** listEnd = contourList.end(); |
// find all intersections between segments |
@@ -298,5 +300,7 @@ |
SkPathWriter assembled(temp); |
Assemble(wrapper, &assembled); |
*result = *assembled.nativePath(); |
+ result->setFillType(fillType); |
} |
+ return true; |
} |