• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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