blob: 835fc3e64137d0ce7ab100c1bff9e4554625785a [file] [log] [blame]
reed@android.com4408cca2009-10-27 02:24:03 +00001#ifndef SkBoundaryPatch_DEFINED
2#define SkBoundaryPatch_DEFINED
3
4#include "SkPoint.h"
5#include "SkRefCnt.h"
6
reed@android.com2ee7c642009-10-28 14:25:34 +00007class SkBoundary : public SkRefCnt {
reed@android.com4408cca2009-10-27 02:24:03 +00008public:
reed@android.com2ee7c642009-10-28 14:25:34 +00009 // 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.com4408cca2009-10-27 02:24:03 +000018};
19
20class SkBoundaryPatch {
21public:
22 SkBoundaryPatch();
23 ~SkBoundaryPatch();
24
reed@android.com2ee7c642009-10-28 14:25:34 +000025 SkBoundary* getBoundary() const { return fBoundary; }
26 SkBoundary* setBoundary(SkBoundary*);
reed@android.com4408cca2009-10-27 02:24:03 +000027
reed@android.com2ee7c642009-10-28 14:25:34 +000028 SkPoint eval(SkScalar unitU, SkScalar unitV);
29 bool evalPatch(SkPoint verts[], int rows, int cols);
reed@android.com4408cca2009-10-27 02:24:03 +000030
31private:
reed@android.com2ee7c642009-10-28 14:25:34 +000032 SkBoundary* fBoundary;
reed@android.com4408cca2009-10-27 02:24:03 +000033};
34
35////////////////////////////////////////////////////////////////////////
36
reed@android.com2ee7c642009-10-28 14:25:34 +000037class SkLineBoundary : public SkBoundary {
reed@android.com4408cca2009-10-27 02:24:03 +000038public:
39 SkPoint fPts[4];
40
41 // override
reed@android.com2ee7c642009-10-28 14:25:34 +000042 virtual SkPoint eval(Edge, SkScalar);
43};
44
45class SkCubicBoundary : public SkBoundary {
46public:
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.com4408cca2009-10-27 02:24:03 +000052};
53
54#endif
55