1 2 /* 3 * Copyright 2011 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 #ifndef GrPathUtils_DEFINED 11 #define GrPathUtils_DEFINED 12 13 #include "GrMatrix.h" 14 #include "GrPath.h" 15 #include "SkTArray.h" 16 17 /** 18 * Utilities for evaluating paths. 19 */ 20 namespace GrPathUtils { 21 GrScalar scaleToleranceToSrc(GrScalar devTol, 22 const GrMatrix& viewM, 23 const GrRect& pathBounds); 24 25 /// Since we divide by tol if we're computing exact worst-case bounds, 26 /// very small tolerances will be increased to gMinCurveTol. 27 int worstCasePointCount(const GrPath&, 28 int* subpaths, 29 GrScalar tol); 30 /// Since we divide by tol if we're computing exact worst-case bounds, 31 /// very small tolerances will be increased to gMinCurveTol. 32 uint32_t quadraticPointCount(const GrPoint points[], GrScalar tol); 33 uint32_t generateQuadraticPoints(const GrPoint& p0, 34 const GrPoint& p1, 35 const GrPoint& p2, 36 GrScalar tolSqd, 37 GrPoint** points, 38 uint32_t pointsLeft); 39 /// Since we divide by tol if we're computing exact worst-case bounds, 40 /// very small tolerances will be increased to gMinCurveTol. 41 uint32_t cubicPointCount(const GrPoint points[], GrScalar tol); 42 uint32_t generateCubicPoints(const GrPoint& p0, 43 const GrPoint& p1, 44 const GrPoint& p2, 45 const GrPoint& p3, 46 GrScalar tolSqd, 47 GrPoint** points, 48 uint32_t pointsLeft); 49 // Compute a matrix that goes from the 2d space coordinates to UV space 50 // where u^2-v = 0 specifies the quad. 51 void quadDesignSpaceToUVCoordsMatrix(const GrPoint qPts[3], 52 GrMatrix* matrix); 53 // Converts a cubic into a sequence of quads. If working in device space 54 // use tolScale = 1, otherwise set based on stretchiness of the matrix. The 55 // result is sets of 3 points in quads (TODO: share endpoints in returned 56 // array) 57 void convertCubicToQuads(const GrPoint p[4], 58 SkScalar tolScale, 59 SkTArray<SkPoint, true>* quads); 60 }; 61 #endif 62