|  | /* | 
|  | * Copyright 2014 Google Inc. | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  | #include "SkOpEdgeBuilder.h" | 
|  | #include "SkPathOpsCommon.h" | 
|  |  | 
|  | bool TightBounds(const SkPath& path, SkRect* result) { | 
|  | // turn path into list of segments | 
|  | SkTArray<SkOpContour> contours; | 
|  | SkOpEdgeBuilder builder(path, contours); | 
|  | if (!builder.finish()) { | 
|  | return false; | 
|  | } | 
|  | SkTArray<SkOpContour*, true> contourList; | 
|  | MakeContourList(contours, contourList, false, false); | 
|  | SkOpContour** currentPtr = contourList.begin(); | 
|  | result->setEmpty(); | 
|  | if (!currentPtr) { | 
|  | return true; | 
|  | } | 
|  | SkOpContour** listEnd = contourList.end(); | 
|  | SkOpContour* current = *currentPtr++; | 
|  | SkPathOpsBounds bounds = current->bounds(); | 
|  | while (currentPtr != listEnd) { | 
|  | current = *currentPtr++; | 
|  | bounds.add(current->bounds()); | 
|  | } | 
|  | *result = bounds; | 
|  | return true; | 
|  | } |