blob: c7e5f008a423b4e4c1911bdc72dbd461292c7060 [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,
44 kDrawSprite_OpType,
45 kDrawText_OpType,
46 kDrawTextBlob_OpType,
47 kDrawTextOnPath_OpType,
48 kDrawVertices_OpType,
fmalita160ebb22015-04-01 20:58:37 -070049 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080050 kRestore_OpType,
51 kSave_OpType,
52 kSaveLayer_OpType,
53 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080054
robertphillips9bafc302015-02-13 11:13:00 -080055 kLast_OpType = kSetMatrix_OpType
56 };
57
58 static const int kOpTypeCount = kLast_OpType + 1;
59
60 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000061
62 virtual ~SkDrawCommand();
63
fmalita8c89c522014-11-08 16:18:56 -080064 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000065
fmalita8c89c522014-11-08 16:18:56 -080066 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080067 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000068 }
69
chudy@google.com0b5bbb02012-07-31 19:55:32 +000070 bool isVisible() const {
71 return fVisible;
72 }
73
74 void setVisible(bool toggle) {
75 fVisible = toggle;
76 }
chudy@google.com902ebe52012-06-29 14:21:22 +000077
fmalita8c89c522014-11-08 16:18:56 -080078 const SkTDArray<SkString*>* Info() const { return &fInfo; }
79 virtual void execute(SkCanvas*) const = 0;
80 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070081
fmalita8c89c522014-11-08 16:18:56 -080082 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070083
mtkleinf0f14112014-12-12 08:46:25 -080084 // The next "active" system is only used by save, saveLayer, and restore.
85 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000086 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000087 // saves just return a kPushLayer action but don't track active state
88 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000089 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000090 enum Action {
91 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000092 kPopLayer_Action,
93 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000094 };
95 virtual Action action() const { return kNone_Action; }
96 virtual void setActive(bool active) {}
97 virtual bool active() const { return false; }
98
robertphillips9bafc302015-02-13 11:13:00 -080099 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000100
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000101 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000102
robertphillips9bafc302015-02-13 11:13:00 -0800103 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000104
chudy@google.com902ebe52012-06-29 14:21:22 +0000105protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000106 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000107
108private:
robertphillips9bafc302015-02-13 11:13:00 -0800109 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000110 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,
reeda5517e22015-07-14 10:54:12 -0700238 SkCanvas::SrcRectConstraint);
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
halcanary96fcdcc2015-08-27 07:41:13 -0700253 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &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
reeda5517e22015-07-14 10:54:12 -0700259 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
260 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000261
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;
reeda5517e22015-07-14 10:54:12 -0700268 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000269
270 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000271};
272
fmalita651c9202015-07-22 10:23:01 -0700273class SkDrawImageCommand : public SkDrawCommand {
274public:
275 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
276 void execute(SkCanvas* canvas) const override;
277 bool render(SkCanvas* canvas) const override;
278private:
279 SkAutoTUnref<const SkImage> fImage;
280 SkScalar fLeft;
281 SkScalar fTop;
282 SkTLazy<SkPaint> fPaint;
283
284 typedef SkDrawCommand INHERITED;
285};
286
287class SkDrawImageRectCommand : public SkDrawCommand {
288public:
289 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
290 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
291 void execute(SkCanvas* canvas) const override;
292 bool render(SkCanvas* canvas) const override;
293private:
294 SkAutoTUnref<const SkImage> fImage;
295 SkTLazy<SkRect> fSrc;
296 SkRect fDst;
297 SkTLazy<SkPaint> fPaint;
298 SkCanvas::SrcRectConstraint fConstraint;
299
300 typedef SkDrawCommand INHERITED;
301};
302
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000303class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000304public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000305 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700306 void execute(SkCanvas* canvas) const override;
307 bool render(SkCanvas* canvas) const override;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000308private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000309 SkRect fOval;
310 SkPaint fPaint;
311
312 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000313};
314
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000315class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000316public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000317 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700318 void execute(SkCanvas* canvas) const override;
319 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000320private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000321 SkPaint fPaint;
322
323 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000324};
325
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000326class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000327public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000328 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700329 void execute(SkCanvas* canvas) const override;
330 bool render(SkCanvas* canvas) const override;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000331
chudy@google.com902ebe52012-06-29 14:21:22 +0000332private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000333 SkPath fPath;
334 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000335
336 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000337};
338
fmalita160ebb22015-04-01 20:58:37 -0700339class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000340public:
fmalita160ebb22015-04-01 20:58:37 -0700341 SkBeginDrawPictureCommand(const SkPicture* picture,
342 const SkMatrix* matrix,
343 const SkPaint* paint);
344
mtklein36352bf2015-03-25 18:17:31 -0700345 void execute(SkCanvas* canvas) const override;
346 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000347
chudy@google.com902ebe52012-06-29 14:21:22 +0000348private:
robertphillips9b14f262014-06-04 05:40:44 -0700349 SkAutoTUnref<const SkPicture> fPicture;
fmalita160ebb22015-04-01 20:58:37 -0700350 SkTLazy<SkMatrix> fMatrix;
351 SkTLazy<SkPaint> fPaint;
352
353 typedef SkDrawCommand INHERITED;
354};
355
356class SkEndDrawPictureCommand : public SkDrawCommand {
357public:
358 SkEndDrawPictureCommand(bool restore);
359
360 void execute(SkCanvas* canvas) const override;
361
362private:
363 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000364
365 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000366};
367
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000368class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000369public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000370 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000371 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000372 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700373 void execute(SkCanvas* canvas) const override;
374 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000375private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000376 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000377 size_t fCount;
378 SkPoint* fPts;
379 SkPaint fPaint;
380
381 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000382};
383
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000384class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000385public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000386 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000387 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000388 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700389 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000390private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000391 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000392 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000393 SkScalar fX;
394 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000395 SkPaint fPaint;
396
397 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000398};
399
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000400class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000401public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000402 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
403 const SkPaint& paint);
404 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700405 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000406private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000407 char* fText;
408 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000409 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000410 SkPaint fPaint;
411
412 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000413};
414
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000415class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000416public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000417 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
418 const SkMatrix* matrix, const SkPaint& paint);
419 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700420 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000421private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000422 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000423 size_t fByteLength;
424 SkPath fPath;
425 SkMatrix fMatrix;
426 SkPaint fPaint;
427
428 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000429};
430
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000431class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000432public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000433 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
434 SkScalar constY, const SkPaint& paint);
435 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700436 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000437private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000438 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000439 char* fText;
440 size_t fByteLength;
441 SkScalar fConstY;
442 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000443
444 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000445};
446
fmalitab7425172014-08-26 07:56:44 -0700447class SkDrawTextBlobCommand : public SkDrawCommand {
448public:
449 SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);
450
mtklein36352bf2015-03-25 18:17:31 -0700451 void execute(SkCanvas* canvas) const override;
452 bool render(SkCanvas* canvas) const override;
fmalitab7425172014-08-26 07:56:44 -0700453
454private:
455 SkAutoTUnref<const SkTextBlob> fBlob;
456 SkScalar fXPos;
457 SkScalar fYPos;
458 SkPaint fPaint;
459
460 typedef SkDrawCommand INHERITED;
461};
462
robertphillips9bafc302015-02-13 11:13:00 -0800463class SkDrawPatchCommand : public SkDrawCommand {
464public:
465 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
466 const SkPoint texCoords[4], SkXfermode* xmode,
467 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700468 void execute(SkCanvas* canvas) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800469
470private:
471 SkPoint fCubics[12];
472 SkColor fColors[4];
473 SkPoint fTexCoords[4];
474 SkAutoTUnref<SkXfermode> fXfermode;
475 SkPaint fPaint;
476
477 typedef SkDrawCommand INHERITED;
478};
479
480
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000481class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000482public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000483 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700484 void execute(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000485
robertphillips@google.com91217d02013-03-17 18:33:46 +0000486 const SkRect& rect() const { return fRect; }
487 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000488private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000489 SkRect fRect;
490 SkPaint fPaint;
491
492 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000493};
494
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000495class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000496public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000497 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700498 void execute(SkCanvas* canvas) const override;
499 bool render(SkCanvas* canvas) const override;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000500private:
501 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000502 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000503
504 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000505};
506
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000507class SkDrawDRRectCommand : public SkDrawCommand {
508public:
509 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
510 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700511 void execute(SkCanvas* canvas) const override;
512 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000513private:
514 SkRRect fOuter;
515 SkRRect fInner;
516 SkPaint fPaint;
517
518 typedef SkDrawCommand INHERITED;
519};
520
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000521class SkDrawSpriteCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000522public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000523 SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700524 void execute(SkCanvas* canvas) const override;
525 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000526private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000527 SkBitmap fBitmap;
528 int fLeft;
529 int fTop;
530 SkPaint fPaint;
531 SkPaint* fPaintPtr;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000532
533 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000534};
535
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000536class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000537public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000538 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
539 const SkPoint vertices[], const SkPoint texs[],
540 const SkColor colors[], SkXfermode* xfermode,
541 const uint16_t indices[], int indexCount,
542 const SkPaint& paint);
543 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700544 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000545private:
546 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000547 int fVertexCount;
548 SkPoint* fVertices;
549 SkPoint* fTexs;
550 SkColor* fColors;
chudy@google.com902ebe52012-06-29 14:21:22 +0000551 SkXfermode* fXfermode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000552 uint16_t* fIndices;
553 int fIndexCount;
554 SkPaint fPaint;
555
556 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000557};
558
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000559class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000560public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400561 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700562 void execute(SkCanvas* canvas) const override;
563 Action action() const override { return kPushLayer_Action; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000564private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000565 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000566};
567
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000568class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000569public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000570 SkSaveLayerCommand(const SkRect* bounds, const SkPaint* paint,
571 SkCanvas::SaveFlags flags);
mtklein36352bf2015-03-25 18:17:31 -0700572 void execute(SkCanvas* canvas) const override;
573 void vizExecute(SkCanvas* canvas) const override;
574 Action action() const override{ return kPushLayer_Action; }
575 void setActive(bool active) override { fActive = active; }
576 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000577
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000578 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000579
chudy@google.com902ebe52012-06-29 14:21:22 +0000580private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000581 SkRect fBounds;
582 SkPaint fPaint;
583 SkPaint* fPaintPtr;
chudy@google.com902ebe52012-06-29 14:21:22 +0000584 SkCanvas::SaveFlags fFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000585
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000586 bool fActive;
587
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000588 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000589};
590
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000591class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000592public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000593 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700594 void setUserMatrix(const SkMatrix&) override;
595 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000596private:
robertphillips70171682014-10-16 14:28:28 -0700597 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000598 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000599
600 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000601};
602
chudy@google.com902ebe52012-06-29 14:21:22 +0000603#endif