blob: 60df688fded744f457451ed3fd3b5bed5af9b124 [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"
robertphillips@google.com0a4805e2013-05-29 13:24:23 +000014#include "SkString.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000015
fmalita@google.com86681b32013-06-13 20:59:14 +000016class SK_API SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000017public:
18 /* TODO(chudy): Remove subclasses. */
robertphillips@google.com0a4805e2013-05-29 13:24:23 +000019 SkDrawCommand(DrawType drawType);
chudy@google.com902ebe52012-06-29 14:21:22 +000020 SkDrawCommand();
21
22 virtual ~SkDrawCommand();
23
chudy@google.com97cee972012-08-07 20:41:37 +000024 virtual SkString toString();
chudy@google.com902ebe52012-06-29 14:21:22 +000025
26 virtual const char* toCString() {
27 return GetCommandString(fDrawType);
28 }
29
chudy@google.com0b5bbb02012-07-31 19:55:32 +000030 bool isVisible() const {
31 return fVisible;
32 }
33
34 void setVisible(bool toggle) {
35 fVisible = toggle;
36 }
chudy@google.com902ebe52012-06-29 14:21:22 +000037
chudy@google.com97cee972012-08-07 20:41:37 +000038 SkTDArray<SkString*>* Info() {return &fInfo; };
chudy@google.com902ebe52012-06-29 14:21:22 +000039 virtual void execute(SkCanvas* canvas)=0;
tomhudson@google.com0699e022012-11-27 16:09:42 +000040 /** Does nothing by default, but used by save() and restore()-type
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000041 subclasses to track unresolved save() calls. */
tomhudson@google.com0699e022012-11-27 16:09:42 +000042 virtual void trackSaveState(int* state) { };
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000043
44 // The next "active" system is only used by save, saveLayer and restore.
45 // It is used to determine which saveLayers are currently active (at a
46 // given point in the rendering).
47 // save just return a kPush action but don't track active state
48 // restore just return a kPop action
49 // saveLayers return kPush but also track the active state
50 enum Action {
51 kNone_Action,
52 kPop_Action,
53 kPush_Action
54 };
55 virtual Action action() const { return kNone_Action; }
56 virtual void setActive(bool active) {}
57 virtual bool active() const { return false; }
58
chudy@google.com902ebe52012-06-29 14:21:22 +000059 DrawType getType() { return fDrawType; };
60
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000061 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +000062
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +000063 static const char* GetCommandString(DrawType type);
64
chudy@google.com902ebe52012-06-29 14:21:22 +000065protected:
66 DrawType fDrawType;
chudy@google.com97cee972012-08-07 20:41:37 +000067 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +000068
69private:
70 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +000071};
72
commit-bot@chromium.org7a115912013-06-18 20:20:55 +000073class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000074public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +000075 SkRestoreCommand();
chudy@google.com902ebe52012-06-29 14:21:22 +000076 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
tomhudson@google.com0699e022012-11-27 16:09:42 +000077 virtual void trackSaveState(int* state) SK_OVERRIDE;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000078 virtual Action action() const SK_OVERRIDE { return kPop_Action; }
robertphillips@google.com24bfdac2013-03-22 16:33:31 +000079
80private:
81 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +000082};
83
commit-bot@chromium.org7a115912013-06-18 20:20:55 +000084class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000085public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +000086 SkClearCommand(SkColor color);
chudy@google.com902ebe52012-06-29 14:21:22 +000087 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
88private:
89 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +000090
91 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +000092};
93
commit-bot@chromium.org7a115912013-06-18 20:20:55 +000094class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000095public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +000096 SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
chudy@google.com902ebe52012-06-29 14:21:22 +000097 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000098 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
chudy@google.com902ebe52012-06-29 14:21:22 +000099private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000100 SkPath fPath;
chudy@google.com902ebe52012-06-29 14:21:22 +0000101 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000102 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000103
104 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000105};
106
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000107class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000108public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000109 SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
chudy@google.com902ebe52012-06-29 14:21:22 +0000110 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
111private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000112 SkRegion fRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000113 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000114
115 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000116};
117
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000118class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000119public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000120 SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
chudy@google.com902ebe52012-06-29 14:21:22 +0000121 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000122
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000123 const SkRect& rect() const { return fRect; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000124 SkRegion::Op op() const { return fOp; }
125 bool doAA() const { return fDoAA; }
126
chudy@google.com902ebe52012-06-29 14:21:22 +0000127private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000128 SkRect fRect;
chudy@google.com902ebe52012-06-29 14:21:22 +0000129 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000130 bool fDoAA;
131
132 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000133};
134
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000135class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000136public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000137 SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
robertphillips@google.com67baba42013-01-02 20:20:31 +0000138 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000139 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000140
141 const SkRRect& rrect() const { return fRRect; }
142 SkRegion::Op op() const { return fOp; }
143 bool doAA() const { return fDoAA; }
144
robertphillips@google.com67baba42013-01-02 20:20:31 +0000145private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000146 SkRRect fRRect;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000147 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000148 bool fDoAA;
149
150 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000151};
152
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000153class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000154public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000155 SkConcatCommand(const SkMatrix& matrix);
chudy@google.com902ebe52012-06-29 14:21:22 +0000156 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
157private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000158 SkMatrix fMatrix;
159
160 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000161};
162
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000163class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000164public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000165 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000166 const SkPaint* paint);
chudy@google.com902ebe52012-06-29 14:21:22 +0000167 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000168 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
chudy@google.com902ebe52012-06-29 14:21:22 +0000169private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000170 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000171 SkScalar fLeft;
172 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000173 SkPaint fPaint;
174 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000175
176 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000177};
178
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000179class SkDrawBitmapMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000180public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000181 SkDrawBitmapMatrixCommand(const SkBitmap& bitmap, const SkMatrix& matrix,
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000182 const SkPaint* paint);
chudy@google.com902ebe52012-06-29 14:21:22 +0000183 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000184 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
chudy@google.com902ebe52012-06-29 14:21:22 +0000185private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000186 SkBitmap fBitmap;
187 SkMatrix fMatrix;
188 SkPaint fPaint;
189 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000190
191 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000192};
193
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000194class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000195public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000196 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000197 const SkRect& dst, const SkPaint* paint);
chudy@google.com902ebe52012-06-29 14:21:22 +0000198 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000199 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
chudy@google.com902ebe52012-06-29 14:21:22 +0000200private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000201 SkBitmap fBitmap;
202 SkIRect fCenter;
203 SkRect fDst;
204 SkPaint fPaint;
205 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000206
207 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000208};
209
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000210class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000211public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000212 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000213 const SkRect& dst, const SkPaint* paint,
214 SkCanvas::DrawBitmapRectFlags flags);
chudy@google.com902ebe52012-06-29 14:21:22 +0000215 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000216 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000217
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000218 const SkBitmap& bitmap() const { return fBitmap; }
219
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000220 // The non-const 'paint' method allows modification of this object's
221 // SkPaint. For this reason the ctor and setPaint method make a local copy.
222 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
223 // (since only an SkPaint* is passed into the ctor).
224 const SkPaint* paint() const { return fPaintPtr; }
225 SkPaint* paint() { return fPaintPtr; }
226
227 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
228
robertphillips@google.com91217d02013-03-17 18:33:46 +0000229 const SkRect* srcRect() const { return fSrc.isEmpty() ? NULL : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000230 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000231
232 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000233 void setDstRect(const SkRect& dst) { fDst = dst; }
234
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000235 SkCanvas::DrawBitmapRectFlags flags() const { return fFlags; }
236 void setFlags(SkCanvas::DrawBitmapRectFlags flags) { fFlags = flags; }
237
chudy@google.com902ebe52012-06-29 14:21:22 +0000238private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000239 SkBitmap fBitmap;
240 SkRect fSrc;
241 SkRect fDst;
242 SkPaint fPaint;
243 SkPaint* fPaintPtr;
244 SkCanvas::DrawBitmapRectFlags fFlags;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000245
246 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000247};
248
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000249class SkDrawDataCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000250public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000251 SkDrawDataCommand(const void* data, size_t length);
252 virtual ~SkDrawDataCommand() { delete [] fData; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000253 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
254private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000255 char* fData;
chudy@google.com902ebe52012-06-29 14:21:22 +0000256 size_t fLength;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000257
258 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000259};
260
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000261class SkBeginCommentGroupCommand : public SkDrawCommand {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000262public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000263 SkBeginCommentGroupCommand(const char* description);
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000264 virtual void execute(SkCanvas* canvas) SK_OVERRIDE {
265 canvas->beginCommentGroup(fDescription.c_str());
266 };
267private:
268 SkString fDescription;
269
270 typedef SkDrawCommand INHERITED;
271};
272
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000273class SkCommentCommand : public SkDrawCommand {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000274public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000275 SkCommentCommand(const char* kywd, const char* value);
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000276 virtual void execute(SkCanvas* canvas) SK_OVERRIDE {
277 canvas->addComment(fKywd.c_str(), fValue.c_str());
278 };
279private:
280 SkString fKywd;
281 SkString fValue;
282
283 typedef SkDrawCommand INHERITED;
284};
285
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000286class SkEndCommentGroupCommand : public SkDrawCommand {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000287public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000288 SkEndCommentGroupCommand();
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000289 virtual void execute(SkCanvas* canvas) SK_OVERRIDE {
290 canvas->endCommentGroup();
291 };
292private:
293 typedef SkDrawCommand INHERITED;
294};
295
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000296class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000297public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000298 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
robertphillips@google.com67baba42013-01-02 20:20:31 +0000299 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000300 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000301private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000302 SkRect fOval;
303 SkPaint fPaint;
304
305 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000306};
307
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000308class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000309public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000310 SkDrawPaintCommand(const SkPaint& paint);
chudy@google.com902ebe52012-06-29 14:21:22 +0000311 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000312 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
chudy@google.com902ebe52012-06-29 14:21:22 +0000313private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000314 SkPaint fPaint;
315
316 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000317};
318
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000319class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000320public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000321 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
chudy@google.com902ebe52012-06-29 14:21:22 +0000322 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000323 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000324
chudy@google.com902ebe52012-06-29 14:21:22 +0000325private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000326 SkPath fPath;
327 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000328
329 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000330};
331
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000332class SkDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000333public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000334 SkDrawPictureCommand(SkPicture& picture);
chudy@google.com902ebe52012-06-29 14:21:22 +0000335 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000336 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
337
chudy@google.com902ebe52012-06-29 14:21:22 +0000338private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000339 SkPicture fPicture;
340
341 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000342};
343
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000344class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000345public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000346 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000347 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000348 virtual ~SkDrawPointsCommand() { delete [] fPts; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000349 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000350 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
chudy@google.com902ebe52012-06-29 14:21:22 +0000351private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000352 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000353 size_t fCount;
354 SkPoint* fPts;
355 SkPaint fPaint;
356
357 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000358};
359
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000360class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000361public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000362 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000363 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000364 virtual ~SkDrawTextCommand() { delete [] fText; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000365 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
366private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000367 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000368 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000369 SkScalar fX;
370 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000371 SkPaint fPaint;
372
373 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000374};
375
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000376class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000377public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000378 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
379 const SkPaint& paint);
380 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000381 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
382private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000383 char* fText;
384 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000385 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000386 SkPaint fPaint;
387
388 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000389};
390
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000391class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000392public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000393 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
394 const SkMatrix* matrix, const SkPaint& paint);
395 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000396 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
397private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000398 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000399 size_t fByteLength;
400 SkPath fPath;
401 SkMatrix fMatrix;
402 SkPaint fPaint;
403
404 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000405};
406
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000407class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000408public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000409 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
410 SkScalar constY, const SkPaint& paint);
411 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000412 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
413private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000414 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000415 char* fText;
416 size_t fByteLength;
417 SkScalar fConstY;
418 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000419
420 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000421};
422
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000423class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000424public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000425 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
chudy@google.com902ebe52012-06-29 14:21:22 +0000426 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000427
robertphillips@google.com91217d02013-03-17 18:33:46 +0000428 const SkRect& rect() const { return fRect; }
429 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000430private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000431 SkRect fRect;
432 SkPaint fPaint;
433
434 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000435};
436
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000437class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000438public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000439 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
robertphillips@google.com67baba42013-01-02 20:20:31 +0000440 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000441 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000442private:
443 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000444 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000445
446 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000447};
448
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000449class SkDrawDRRectCommand : public SkDrawCommand {
450public:
451 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
452 const SkPaint& paint);
453 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
454 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
455private:
456 SkRRect fOuter;
457 SkRRect fInner;
458 SkPaint fPaint;
459
460 typedef SkDrawCommand INHERITED;
461};
462
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000463class SkDrawSpriteCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000464public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000465 SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top, const SkPaint* paint);
chudy@google.com902ebe52012-06-29 14:21:22 +0000466 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000467 virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
chudy@google.com902ebe52012-06-29 14:21:22 +0000468private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000469 SkBitmap fBitmap;
470 int fLeft;
471 int fTop;
472 SkPaint fPaint;
473 SkPaint* fPaintPtr;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000474
475 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000476};
477
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000478class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000479public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000480 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
481 const SkPoint vertices[], const SkPoint texs[],
482 const SkColor colors[], SkXfermode* xfermode,
483 const uint16_t indices[], int indexCount,
484 const SkPaint& paint);
485 virtual ~SkDrawVerticesCommand();
chudy@google.com902ebe52012-06-29 14:21:22 +0000486 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
487private:
488 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000489 int fVertexCount;
490 SkPoint* fVertices;
491 SkPoint* fTexs;
492 SkColor* fColors;
chudy@google.com902ebe52012-06-29 14:21:22 +0000493 SkXfermode* fXfermode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000494 uint16_t* fIndices;
495 int fIndexCount;
496 SkPaint fPaint;
497
498 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000499};
500
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000501class SkRotateCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000502public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000503 SkRotateCommand(SkScalar degrees);
chudy@google.com902ebe52012-06-29 14:21:22 +0000504 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
505private:
506 SkScalar fDegrees;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000507
508 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000509};
510
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000511class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000512public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000513 SkSaveCommand(SkCanvas::SaveFlags flags);
chudy@google.com902ebe52012-06-29 14:21:22 +0000514 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
tomhudson@google.com0699e022012-11-27 16:09:42 +0000515 virtual void trackSaveState(int* state) SK_OVERRIDE;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000516 virtual Action action() const SK_OVERRIDE { return kPush_Action; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000517private:
518 SkCanvas::SaveFlags fFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000519
520 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000521};
522
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000523class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000524public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000525 SkSaveLayerCommand(const SkRect* bounds, const SkPaint* paint,
526 SkCanvas::SaveFlags flags);
chudy@google.com902ebe52012-06-29 14:21:22 +0000527 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
tomhudson@google.com0699e022012-11-27 16:09:42 +0000528 virtual void trackSaveState(int* state) SK_OVERRIDE;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000529 virtual Action action() const SK_OVERRIDE{ return kPush_Action; }
530 virtual void setActive(bool active) SK_OVERRIDE { fActive = active; }
531 virtual bool active() const SK_OVERRIDE { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000532
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000533 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000534
chudy@google.com902ebe52012-06-29 14:21:22 +0000535private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000536 SkRect fBounds;
537 SkPaint fPaint;
538 SkPaint* fPaintPtr;
chudy@google.com902ebe52012-06-29 14:21:22 +0000539 SkCanvas::SaveFlags fFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000540
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000541 bool fActive;
542
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000543 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000544};
545
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000546class SkScaleCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000547public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000548 SkScaleCommand(SkScalar sx, SkScalar sy);
chudy@google.com902ebe52012-06-29 14:21:22 +0000549 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com9105ad02013-03-17 18:46:16 +0000550
551 SkScalar x() const { return fSx; }
552 SkScalar y() const { return fSy; }
553
chudy@google.com902ebe52012-06-29 14:21:22 +0000554private:
555 SkScalar fSx;
556 SkScalar fSy;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000557
558 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000559};
560
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000561class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000562public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000563 SkSetMatrixCommand(const SkMatrix& matrix);
chudy@google.com902ebe52012-06-29 14:21:22 +0000564 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
565private:
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000566 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000567
568 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000569};
570
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000571class SkSkewCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000572public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000573 SkSkewCommand(SkScalar sx, SkScalar sy);
chudy@google.com902ebe52012-06-29 14:21:22 +0000574 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
575private:
576 SkScalar fSx;
577 SkScalar fSy;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000578
579 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000580};
581
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000582class SkTranslateCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000583public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000584 SkTranslateCommand(SkScalar dx, SkScalar dy);
chudy@google.com902ebe52012-06-29 14:21:22 +0000585 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
robertphillips@google.com9105ad02013-03-17 18:46:16 +0000586
587 SkScalar x() const { return fDx; }
588 SkScalar y() const { return fDy; }
589
chudy@google.com902ebe52012-06-29 14:21:22 +0000590private:
591 SkScalar fDx;
592 SkScalar fDy;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000593
594 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000595};
596
commit-bot@chromium.org210ae2a2014-02-27 17:40:13 +0000597class SkPushCullCommand : public SkDrawCommand {
598public:
599 SkPushCullCommand(const SkRect&);
600 virtual void execute(SkCanvas*) SK_OVERRIDE;
601
602private:
603 SkRect fCullRect;
604
605 typedef SkDrawCommand INHERITED;
606};
607
608class SkPopCullCommand : public SkDrawCommand {
609public:
610 SkPopCullCommand();
611 virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
612
613private:
614 typedef SkDrawCommand INHERITED;
615};
616
chudy@google.com902ebe52012-06-29 14:21:22 +0000617#endif