| 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)) {
|
|
|