Index: src/pathops/SkPathOpsTightBounds.cpp |
diff --git a/src/pathops/SkPathOpsTightBounds.cpp b/src/pathops/SkPathOpsTightBounds.cpp |
index 19593c228b9b5d93492a9fe93123923a4bc8acc4..e3a3108bd72b5a942728028dcc485e3a6cf4ed0b 100644 |
--- a/src/pathops/SkPathOpsTightBounds.cpp |
+++ b/src/pathops/SkPathOpsTightBounds.cpp |
@@ -11,11 +11,20 @@ bool TightBounds(const SkPath& path, SkRect* result) { |
SkChunkAlloc allocator(4096); // FIXME: constant-ize, tune |
SkOpContour contour; |
SkOpContourHead* contourList = static_cast<SkOpContourHead*>(&contour); |
- SkOpGlobalState globalState(nullptr, contourList SkDEBUGPARAMS(false) |
+ SkOpGlobalState globalState(contourList, &allocator SkDEBUGPARAMS(false) |
SkDEBUGPARAMS(nullptr)); |
// turn path into list of segments |
- SkOpEdgeBuilder builder(path, &contour, &allocator, &globalState); |
- if (!builder.finish(&allocator)) { |
+ SkScalar scaleFactor = ScaleFactor(path); |
+ SkPath scaledPath; |
+ const SkPath* workingPath; |
+ if (scaleFactor > SK_Scalar1) { |
+ ScalePath(path, 1.f / scaleFactor, &scaledPath); |
+ workingPath = &scaledPath; |
+ } else { |
+ workingPath = &path; |
+ } |
+ SkOpEdgeBuilder builder(*workingPath, &contour, &globalState); |
+ if (!builder.finish()) { |
return false; |
} |
if (!SortContourList(&contourList, false, false)) { |