blob: 9e25f4d20d4ed8c877396d18ab0797f507dbdf8f [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 "SkCanvas.h"
robertphillips@google.com0a4805e2013-05-29 13:24:23 +000013#include "SkString.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000014
fmalita@google.com86681b32013-06-13 20:59:14 +000015class SK_API SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000016public:
robertphillips9bafc302015-02-13 11:13:00 -080017 enum OpType {
18 kBeginCommentGroup_OpType,
19 kClipPath_OpType,
20 kClipRegion_OpType,
21 kClipRect_OpType,
22 kClipRRect_OpType,
23 kComment_OpType,
24 kConcat_OpType,
25 kDrawBitmap_OpType,
26 kDrawBitmapNine_OpType,
27 kDrawBitmapRect_OpType,
28 kDrawClear_OpType,
29 kDrawDRRect_OpType,
30 kDrawOval_OpType,
31 kDrawPaint_OpType,
32 kDrawPatch_OpType,
33 kDrawPath_OpType,
34 kDrawPicture_OpType,
35 kDrawPoints_OpType,
36 kDrawPosText_OpType,
37 kDrawPosTextH_OpType,
38 kDrawRect_OpType,
39 kDrawRRect_OpType,
40 kDrawSprite_OpType,
41 kDrawText_OpType,
42 kDrawTextBlob_OpType,
43 kDrawTextOnPath_OpType,
44 kDrawVertices_OpType,
45 kEndCommentGroup_OpType,
46 kRestore_OpType,
47 kSave_OpType,
48 kSaveLayer_OpType,
49 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080050
robertphillips9bafc302015-02-13 11:13:00 -080051 kLast_OpType = kSetMatrix_OpType
52 };
53
54 static const int kOpTypeCount = kLast_OpType + 1;
55
56 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000057
58 virtual ~SkDrawCommand();
59
fmalita8c89c522014-11-08 16:18:56 -080060 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000061
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000062 void setOffset(size_t offset) { fOffset = offset; }
fmalita8c89c522014-11-08 16:18:56 -080063 size_t offset() const { return fOffset; }
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000064
fmalita8c89c522014-11-08 16:18:56 -080065 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080066 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000067 }
68
chudy@google.com0b5bbb02012-07-31 19:55:32 +000069 bool isVisible() const {
70 return fVisible;
71 }
72
73 void setVisible(bool toggle) {
74 fVisible = toggle;
75 }
chudy@google.com902ebe52012-06-29 14:21:22 +000076
fmalita8c89c522014-11-08 16:18:56 -080077 const SkTDArray<SkString*>* Info() const { return &fInfo; }
78 virtual void execute(SkCanvas*) const = 0;
79 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070080
fmalita8c89c522014-11-08 16:18:56 -080081 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070082
mtkleinf0f14112014-12-12 08:46:25 -080083 // The next "active" system is only used by save, saveLayer, and restore.
84 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000085 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000086 // saves just return a kPushLayer action but don't track active state
87 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000088 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000089 enum Action {
90 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000091 kPopLayer_Action,
92 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000093 };
94 virtual Action action() const { return kNone_Action; }
95 virtual void setActive(bool active) {}
96 virtual bool active() const { return false; }
97
robertphillips9bafc302015-02-13 11:13:00 -080098 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +000099
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000100 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000101
robertphillips9bafc302015-02-13 11:13:00 -0800102 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000103
chudy@google.com902ebe52012-06-29 14:21:22 +0000104protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000105 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000106
107private:
robertphillips9bafc302015-02-13 11:13:00 -0800108 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000109 size_t fOffset;
110 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000111};
112
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000113class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000114public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000115 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700116 void execute(SkCanvas* canvas) const override;
117 Action action() const override { return kPopLayer_Action; }
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000118
119private:
120 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000121};
122
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000123class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000124public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000125 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700126 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000127private:
128 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000129
130 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000131};
132
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000133class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000134public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000135 SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700136 void execute(SkCanvas* canvas) const override;
137 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000138private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000139 SkPath fPath;
chudy@google.com902ebe52012-06-29 14:21:22 +0000140 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000141 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000142
143 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000144};
145
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000146class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000147public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000148 SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
mtklein36352bf2015-03-25 18:17:31 -0700149 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000150private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000151 SkRegion fRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000152 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000153
154 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000155};
156
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000157class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000158public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000159 SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700160 void execute(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000161
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000162 const SkRect& rect() const { return fRect; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000163 SkRegion::Op op() const { return fOp; }
164 bool doAA() const { return fDoAA; }
165
chudy@google.com902ebe52012-06-29 14:21:22 +0000166private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000167 SkRect fRect;
chudy@google.com902ebe52012-06-29 14:21:22 +0000168 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000169 bool fDoAA;
170
171 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000172};
173
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000174class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000175public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000176 SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700177 void execute(SkCanvas* canvas) const override;
178 bool render(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000179
180 const SkRRect& rrect() const { return fRRect; }
181 SkRegion::Op op() const { return fOp; }
182 bool doAA() const { return fDoAA; }
183
robertphillips@google.com67baba42013-01-02 20:20:31 +0000184private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000185 SkRRect fRRect;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000186 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000187 bool fDoAA;
188
189 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000190};
191
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000192class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000193public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000194 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700195 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000196private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000197 SkMatrix fMatrix;
198
199 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000200};
201
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000202class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000203public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000204 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000205 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700206 void execute(SkCanvas* canvas) const override;
207 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000208private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000209 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000210 SkScalar fLeft;
211 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000212 SkPaint fPaint;
213 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000214
215 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000216};
217
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000218class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000219public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000220 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000221 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700222 void execute(SkCanvas* canvas) const override;
223 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000224private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000225 SkBitmap fBitmap;
226 SkIRect fCenter;
227 SkRect fDst;
228 SkPaint fPaint;
229 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000230
231 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000232};
233
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000234class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000235public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000236 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000237 const SkRect& dst, const SkPaint* paint,
238 SkCanvas::DrawBitmapRectFlags flags);
mtklein36352bf2015-03-25 18:17:31 -0700239 void execute(SkCanvas* canvas) const override;
240 bool render(SkCanvas* canvas) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000241
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000242 const SkBitmap& bitmap() const { return fBitmap; }
243
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000244 // The non-const 'paint' method allows modification of this object's
245 // SkPaint. For this reason the ctor and setPaint method make a local copy.
246 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
247 // (since only an SkPaint* is passed into the ctor).
248 const SkPaint* paint() const { return fPaintPtr; }
249 SkPaint* paint() { return fPaintPtr; }
250
251 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
252
robertphillips@google.com91217d02013-03-17 18:33:46 +0000253 const SkRect* srcRect() const { return fSrc.isEmpty() ? NULL : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000254 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000255
256 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000257 void setDstRect(const SkRect& dst) { fDst = dst; }
258
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000259 SkCanvas::DrawBitmapRectFlags flags() const { return fFlags; }
260 void setFlags(SkCanvas::DrawBitmapRectFlags flags) { fFlags = flags; }
261
chudy@google.com902ebe52012-06-29 14:21:22 +0000262private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000263 SkBitmap fBitmap;
264 SkRect fSrc;
265 SkRect fDst;
266 SkPaint fPaint;
267 SkPaint* fPaintPtr;
268 SkCanvas::DrawBitmapRectFlags fFlags;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000269
270 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000271};
272
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000273class SkBeginCommentGroupCommand : public SkDrawCommand {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000274public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000275 SkBeginCommentGroupCommand(const char* description);
mtklein36352bf2015-03-25 18:17:31 -0700276 void execute(SkCanvas* canvas) const override {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000277 canvas->beginCommentGroup(fDescription.c_str());
278 };
279private:
280 SkString fDescription;
281
282 typedef SkDrawCommand INHERITED;
283};
284
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000285class SkCommentCommand : public SkDrawCommand {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000286public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000287 SkCommentCommand(const char* kywd, const char* value);
mtklein36352bf2015-03-25 18:17:31 -0700288 void execute(SkCanvas* canvas) const override {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000289 canvas->addComment(fKywd.c_str(), fValue.c_str());
290 };
291private:
292 SkString fKywd;
293 SkString fValue;
294
295 typedef SkDrawCommand INHERITED;
296};
297
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000298class SkEndCommentGroupCommand : public SkDrawCommand {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000299public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000300 SkEndCommentGroupCommand();
mtklein36352bf2015-03-25 18:17:31 -0700301 void execute(SkCanvas* canvas) const override {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000302 canvas->endCommentGroup();
303 };
304private:
305 typedef SkDrawCommand INHERITED;
306};
307
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000308class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000309public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000310 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700311 void execute(SkCanvas* canvas) const override;
312 bool render(SkCanvas* canvas) const override;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000313private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000314 SkRect fOval;
315 SkPaint fPaint;
316
317 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000318};
319
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000320class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000321public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000322 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700323 void execute(SkCanvas* canvas) const override;
324 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000325private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000326 SkPaint fPaint;
327
328 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000329};
330
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000331class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000332public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000333 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700334 void execute(SkCanvas* canvas) const override;
335 bool render(SkCanvas* canvas) const override;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000336
chudy@google.com902ebe52012-06-29 14:21:22 +0000337private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000338 SkPath fPath;
339 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000340
341 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000342};
343
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000344class SkDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000345public:
robertphillipsb3f319f2014-08-13 10:46:23 -0700346 SkDrawPictureCommand(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700347 void execute(SkCanvas* canvas) const override;
348 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000349
chudy@google.com902ebe52012-06-29 14:21:22 +0000350private:
robertphillips9b14f262014-06-04 05:40:44 -0700351 SkAutoTUnref<const SkPicture> fPicture;
robertphillipsb3f319f2014-08-13 10:46:23 -0700352 SkMatrix fMatrix;
353 SkMatrix* fMatrixPtr;
354 SkPaint fPaint;
355 SkPaint* fPaintPtr;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000356
357 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000358};
359
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000360class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000361public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000362 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000363 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000364 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700365 void execute(SkCanvas* canvas) const override;
366 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000367private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000368 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000369 size_t fCount;
370 SkPoint* fPts;
371 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 SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000377public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000378 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000379 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000380 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700381 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000382private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000383 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000384 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000385 SkScalar fX;
386 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000387 SkPaint fPaint;
388
389 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000390};
391
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000392class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000393public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000394 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
395 const SkPaint& paint);
396 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700397 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000398private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000399 char* fText;
400 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000401 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000402 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 SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000408public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000409 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
410 const SkMatrix* matrix, const SkPaint& paint);
411 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700412 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000413private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000414 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000415 size_t fByteLength;
416 SkPath fPath;
417 SkMatrix fMatrix;
418 SkPaint fPaint;
419
420 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000421};
422
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000423class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000424public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000425 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
426 SkScalar constY, const SkPaint& paint);
427 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700428 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000429private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000430 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000431 char* fText;
432 size_t fByteLength;
433 SkScalar fConstY;
434 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000435
436 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000437};
438
fmalitab7425172014-08-26 07:56:44 -0700439class SkDrawTextBlobCommand : public SkDrawCommand {
440public:
441 SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);
442
mtklein36352bf2015-03-25 18:17:31 -0700443 void execute(SkCanvas* canvas) const override;
444 bool render(SkCanvas* canvas) const override;
fmalitab7425172014-08-26 07:56:44 -0700445
446private:
447 SkAutoTUnref<const SkTextBlob> fBlob;
448 SkScalar fXPos;
449 SkScalar fYPos;
450 SkPaint fPaint;
451
452 typedef SkDrawCommand INHERITED;
453};
454
robertphillips9bafc302015-02-13 11:13:00 -0800455class SkDrawPatchCommand : public SkDrawCommand {
456public:
457 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
458 const SkPoint texCoords[4], SkXfermode* xmode,
459 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700460 void execute(SkCanvas* canvas) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800461
462private:
463 SkPoint fCubics[12];
464 SkColor fColors[4];
465 SkPoint fTexCoords[4];
466 SkAutoTUnref<SkXfermode> fXfermode;
467 SkPaint fPaint;
468
469 typedef SkDrawCommand INHERITED;
470};
471
472
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000473class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000474public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000475 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700476 void execute(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000477
robertphillips@google.com91217d02013-03-17 18:33:46 +0000478 const SkRect& rect() const { return fRect; }
479 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000480private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000481 SkRect fRect;
482 SkPaint fPaint;
483
484 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000485};
486
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000487class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000488public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000489 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700490 void execute(SkCanvas* canvas) const override;
491 bool render(SkCanvas* canvas) const override;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000492private:
493 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000494 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000495
496 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000497};
498
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000499class SkDrawDRRectCommand : public SkDrawCommand {
500public:
501 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
502 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700503 void execute(SkCanvas* canvas) const override;
504 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000505private:
506 SkRRect fOuter;
507 SkRRect fInner;
508 SkPaint fPaint;
509
510 typedef SkDrawCommand INHERITED;
511};
512
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000513class SkDrawSpriteCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000514public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000515 SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700516 void execute(SkCanvas* canvas) const override;
517 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000518private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000519 SkBitmap fBitmap;
520 int fLeft;
521 int fTop;
522 SkPaint fPaint;
523 SkPaint* fPaintPtr;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000524
525 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000526};
527
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000528class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000529public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000530 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
531 const SkPoint vertices[], const SkPoint texs[],
532 const SkColor colors[], SkXfermode* xfermode,
533 const uint16_t indices[], int indexCount,
534 const SkPaint& paint);
535 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700536 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000537private:
538 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000539 int fVertexCount;
540 SkPoint* fVertices;
541 SkPoint* fTexs;
542 SkColor* fColors;
chudy@google.com902ebe52012-06-29 14:21:22 +0000543 SkXfermode* fXfermode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000544 uint16_t* fIndices;
545 int fIndexCount;
546 SkPaint fPaint;
547
548 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000549};
550
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000551class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000552public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400553 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700554 void execute(SkCanvas* canvas) const override;
555 Action action() const override { return kPushLayer_Action; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000556private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000557 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000558};
559
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000560class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000561public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000562 SkSaveLayerCommand(const SkRect* bounds, const SkPaint* paint,
563 SkCanvas::SaveFlags flags);
mtklein36352bf2015-03-25 18:17:31 -0700564 void execute(SkCanvas* canvas) const override;
565 void vizExecute(SkCanvas* canvas) const override;
566 Action action() const override{ return kPushLayer_Action; }
567 void setActive(bool active) override { fActive = active; }
568 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000569
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000570 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000571
chudy@google.com902ebe52012-06-29 14:21:22 +0000572private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000573 SkRect fBounds;
574 SkPaint fPaint;
575 SkPaint* fPaintPtr;
chudy@google.com902ebe52012-06-29 14:21:22 +0000576 SkCanvas::SaveFlags fFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000577
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000578 bool fActive;
579
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000580 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000581};
582
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000583class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000584public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000585 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700586 void setUserMatrix(const SkMatrix&) override;
587 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000588private:
robertphillips70171682014-10-16 14:28:28 -0700589 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000590 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000591
592 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000593};
594
chudy@google.com902ebe52012-06-29 14:21:22 +0000595#endif