blob: 538dd23c209218fa9927e6604005e1bc43947654 [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,
fmalita160ebb22015-04-01 20:58:37 -070019 kBeginDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080020 kClipPath_OpType,
21 kClipRegion_OpType,
22 kClipRect_OpType,
23 kClipRRect_OpType,
24 kComment_OpType,
25 kConcat_OpType,
26 kDrawBitmap_OpType,
27 kDrawBitmapNine_OpType,
28 kDrawBitmapRect_OpType,
29 kDrawClear_OpType,
30 kDrawDRRect_OpType,
31 kDrawOval_OpType,
32 kDrawPaint_OpType,
33 kDrawPatch_OpType,
34 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080035 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,
fmalita160ebb22015-04-01 20:58:37 -070046 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080047 kRestore_OpType,
48 kSave_OpType,
49 kSaveLayer_OpType,
50 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080051
robertphillips9bafc302015-02-13 11:13:00 -080052 kLast_OpType = kSetMatrix_OpType
53 };
54
55 static const int kOpTypeCount = kLast_OpType + 1;
56
57 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000058
59 virtual ~SkDrawCommand();
60
fmalita8c89c522014-11-08 16:18:56 -080061 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000062
fmalita8c89c522014-11-08 16:18:56 -080063 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080064 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000065 }
66
chudy@google.com0b5bbb02012-07-31 19:55:32 +000067 bool isVisible() const {
68 return fVisible;
69 }
70
71 void setVisible(bool toggle) {
72 fVisible = toggle;
73 }
chudy@google.com902ebe52012-06-29 14:21:22 +000074
fmalita8c89c522014-11-08 16:18:56 -080075 const SkTDArray<SkString*>* Info() const { return &fInfo; }
76 virtual void execute(SkCanvas*) const = 0;
77 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070078
fmalita8c89c522014-11-08 16:18:56 -080079 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070080
mtkleinf0f14112014-12-12 08:46:25 -080081 // The next "active" system is only used by save, saveLayer, and restore.
82 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000083 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000084 // saves just return a kPushLayer action but don't track active state
85 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000086 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000087 enum Action {
88 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000089 kPopLayer_Action,
90 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000091 };
92 virtual Action action() const { return kNone_Action; }
93 virtual void setActive(bool active) {}
94 virtual bool active() const { return false; }
95
robertphillips9bafc302015-02-13 11:13:00 -080096 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +000097
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000098 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +000099
robertphillips9bafc302015-02-13 11:13:00 -0800100 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000101
chudy@google.com902ebe52012-06-29 14:21:22 +0000102protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000103 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000104
105private:
robertphillips9bafc302015-02-13 11:13:00 -0800106 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000107 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000108};
109
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000110class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000111public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000112 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700113 void execute(SkCanvas* canvas) const override;
114 Action action() const override { return kPopLayer_Action; }
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000115
116private:
117 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000118};
119
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000120class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000121public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000122 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700123 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000124private:
125 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000126
127 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000128};
129
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000130class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000131public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000132 SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700133 void execute(SkCanvas* canvas) const override;
134 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000135private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000136 SkPath fPath;
chudy@google.com902ebe52012-06-29 14:21:22 +0000137 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000138 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000139
140 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000141};
142
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000143class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000144public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000145 SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
mtklein36352bf2015-03-25 18:17:31 -0700146 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000147private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000148 SkRegion fRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000149 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000150
151 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000152};
153
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000154class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000155public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000156 SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700157 void execute(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000158
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000159 const SkRect& rect() const { return fRect; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000160 SkRegion::Op op() const { return fOp; }
161 bool doAA() const { return fDoAA; }
162
chudy@google.com902ebe52012-06-29 14:21:22 +0000163private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000164 SkRect fRect;
chudy@google.com902ebe52012-06-29 14:21:22 +0000165 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000166 bool fDoAA;
167
168 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000169};
170
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000171class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000172public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000173 SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700174 void execute(SkCanvas* canvas) const override;
175 bool render(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000176
177 const SkRRect& rrect() const { return fRRect; }
178 SkRegion::Op op() const { return fOp; }
179 bool doAA() const { return fDoAA; }
180
robertphillips@google.com67baba42013-01-02 20:20:31 +0000181private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000182 SkRRect fRRect;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000183 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000184 bool fDoAA;
185
186 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000187};
188
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000189class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000190public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000191 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700192 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000193private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000194 SkMatrix fMatrix;
195
196 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000197};
198
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000199class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000200public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000201 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000202 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700203 void execute(SkCanvas* canvas) const override;
204 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000205private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000206 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000207 SkScalar fLeft;
208 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000209 SkPaint fPaint;
210 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000211
212 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000213};
214
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000215class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000216public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000217 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000218 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700219 void execute(SkCanvas* canvas) const override;
220 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000221private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000222 SkBitmap fBitmap;
223 SkIRect fCenter;
224 SkRect fDst;
225 SkPaint fPaint;
226 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000227
228 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000229};
230
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000231class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000232public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000233 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000234 const SkRect& dst, const SkPaint* paint,
235 SkCanvas::DrawBitmapRectFlags flags);
mtklein36352bf2015-03-25 18:17:31 -0700236 void execute(SkCanvas* canvas) const override;
237 bool render(SkCanvas* canvas) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000238
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000239 const SkBitmap& bitmap() const { return fBitmap; }
240
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000241 // The non-const 'paint' method allows modification of this object's
242 // SkPaint. For this reason the ctor and setPaint method make a local copy.
243 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
244 // (since only an SkPaint* is passed into the ctor).
245 const SkPaint* paint() const { return fPaintPtr; }
246 SkPaint* paint() { return fPaintPtr; }
247
248 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
249
robertphillips@google.com91217d02013-03-17 18:33:46 +0000250 const SkRect* srcRect() const { return fSrc.isEmpty() ? NULL : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000251 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000252
253 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000254 void setDstRect(const SkRect& dst) { fDst = dst; }
255
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000256 SkCanvas::DrawBitmapRectFlags flags() const { return fFlags; }
257 void setFlags(SkCanvas::DrawBitmapRectFlags flags) { fFlags = flags; }
258
chudy@google.com902ebe52012-06-29 14:21:22 +0000259private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000260 SkBitmap fBitmap;
261 SkRect fSrc;
262 SkRect fDst;
263 SkPaint fPaint;
264 SkPaint* fPaintPtr;
265 SkCanvas::DrawBitmapRectFlags fFlags;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000266
267 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000268};
269
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000270class SkBeginCommentGroupCommand : public SkDrawCommand {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000271public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000272 SkBeginCommentGroupCommand(const char* description);
mtklein36352bf2015-03-25 18:17:31 -0700273 void execute(SkCanvas* canvas) const override {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000274 canvas->beginCommentGroup(fDescription.c_str());
275 };
276private:
277 SkString fDescription;
278
279 typedef SkDrawCommand INHERITED;
280};
281
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000282class SkCommentCommand : public SkDrawCommand {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000283public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000284 SkCommentCommand(const char* kywd, const char* value);
mtklein36352bf2015-03-25 18:17:31 -0700285 void execute(SkCanvas* canvas) const override {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000286 canvas->addComment(fKywd.c_str(), fValue.c_str());
287 };
288private:
289 SkString fKywd;
290 SkString fValue;
291
292 typedef SkDrawCommand INHERITED;
293};
294
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000295class SkEndCommentGroupCommand : public SkDrawCommand {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000296public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000297 SkEndCommentGroupCommand();
mtklein36352bf2015-03-25 18:17:31 -0700298 void execute(SkCanvas* canvas) const override {
robertphillips@google.com0a4805e2013-05-29 13:24:23 +0000299 canvas->endCommentGroup();
300 };
301private:
302 typedef SkDrawCommand INHERITED;
303};
304
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000305class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000306public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000307 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700308 void execute(SkCanvas* canvas) const override;
309 bool render(SkCanvas* canvas) const override;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000310private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000311 SkRect fOval;
312 SkPaint fPaint;
313
314 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000315};
316
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000317class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000318public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000319 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700320 void execute(SkCanvas* canvas) const override;
321 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000322private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000323 SkPaint fPaint;
324
325 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000326};
327
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000328class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000329public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000330 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700331 void execute(SkCanvas* canvas) const override;
332 bool render(SkCanvas* canvas) const override;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000333
chudy@google.com902ebe52012-06-29 14:21:22 +0000334private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000335 SkPath fPath;
336 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000337
338 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000339};
340
fmalita160ebb22015-04-01 20:58:37 -0700341class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000342public:
fmalita160ebb22015-04-01 20:58:37 -0700343 SkBeginDrawPictureCommand(const SkPicture* picture,
344 const SkMatrix* matrix,
345 const SkPaint* paint);
346
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;
fmalita160ebb22015-04-01 20:58:37 -0700352 SkTLazy<SkMatrix> fMatrix;
353 SkTLazy<SkPaint> fPaint;
354
355 typedef SkDrawCommand INHERITED;
356};
357
358class SkEndDrawPictureCommand : public SkDrawCommand {
359public:
360 SkEndDrawPictureCommand(bool restore);
361
362 void execute(SkCanvas* canvas) const override;
363
364private:
365 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000366
367 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000368};
369
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000370class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000371public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000372 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000373 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000374 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700375 void execute(SkCanvas* canvas) const override;
376 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000377private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000378 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000379 size_t fCount;
380 SkPoint* fPts;
381 SkPaint fPaint;
382
383 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000384};
385
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000386class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000387public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000388 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000389 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000390 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700391 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000392private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000393 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000394 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000395 SkScalar fX;
396 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000397 SkPaint fPaint;
398
399 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000400};
401
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000402class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000403public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000404 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
405 const SkPaint& paint);
406 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700407 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000408private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000409 char* fText;
410 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000411 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000412 SkPaint fPaint;
413
414 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000415};
416
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000417class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000418public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000419 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
420 const SkMatrix* matrix, const SkPaint& paint);
421 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700422 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000423private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000424 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000425 size_t fByteLength;
426 SkPath fPath;
427 SkMatrix fMatrix;
428 SkPaint fPaint;
429
430 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000431};
432
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000433class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000434public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000435 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
436 SkScalar constY, const SkPaint& paint);
437 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700438 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000439private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000440 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000441 char* fText;
442 size_t fByteLength;
443 SkScalar fConstY;
444 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000445
446 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000447};
448
fmalitab7425172014-08-26 07:56:44 -0700449class SkDrawTextBlobCommand : public SkDrawCommand {
450public:
451 SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);
452
mtklein36352bf2015-03-25 18:17:31 -0700453 void execute(SkCanvas* canvas) const override;
454 bool render(SkCanvas* canvas) const override;
fmalitab7425172014-08-26 07:56:44 -0700455
456private:
457 SkAutoTUnref<const SkTextBlob> fBlob;
458 SkScalar fXPos;
459 SkScalar fYPos;
460 SkPaint fPaint;
461
462 typedef SkDrawCommand INHERITED;
463};
464
robertphillips9bafc302015-02-13 11:13:00 -0800465class SkDrawPatchCommand : public SkDrawCommand {
466public:
467 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
468 const SkPoint texCoords[4], SkXfermode* xmode,
469 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700470 void execute(SkCanvas* canvas) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800471
472private:
473 SkPoint fCubics[12];
474 SkColor fColors[4];
475 SkPoint fTexCoords[4];
476 SkAutoTUnref<SkXfermode> fXfermode;
477 SkPaint fPaint;
478
479 typedef SkDrawCommand INHERITED;
480};
481
482
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000483class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000484public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000485 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700486 void execute(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000487
robertphillips@google.com91217d02013-03-17 18:33:46 +0000488 const SkRect& rect() const { return fRect; }
489 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000490private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000491 SkRect fRect;
492 SkPaint fPaint;
493
494 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000495};
496
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000497class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000498public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000499 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700500 void execute(SkCanvas* canvas) const override;
501 bool render(SkCanvas* canvas) const override;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000502private:
503 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000504 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000505
506 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000507};
508
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000509class SkDrawDRRectCommand : public SkDrawCommand {
510public:
511 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
512 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700513 void execute(SkCanvas* canvas) const override;
514 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000515private:
516 SkRRect fOuter;
517 SkRRect fInner;
518 SkPaint fPaint;
519
520 typedef SkDrawCommand INHERITED;
521};
522
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000523class SkDrawSpriteCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000524public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000525 SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700526 void execute(SkCanvas* canvas) const override;
527 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000528private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000529 SkBitmap fBitmap;
530 int fLeft;
531 int fTop;
532 SkPaint fPaint;
533 SkPaint* fPaintPtr;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000534
535 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000536};
537
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000538class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000539public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000540 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
541 const SkPoint vertices[], const SkPoint texs[],
542 const SkColor colors[], SkXfermode* xfermode,
543 const uint16_t indices[], int indexCount,
544 const SkPaint& paint);
545 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700546 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000547private:
548 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000549 int fVertexCount;
550 SkPoint* fVertices;
551 SkPoint* fTexs;
552 SkColor* fColors;
chudy@google.com902ebe52012-06-29 14:21:22 +0000553 SkXfermode* fXfermode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000554 uint16_t* fIndices;
555 int fIndexCount;
556 SkPaint fPaint;
557
558 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000559};
560
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000561class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000562public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400563 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700564 void execute(SkCanvas* canvas) const override;
565 Action action() const override { return kPushLayer_Action; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000566private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000567 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000568};
569
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000570class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000571public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000572 SkSaveLayerCommand(const SkRect* bounds, const SkPaint* paint,
573 SkCanvas::SaveFlags flags);
mtklein36352bf2015-03-25 18:17:31 -0700574 void execute(SkCanvas* canvas) const override;
575 void vizExecute(SkCanvas* canvas) const override;
576 Action action() const override{ return kPushLayer_Action; }
577 void setActive(bool active) override { fActive = active; }
578 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000579
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000580 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000581
chudy@google.com902ebe52012-06-29 14:21:22 +0000582private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000583 SkRect fBounds;
584 SkPaint fPaint;
585 SkPaint* fPaintPtr;
chudy@google.com902ebe52012-06-29 14:21:22 +0000586 SkCanvas::SaveFlags fFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000587
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000588 bool fActive;
589
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000590 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000591};
592
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000593class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000594public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000595 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700596 void setUserMatrix(const SkMatrix&) override;
597 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000598private:
robertphillips70171682014-10-16 14:28:28 -0700599 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000600 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000601
602 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000603};
604
chudy@google.com902ebe52012-06-29 14:21:22 +0000605#endif