reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 1 | #ifndef SkBoundaryPatch_DEFINED |
| 2 | #define SkBoundaryPatch_DEFINED |
| 3 | |
| 4 | #include "SkPoint.h" |
| 5 | #include "SkRefCnt.h" |
| 6 | |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 7 | class SkBoundary : public SkRefCnt { |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 8 | public: |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 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; |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 18 | }; |
| 19 | |
| 20 | class SkBoundaryPatch { |
| 21 | public: |
| 22 | SkBoundaryPatch(); |
| 23 | ~SkBoundaryPatch(); |
| 24 | |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 25 | SkBoundary* getBoundary() const { return fBoundary; } |
| 26 | SkBoundary* setBoundary(SkBoundary*); |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 27 | |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 28 | SkPoint eval(SkScalar unitU, SkScalar unitV); |
| 29 | bool evalPatch(SkPoint verts[], int rows, int cols); |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 30 | |
| 31 | private: |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 32 | SkBoundary* fBoundary; |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 33 | }; |
| 34 | |
| 35 | //////////////////////////////////////////////////////////////////////// |
| 36 | |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 37 | class SkLineBoundary : public SkBoundary { |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 38 | public: |
| 39 | SkPoint fPts[4]; |
| 40 | |
| 41 | // override |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 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); |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 52 | }; |
| 53 | |
| 54 | #endif |
| 55 | |