blob: 54fbf9ee15f79230edb594a001cd6cd334bff423 [file] [log] [blame]
chudy@google.com902ebe52012-06-29 14:21:22 +00001
2/*
3 * Copyright 2012 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#ifndef SKDRAWCOMMAND_H_
10#define SKDRAWCOMMAND_H_
11
chudy@google.com902ebe52012-06-29 14:21:22 +000012#include "SkPictureFlat.h"
13#include "SkCanvas.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000014
15class SkDrawCommand {
16public:
17 /* TODO(chudy): Remove subclasses. */
18 SkDrawCommand();
19
20 virtual ~SkDrawCommand();
21
chudy@google.com97cee972012-08-07 20:41:37 +000022 virtual SkString toString();
chudy@google.com902ebe52012-06-29 14:21:22 +000023
24 virtual const char* toCString() {
25 return GetCommandString(fDrawType);
26 }
27
chudy@google.com0b5bbb02012-07-31 19:55:32 +000028 bool isVisible() const {
29 return fVisible;
30 }
31
32 void setVisible(bool toggle) {
33 fVisible = toggle;
34 }
chudy@google.com902ebe52012-06-29 14:21:22 +000035
chudy@google.com97cee972012-08-07 20:41:37 +000036 SkTDArray<SkString*>* Info() {return &fInfo; };
chudy@google.com902ebe52012-06-29 14:21:22 +000037 virtual void execute(SkCanvas* canvas)=0;
38 DrawType getType() { return fDrawType; };
39
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +000040 static const char* GetCommandString(DrawType type);
41
chudy@google.com902ebe52012-06-29 14:21:22 +000042protected:
43 DrawType fDrawType;
chudy@google.com97cee972012-08-07 20:41:37 +000044 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +000045
46private:
47 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +000048};
49
50class Restore : public SkDrawCommand {
51public:
52 Restore();
53 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
54};
55
56class Clear : public SkDrawCommand {
57public:
58 Clear(SkColor color);
59 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
60private:
61 SkColor fColor;
62};
63
64class ClipPath : public SkDrawCommand {
65public:
66 ClipPath(const SkPath& path, SkRegion::Op op, bool doAA);
67 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
68private:
69 const SkPath* fPath;
70 SkRegion::Op fOp;
71 bool fDoAA;
72};
73
74class ClipRegion : public SkDrawCommand {
75public:
76 ClipRegion(const SkRegion& region, SkRegion::Op op);
77 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
78private:
79 const SkRegion* fRegion;
80 SkRegion::Op fOp;
81};
82
83class ClipRect : public SkDrawCommand {
84public:
85 ClipRect(const SkRect& rect, SkRegion::Op op, bool doAA);
86 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
87private:
88 const SkRect* fRect;
89 SkRegion::Op fOp;
90 bool fDoAA;
91};
92
93class Concat : public SkDrawCommand {
94public:
95 Concat(const SkMatrix& matrix);
96 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
97private:
98 const SkMatrix* fMatrix;
99};
100
101class DrawBitmap : public SkDrawCommand {
102public:
103 DrawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
104 const SkPaint* paint);
105 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
106private:
107 const SkPaint* fPaint;
108 const SkBitmap* fBitmap;
109 SkScalar fLeft;
110 SkScalar fTop;
111};
112
113class DrawBitmapMatrix : public SkDrawCommand {
114public:
115 DrawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& matrix,
116 const SkPaint* paint);
117 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
118private:
119 const SkPaint* fPaint;
120 const SkBitmap* fBitmap;
121 const SkMatrix* fMatrix;
122};
123
124class DrawBitmapNine : public SkDrawCommand {
125public:
126 DrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
127 const SkRect& dst, const SkPaint* paint);
128 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
129private:
130 const SkBitmap* fBitmap;
131 const SkIRect* fCenter;
132 const SkRect* fDst;
133 const SkPaint* fPaint;
134};
135
136class DrawBitmapRect : public SkDrawCommand {
137public:
reed@google.com71121732012-09-18 15:14:33 +0000138 DrawBitmapRect(const SkBitmap& bitmap, const SkRect* src,
chudy@google.com902ebe52012-06-29 14:21:22 +0000139 const SkRect& dst, const SkPaint* paint);
140 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
141private:
reed@google.com71121732012-09-18 15:14:33 +0000142 const SkRect* fSrc;
chudy@google.com902ebe52012-06-29 14:21:22 +0000143 const SkPaint* fPaint;
144 const SkBitmap* fBitmap;
145 const SkRect* fDst;
146};
147
148class DrawData : public SkDrawCommand {
149public:
150 DrawData(const void* data, size_t length);
151 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
152private:
153 const void* fData;
154 size_t fLength;
155};
156
157class DrawPaint : public SkDrawCommand {
158public:
159 DrawPaint(const SkPaint& paint);
160 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
161private:
162 const SkPaint* fPaint;
163};
164
165class DrawPath : public SkDrawCommand {
166public:
167 DrawPath(const SkPath& path, const SkPaint& paint);
168 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
169private:
170 const SkPath* fPath;
171 const SkPaint* fPaint;
172};
173
174class DrawPicture : public SkDrawCommand {
175public:
176 DrawPicture(SkPicture& picture);
177 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
178private:
179 SkPicture* fPicture;
180};
181
182class DrawPoints : public SkDrawCommand {
183public:
184 DrawPoints(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
185 const SkPaint& paint);
186 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
187private:
188 const SkPoint* fPts;
189 SkCanvas::PointMode fMode;
190 size_t fCount;
191 const SkPaint* fPaint;
192};
193
194/* TODO(chudy): DrawText is a predefined macro and was breaking something
195 * in the windows build of the debugger.
196 */
197class DrawTextC : public SkDrawCommand {
198public:
199 DrawTextC(const void* text, size_t byteLength, SkScalar x, SkScalar y,
200 const SkPaint& paint);
201 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
202private:
203 const void* fText;
204 size_t fByteLength;
205 SkScalar fX;
206 SkScalar fY;
207 const SkPaint* fPaint;
208};
209
210class DrawPosText : public SkDrawCommand {
211public:
212 DrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
213 const SkPaint& paint);
214 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
215private:
216 const SkPoint* fPos;
217 const void* fText;
218 size_t fByteLength;
219 const SkPaint* fPaint;
220};
221
222class DrawTextOnPath : public SkDrawCommand {
223public:
224 DrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
225 const SkMatrix* matrix, const SkPaint& paint);
226 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
227private:
228 const SkMatrix* fMatrix;
229 const void* fText;
230 size_t fByteLength;
231 const SkPath* fPath;
232 const SkPaint* fPaint;
233};
234
235class DrawPosTextH : public SkDrawCommand {
236public:
237 DrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
238 SkScalar constY, const SkPaint& paint);
239 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
240private:
241 const SkScalar* fXpos;
242 const void* fText;
243 size_t fByteLength;
244 SkScalar fConstY;
245 const SkPaint* fPaint;
246};
247
248class DrawRectC : public SkDrawCommand {
249public:
250 DrawRectC(const SkRect& rect, const SkPaint& paint);
251 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
252private:
253 const SkRect* fRect;
254 const SkPaint* fPaint;
255};
256
257class DrawSprite : public SkDrawCommand {
258public:
259 DrawSprite(const SkBitmap& bitmap, int left, int top, const SkPaint* paint);
260 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
261private:
262 const SkPaint* fPaint;
263 int fLeft;
264 int fTop;
265 const SkBitmap* fBitmap;
266};
267
268class DrawVertices : public SkDrawCommand {
269public:
270 DrawVertices(SkCanvas::VertexMode vmode, int vertexCount,
271 const SkPoint vertices[], const SkPoint texs[], const SkColor colors[],
272 SkXfermode* xfermode, const uint16_t indices[], int indexCount,
273 const SkPaint& paint);
274 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
275private:
276 SkCanvas::VertexMode fVmode;
277 int fVertexCount;
278 int fIndexCount;
279 const SkPoint* fVertices;
280 const SkPoint* fTexs;
281 const SkColor* fColors;
282 const uint16_t* fIndices;
283 SkXfermode* fXfermode;
284 const SkPaint* fPaint;
285};
286
287class Rotate : public SkDrawCommand {
288public:
289 Rotate(SkScalar degrees);
290 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
291private:
292 SkScalar fDegrees;
293};
294
295class Save : public SkDrawCommand {
296public:
297 Save(SkCanvas::SaveFlags flags);
298 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
299private:
300 SkCanvas::SaveFlags fFlags;
301};
302
303class SaveLayer : public SkDrawCommand {
304public:
305 SaveLayer(const SkRect* bounds, const SkPaint* paint,
306 SkCanvas::SaveFlags flags);
307 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
308private:
309 const SkRect* fBounds;
310 const SkPaint* fPaint;
311 SkCanvas::SaveFlags fFlags;
312};
313
314class Scale : public SkDrawCommand {
315public:
316 Scale(SkScalar sx, SkScalar sy);
317 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
318private:
319 SkScalar fSx;
320 SkScalar fSy;
321};
322
323class SetMatrix : public SkDrawCommand {
324public:
325 SetMatrix(const SkMatrix& matrix);
326 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
327private:
328 const SkMatrix* fMatrix;
329};
330
331class Skew : public SkDrawCommand {
332public:
333 Skew(SkScalar sx, SkScalar sy);
334 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
335private:
336 SkScalar fSx;
337 SkScalar fSy;
338};
339
340class Translate : public SkDrawCommand {
341public:
342 Translate(SkScalar dx, SkScalar dy);
343 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
344private:
345 SkScalar fDx;
346 SkScalar fDy;
347};
348
349#endif