blob: f67df92de7d37babbf40f1fdb1e8f745ce797492 [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"
bungemand3ebb482015-08-05 13:57:49 -070013#include "SkTLazy.h"
14#include "SkPath.h"
15#include "SkRRect.h"
robertphillips@google.com0a4805e2013-05-29 13:24:23 +000016#include "SkString.h"
bungemand3ebb482015-08-05 13:57:49 -070017#include "SkTDArray.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000018
fmalita@google.com86681b32013-06-13 20:59:14 +000019class SK_API SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000020public:
robertphillips9bafc302015-02-13 11:13:00 -080021 enum OpType {
fmalita160ebb22015-04-01 20:58:37 -070022 kBeginDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080023 kClipPath_OpType,
24 kClipRegion_OpType,
25 kClipRect_OpType,
26 kClipRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080027 kConcat_OpType,
28 kDrawBitmap_OpType,
29 kDrawBitmapNine_OpType,
30 kDrawBitmapRect_OpType,
31 kDrawClear_OpType,
32 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070033 kDrawImage_OpType,
34 kDrawImageRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080035 kDrawOval_OpType,
36 kDrawPaint_OpType,
37 kDrawPatch_OpType,
38 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080039 kDrawPoints_OpType,
40 kDrawPosText_OpType,
41 kDrawPosTextH_OpType,
42 kDrawRect_OpType,
43 kDrawRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080044 kDrawText_OpType,
45 kDrawTextBlob_OpType,
46 kDrawTextOnPath_OpType,
47 kDrawVertices_OpType,
fmalita160ebb22015-04-01 20:58:37 -070048 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080049 kRestore_OpType,
50 kSave_OpType,
51 kSaveLayer_OpType,
52 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080053
robertphillips9bafc302015-02-13 11:13:00 -080054 kLast_OpType = kSetMatrix_OpType
55 };
56
57 static const int kOpTypeCount = kLast_OpType + 1;
58
59 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000060
61 virtual ~SkDrawCommand();
62
fmalita8c89c522014-11-08 16:18:56 -080063 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +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 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000110};
111
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000112class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000113public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000114 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700115 void execute(SkCanvas* canvas) const override;
116 Action action() const override { return kPopLayer_Action; }
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000117
118private:
119 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000120};
121
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000122class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000123public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000124 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700125 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000126private:
127 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000128
129 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000130};
131
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000132class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000133public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000134 SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700135 void execute(SkCanvas* canvas) const override;
136 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000137private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000138 SkPath fPath;
chudy@google.com902ebe52012-06-29 14:21:22 +0000139 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000140 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000141
142 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000143};
144
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000145class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000146public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000147 SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
mtklein36352bf2015-03-25 18:17:31 -0700148 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000149private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000150 SkRegion fRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000151 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000152
153 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000154};
155
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000156class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000157public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000158 SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700159 void execute(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000160
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000161 const SkRect& rect() const { return fRect; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000162 SkRegion::Op op() const { return fOp; }
163 bool doAA() const { return fDoAA; }
164
chudy@google.com902ebe52012-06-29 14:21:22 +0000165private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000166 SkRect fRect;
chudy@google.com902ebe52012-06-29 14:21:22 +0000167 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000168 bool fDoAA;
169
170 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000171};
172
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000173class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000174public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000175 SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700176 void execute(SkCanvas* canvas) const override;
177 bool render(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000178
179 const SkRRect& rrect() const { return fRRect; }
180 SkRegion::Op op() const { return fOp; }
181 bool doAA() const { return fDoAA; }
182
robertphillips@google.com67baba42013-01-02 20:20:31 +0000183private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000184 SkRRect fRRect;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000185 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000186 bool fDoAA;
187
188 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000189};
190
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000191class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000192public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000193 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700194 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000195private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000196 SkMatrix fMatrix;
197
198 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000199};
200
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000201class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000202public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000203 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000204 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700205 void execute(SkCanvas* canvas) const override;
206 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000207private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000208 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000209 SkScalar fLeft;
210 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000211 SkPaint fPaint;
212 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000213
214 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000215};
216
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000217class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000218public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000219 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000220 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700221 void execute(SkCanvas* canvas) const override;
222 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000223private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000224 SkBitmap fBitmap;
225 SkIRect fCenter;
226 SkRect fDst;
227 SkPaint fPaint;
228 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000229
230 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000231};
232
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000233class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000234public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000235 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000236 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700237 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700238 void execute(SkCanvas* canvas) const override;
239 bool render(SkCanvas* canvas) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000240
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000241 const SkBitmap& bitmap() const { return fBitmap; }
242
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000243 // The non-const 'paint' method allows modification of this object's
244 // SkPaint. For this reason the ctor and setPaint method make a local copy.
245 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
246 // (since only an SkPaint* is passed into the ctor).
247 const SkPaint* paint() const { return fPaintPtr; }
248 SkPaint* paint() { return fPaintPtr; }
249
250 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
251
halcanary96fcdcc2015-08-27 07:41:13 -0700252 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000253 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000254
255 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000256 void setDstRect(const SkRect& dst) { fDst = dst; }
257
reeda5517e22015-07-14 10:54:12 -0700258 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
259 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000260
chudy@google.com902ebe52012-06-29 14:21:22 +0000261private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000262 SkBitmap fBitmap;
263 SkRect fSrc;
264 SkRect fDst;
265 SkPaint fPaint;
266 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700267 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000268
269 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000270};
271
fmalita651c9202015-07-22 10:23:01 -0700272class SkDrawImageCommand : public SkDrawCommand {
273public:
274 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
275 void execute(SkCanvas* canvas) const override;
276 bool render(SkCanvas* canvas) const override;
277private:
278 SkAutoTUnref<const SkImage> fImage;
279 SkScalar fLeft;
280 SkScalar fTop;
281 SkTLazy<SkPaint> fPaint;
282
283 typedef SkDrawCommand INHERITED;
284};
285
286class SkDrawImageRectCommand : public SkDrawCommand {
287public:
288 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
289 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
290 void execute(SkCanvas* canvas) const override;
291 bool render(SkCanvas* canvas) const override;
292private:
293 SkAutoTUnref<const SkImage> fImage;
294 SkTLazy<SkRect> fSrc;
295 SkRect fDst;
296 SkTLazy<SkPaint> fPaint;
297 SkCanvas::SrcRectConstraint fConstraint;
298
299 typedef SkDrawCommand INHERITED;
300};
301
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000302class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000303public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000304 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700305 void execute(SkCanvas* canvas) const override;
306 bool render(SkCanvas* canvas) const override;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000307private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000308 SkRect fOval;
309 SkPaint fPaint;
310
311 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000312};
313
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000314class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000315public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000316 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700317 void execute(SkCanvas* canvas) const override;
318 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000319private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000320 SkPaint fPaint;
321
322 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000323};
324
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000325class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000326public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000327 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700328 void execute(SkCanvas* canvas) const override;
329 bool render(SkCanvas* canvas) const override;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000330
chudy@google.com902ebe52012-06-29 14:21:22 +0000331private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000332 SkPath fPath;
333 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000334
335 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000336};
337
fmalita160ebb22015-04-01 20:58:37 -0700338class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000339public:
fmalita160ebb22015-04-01 20:58:37 -0700340 SkBeginDrawPictureCommand(const SkPicture* picture,
341 const SkMatrix* matrix,
342 const SkPaint* paint);
343
mtklein36352bf2015-03-25 18:17:31 -0700344 void execute(SkCanvas* canvas) const override;
345 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000346
chudy@google.com902ebe52012-06-29 14:21:22 +0000347private:
robertphillips9b14f262014-06-04 05:40:44 -0700348 SkAutoTUnref<const SkPicture> fPicture;
fmalita160ebb22015-04-01 20:58:37 -0700349 SkTLazy<SkMatrix> fMatrix;
350 SkTLazy<SkPaint> fPaint;
351
352 typedef SkDrawCommand INHERITED;
353};
354
355class SkEndDrawPictureCommand : public SkDrawCommand {
356public:
357 SkEndDrawPictureCommand(bool restore);
358
359 void execute(SkCanvas* canvas) const override;
360
361private:
362 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000363
364 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000365};
366
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000367class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000368public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000369 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000370 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000371 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700372 void execute(SkCanvas* canvas) const override;
373 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000374private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000375 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000376 size_t fCount;
377 SkPoint* fPts;
378 SkPaint fPaint;
379
380 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000381};
382
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000383class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000384public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000385 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000386 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000387 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700388 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000389private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000390 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000391 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000392 SkScalar fX;
393 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000394 SkPaint fPaint;
395
396 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000397};
398
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000399class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000400public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000401 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
402 const SkPaint& paint);
403 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700404 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000405private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000406 char* fText;
407 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000408 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000409 SkPaint fPaint;
410
411 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000412};
413
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000414class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000415public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000416 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
417 const SkMatrix* matrix, const SkPaint& paint);
418 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700419 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000420private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000421 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000422 size_t fByteLength;
423 SkPath fPath;
424 SkMatrix fMatrix;
425 SkPaint fPaint;
426
427 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000428};
429
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000430class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000431public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000432 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
433 SkScalar constY, const SkPaint& paint);
434 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700435 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000436private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000437 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000438 char* fText;
439 size_t fByteLength;
440 SkScalar fConstY;
441 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000442
443 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000444};
445
fmalitab7425172014-08-26 07:56:44 -0700446class SkDrawTextBlobCommand : public SkDrawCommand {
447public:
448 SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);
449
mtklein36352bf2015-03-25 18:17:31 -0700450 void execute(SkCanvas* canvas) const override;
451 bool render(SkCanvas* canvas) const override;
fmalitab7425172014-08-26 07:56:44 -0700452
453private:
454 SkAutoTUnref<const SkTextBlob> fBlob;
455 SkScalar fXPos;
456 SkScalar fYPos;
457 SkPaint fPaint;
458
459 typedef SkDrawCommand INHERITED;
460};
461
robertphillips9bafc302015-02-13 11:13:00 -0800462class SkDrawPatchCommand : public SkDrawCommand {
463public:
464 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
465 const SkPoint texCoords[4], SkXfermode* xmode,
466 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700467 void execute(SkCanvas* canvas) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800468
469private:
470 SkPoint fCubics[12];
471 SkColor fColors[4];
472 SkPoint fTexCoords[4];
473 SkAutoTUnref<SkXfermode> fXfermode;
474 SkPaint fPaint;
475
476 typedef SkDrawCommand INHERITED;
477};
478
479
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000480class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000481public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000482 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700483 void execute(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000484
robertphillips@google.com91217d02013-03-17 18:33:46 +0000485 const SkRect& rect() const { return fRect; }
486 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000487private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000488 SkRect fRect;
489 SkPaint fPaint;
490
491 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000492};
493
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000494class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000495public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000496 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700497 void execute(SkCanvas* canvas) const override;
498 bool render(SkCanvas* canvas) const override;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000499private:
500 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000501 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000502
503 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000504};
505
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000506class SkDrawDRRectCommand : public SkDrawCommand {
507public:
508 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
509 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700510 void execute(SkCanvas* canvas) const override;
511 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000512private:
513 SkRRect fOuter;
514 SkRRect fInner;
515 SkPaint fPaint;
516
517 typedef SkDrawCommand INHERITED;
518};
519
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000520class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000521public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000522 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
523 const SkPoint vertices[], const SkPoint texs[],
524 const SkColor colors[], SkXfermode* xfermode,
525 const uint16_t indices[], int indexCount,
526 const SkPaint& paint);
527 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700528 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000529private:
530 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000531 int fVertexCount;
532 SkPoint* fVertices;
533 SkPoint* fTexs;
534 SkColor* fColors;
chudy@google.com902ebe52012-06-29 14:21:22 +0000535 SkXfermode* fXfermode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000536 uint16_t* fIndices;
537 int fIndexCount;
538 SkPaint fPaint;
539
540 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000541};
542
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000543class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000544public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400545 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700546 void execute(SkCanvas* canvas) const override;
547 Action action() const override { return kPushLayer_Action; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000548private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000549 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000550};
551
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000552class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000553public:
reed4960eee2015-12-18 07:09:18 -0800554 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
mtklein36352bf2015-03-25 18:17:31 -0700555 void execute(SkCanvas* canvas) const override;
556 void vizExecute(SkCanvas* canvas) const override;
557 Action action() const override{ return kPushLayer_Action; }
558 void setActive(bool active) override { fActive = active; }
559 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000560
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000561 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000562
chudy@google.com902ebe52012-06-29 14:21:22 +0000563private:
reed4960eee2015-12-18 07:09:18 -0800564 SkRect fBounds;
565 SkPaint fPaint;
566 SkPaint* fPaintPtr;
567 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000568
reed4960eee2015-12-18 07:09:18 -0800569 bool fActive;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000570
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000571 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000572};
573
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000574class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000575public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000576 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700577 void setUserMatrix(const SkMatrix&) override;
578 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000579private:
robertphillips70171682014-10-16 14:28:28 -0700580 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000581 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000582
583 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000584};
585
chudy@google.com902ebe52012-06-29 14:21:22 +0000586#endif