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 TightBounds(const SkPath & path,SkRect * result)10bool TightBounds(const SkPath& path, SkRect* result) { 11 // turn path into list of segments 12 SkTArray<SkOpContour> contours; 13 SkOpEdgeBuilder builder(path, contours); 14 if (!builder.finish()) { 15 return false; 16 } 17 SkTArray<SkOpContour*, true> contourList; 18 MakeContourList(contours, contourList, false, false); 19 SkOpContour** currentPtr = contourList.begin(); 20 result->setEmpty(); 21 if (!currentPtr) { 22 return true; 23 } 24 SkOpContour** listEnd = contourList.end(); 25 SkOpContour* current = *currentPtr++; 26 SkPathOpsBounds bounds = current->bounds(); 27 while (currentPtr != listEnd) { 28 current = *currentPtr++; 29 bounds.add(current->bounds()); 30 } 31 *result = bounds; 32 return true; 33 } 34