• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef SkBoundaryPatch_DEFINED
2 #define SkBoundaryPatch_DEFINED
3 
4 #include "SkPoint.h"
5 #include "SkRefCnt.h"
6 
7 class SkBoundary : public SkRefCnt {
8 public:
9     // These must be 0, 1, 2, 3 for efficiency in the subclass implementations
10     enum Edge {
11         kTop    = 0,
12         kRight  = 1,
13         kBottom = 2,
14         kLeft   = 3
15     };
16     // Edge index goes clockwise around the boundary, beginning at the "top"
17     virtual SkPoint eval(Edge, SkScalar unitInterval) = 0;
18 };
19 
20 class SkBoundaryPatch {
21 public:
22     SkBoundaryPatch();
23     ~SkBoundaryPatch();
24 
getBoundary()25     SkBoundary* getBoundary() const { return fBoundary; }
26     SkBoundary* setBoundary(SkBoundary*);
27 
28     SkPoint eval(SkScalar unitU, SkScalar unitV);
29     bool evalPatch(SkPoint verts[], int rows, int cols);
30 
31 private:
32     SkBoundary* fBoundary;
33 };
34 
35 ////////////////////////////////////////////////////////////////////////
36 
37 class SkLineBoundary : public SkBoundary {
38 public:
39     SkPoint fPts[4];
40 
41     // override
42     virtual SkPoint eval(Edge, SkScalar);
43 };
44 
45 class SkCubicBoundary : public SkBoundary {
46 public:
47     // the caller sets the first 12 entries. The 13th is used by the impl.
48     SkPoint fPts[13];
49 
50     // override
51     virtual SkPoint eval(Edge, SkScalar);
52 };
53 
54 #endif
55 
56