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