Home | History | Annotate | Download | only in pathops
      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