1 /* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 #include "SkOpEdgeBuilder.h" 8 #include "SkPathOpsCommon.h" 9 10 bool TightBounds(const SkPath& path, SkRect* result) { 11 SkChunkAlloc allocator(4096); // FIXME: constant-ize, tune 12 SkOpContour contour; 13 SkOpContourHead* contourList = static_cast<SkOpContourHead*>(&contour); 14 SkOpGlobalState globalState(nullptr, contourList SkDEBUGPARAMS(nullptr)); 15 // turn path into list of segments 16 SkOpEdgeBuilder builder(path, &contour, &allocator, &globalState); 17 if (!builder.finish(&allocator)) { 18 return false; 19 } 20 if (!SortContourList(&contourList, false, false)) { 21 result->setEmpty(); 22 return true; 23 } 24 SkOpContour* current = contourList; 25 SkPathOpsBounds bounds = current->bounds(); 26 while ((current = current->next())) { 27 bounds.add(current->bounds()); 28 } 29 *result = bounds; 30 return true; 31 } 32