epoger@google.com | ec3ed6a | 2011-07-28 14:26:00 +0000 | [diff] [blame^] | 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 | */ |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 8 | #ifndef SkBoundaryPatch_DEFINED |
| 9 | #define SkBoundaryPatch_DEFINED |
| 10 | |
| 11 | #include "SkPoint.h" |
| 12 | #include "SkRefCnt.h" |
| 13 | |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 14 | class SkBoundary : public SkRefCnt { |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 15 | public: |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 16 | // These must be 0, 1, 2, 3 for efficiency in the subclass implementations |
| 17 | enum Edge { |
| 18 | kTop = 0, |
| 19 | kRight = 1, |
| 20 | kBottom = 2, |
| 21 | kLeft = 3 |
| 22 | }; |
| 23 | // Edge index goes clockwise around the boundary, beginning at the "top" |
| 24 | virtual SkPoint eval(Edge, SkScalar unitInterval) = 0; |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 25 | }; |
| 26 | |
| 27 | class SkBoundaryPatch { |
| 28 | public: |
| 29 | SkBoundaryPatch(); |
| 30 | ~SkBoundaryPatch(); |
| 31 | |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 32 | SkBoundary* getBoundary() const { return fBoundary; } |
| 33 | SkBoundary* setBoundary(SkBoundary*); |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 34 | |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 35 | SkPoint eval(SkScalar unitU, SkScalar unitV); |
| 36 | bool evalPatch(SkPoint verts[], int rows, int cols); |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 37 | |
| 38 | private: |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 39 | SkBoundary* fBoundary; |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 40 | }; |
| 41 | |
| 42 | //////////////////////////////////////////////////////////////////////// |
| 43 | |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 44 | class SkLineBoundary : public SkBoundary { |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 45 | public: |
| 46 | SkPoint fPts[4]; |
| 47 | |
| 48 | // override |
reed@android.com | 2ee7c64 | 2009-10-28 14:25:34 +0000 | [diff] [blame] | 49 | virtual SkPoint eval(Edge, SkScalar); |
| 50 | }; |
| 51 | |
| 52 | class SkCubicBoundary : public SkBoundary { |
| 53 | public: |
| 54 | // the caller sets the first 12 entries. The 13th is used by the impl. |
| 55 | SkPoint fPts[13]; |
| 56 | |
| 57 | // override |
| 58 | virtual SkPoint eval(Edge, SkScalar); |
reed@android.com | 4408cca | 2009-10-27 02:24:03 +0000 | [diff] [blame] | 59 | }; |
| 60 | |
| 61 | #endif |
| 62 | |