blob: 7ff5a86bd33bc061fa31c9be325224d88bc13cfe [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 {
fmalita160ebb22015-04-01 20:58:37 -070018 kBeginDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080019 kClipPath_OpType,
20 kClipRegion_OpType,
21 kClipRect_OpType,
22 kClipRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080023 kConcat_OpType,
24 kDrawBitmap_OpType,
25 kDrawBitmapNine_OpType,
26 kDrawBitmapRect_OpType,
27 kDrawClear_OpType,
28 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070029 kDrawImage_OpType,
30 kDrawImageRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080031 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,
fmalita160ebb22015-04-01 20:58:37 -070045 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080046 kRestore_OpType,
47 kSave_OpType,
48 kSaveLayer_OpType,
49 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080050
robertphillips9bafc302015-02-13 11:13:00 -080051 kLast_OpType = kSetMatrix_OpType
52 };
53
54 static const int kOpTypeCount = kLast_OpType + 1;
55
56 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000057
58 virtual ~SkDrawCommand();
59
fmalita8c89c522014-11-08 16:18:56 -080060 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000061
fmalita8c89c522014-11-08 16:18:56 -080062 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080063 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000064 }
65
chudy@google.com0b5bbb02012-07-31 19:55:32 +000066 bool isVisible() const {
67 return fVisible;
68 }
69
70 void setVisible(bool toggle) {
71 fVisible = toggle;
72 }
chudy@google.com902ebe52012-06-29 14:21:22 +000073
fmalita8c89c522014-11-08 16:18:56 -080074 const SkTDArray<SkString*>* Info() const { return &fInfo; }
75 virtual void execute(SkCanvas*) const = 0;
76 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070077
fmalita8c89c522014-11-08 16:18:56 -080078 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070079
mtkleinf0f14112014-12-12 08:46:25 -080080 // The next "active" system is only used by save, saveLayer, and restore.
81 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000082 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000083 // saves just return a kPushLayer action but don't track active state
84 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000085 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000086 enum Action {
87 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000088 kPopLayer_Action,
89 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000090 };
91 virtual Action action() const { return kNone_Action; }
92 virtual void setActive(bool active) {}
93 virtual bool active() const { return false; }
94
robertphillips9bafc302015-02-13 11:13:00 -080095 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +000096
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000097 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +000098
robertphillips9bafc302015-02-13 11:13:00 -080099 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000100
chudy@google.com902ebe52012-06-29 14:21:22 +0000101protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000102 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000103
104private:
robertphillips9bafc302015-02-13 11:13:00 -0800105 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000106 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000107};
108
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000109class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000110public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000111 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700112 void execute(SkCanvas* canvas) const override;
113 Action action() const override { return kPopLayer_Action; }
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000114
115private:
116 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000117};
118
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000119class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000120public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000121 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700122 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000123private:
124 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000125
126 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000127};
128
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000129class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000130public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000131 SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700132 void execute(SkCanvas* canvas) const override;
133 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000134private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000135 SkPath fPath;
chudy@google.com902ebe52012-06-29 14:21:22 +0000136 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000137 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000138
139 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000140};
141
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000142class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000143public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000144 SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
mtklein36352bf2015-03-25 18:17:31 -0700145 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000146private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000147 SkRegion fRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000148 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000149
150 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000151};
152
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000153class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000154public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000155 SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700156 void execute(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000157
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000158 const SkRect& rect() const { return fRect; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000159 SkRegion::Op op() const { return fOp; }
160 bool doAA() const { return fDoAA; }
161
chudy@google.com902ebe52012-06-29 14:21:22 +0000162private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000163 SkRect fRect;
chudy@google.com902ebe52012-06-29 14:21:22 +0000164 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000165 bool fDoAA;
166
167 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000168};
169
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000170class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000171public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000172 SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700173 void execute(SkCanvas* canvas) const override;
174 bool render(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000175
176 const SkRRect& rrect() const { return fRRect; }
177 SkRegion::Op op() const { return fOp; }
178 bool doAA() const { return fDoAA; }
179
robertphillips@google.com67baba42013-01-02 20:20:31 +0000180private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000181 SkRRect fRRect;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000182 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000183 bool fDoAA;
184
185 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000186};
187
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000188class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000189public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000190 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700191 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000192private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000193 SkMatrix fMatrix;
194
195 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000196};
197
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000198class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000199public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000200 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000201 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700202 void execute(SkCanvas* canvas) const override;
203 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000204private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000205 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000206 SkScalar fLeft;
207 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000208 SkPaint fPaint;
209 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000210
211 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000212};
213
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000214class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000215public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000216 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000217 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700218 void execute(SkCanvas* canvas) const override;
219 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000220private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000221 SkBitmap fBitmap;
222 SkIRect fCenter;
223 SkRect fDst;
224 SkPaint fPaint;
225 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000226
227 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000228};
229
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000230class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000231public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000232 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000233 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700234 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700235 void execute(SkCanvas* canvas) const override;
236 bool render(SkCanvas* canvas) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000237
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000238 const SkBitmap& bitmap() const { return fBitmap; }
239
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000240 // The non-const 'paint' method allows modification of this object's
241 // SkPaint. For this reason the ctor and setPaint method make a local copy.
242 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
243 // (since only an SkPaint* is passed into the ctor).
244 const SkPaint* paint() const { return fPaintPtr; }
245 SkPaint* paint() { return fPaintPtr; }
246
247 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
248
robertphillips@google.com91217d02013-03-17 18:33:46 +0000249 const SkRect* srcRect() const { return fSrc.isEmpty() ? NULL : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000250 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000251
252 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000253 void setDstRect(const SkRect& dst) { fDst = dst; }
254
reeda5517e22015-07-14 10:54:12 -0700255 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
256 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000257
chudy@google.com902ebe52012-06-29 14:21:22 +0000258private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000259 SkBitmap fBitmap;
260 SkRect fSrc;
261 SkRect fDst;
262 SkPaint fPaint;
263 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700264 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000265
266 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000267};
268
fmalita651c9202015-07-22 10:23:01 -0700269class SkDrawImageCommand : public SkDrawCommand {
270public:
271 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
272 void execute(SkCanvas* canvas) const override;
273 bool render(SkCanvas* canvas) const override;
274private:
275 SkAutoTUnref<const SkImage> fImage;
276 SkScalar fLeft;
277 SkScalar fTop;
278 SkTLazy<SkPaint> fPaint;
279
280 typedef SkDrawCommand INHERITED;
281};
282
283class SkDrawImageRectCommand : public SkDrawCommand {
284public:
285 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
286 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
287 void execute(SkCanvas* canvas) const override;
288 bool render(SkCanvas* canvas) const override;
289private:
290 SkAutoTUnref<const SkImage> fImage;
291 SkTLazy<SkRect> fSrc;
292 SkRect fDst;
293 SkTLazy<SkPaint> fPaint;
294 SkCanvas::SrcRectConstraint fConstraint;
295
296 typedef SkDrawCommand INHERITED;
297};
298
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000299class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000300public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000301 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700302 void execute(SkCanvas* canvas) const override;
303 bool render(SkCanvas* canvas) const override;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000304private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000305 SkRect fOval;
306 SkPaint fPaint;
307
308 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000309};
310
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000311class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000312public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000313 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700314 void execute(SkCanvas* canvas) const override;
315 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000316private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000317 SkPaint fPaint;
318
319 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000320};
321
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000322class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000323public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000324 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700325 void execute(SkCanvas* canvas) const override;
326 bool render(SkCanvas* canvas) const override;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000327
chudy@google.com902ebe52012-06-29 14:21:22 +0000328private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000329 SkPath fPath;
330 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000331
332 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000333};
334
fmalita160ebb22015-04-01 20:58:37 -0700335class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000336public:
fmalita160ebb22015-04-01 20:58:37 -0700337 SkBeginDrawPictureCommand(const SkPicture* picture,
338 const SkMatrix* matrix,
339 const SkPaint* paint);
340
mtklein36352bf2015-03-25 18:17:31 -0700341 void execute(SkCanvas* canvas) const override;
342 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000343
chudy@google.com902ebe52012-06-29 14:21:22 +0000344private:
robertphillips9b14f262014-06-04 05:40:44 -0700345 SkAutoTUnref<const SkPicture> fPicture;
fmalita160ebb22015-04-01 20:58:37 -0700346 SkTLazy<SkMatrix> fMatrix;
347 SkTLazy<SkPaint> fPaint;
348
349 typedef SkDrawCommand INHERITED;
350};
351
352class SkEndDrawPictureCommand : public SkDrawCommand {
353public:
354 SkEndDrawPictureCommand(bool restore);
355
356 void execute(SkCanvas* canvas) const override;
357
358private:
359 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000360
361 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000362};
363
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000364class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000365public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000366 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000367 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000368 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700369 void execute(SkCanvas* canvas) const override;
370 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000371private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000372 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000373 size_t fCount;
374 SkPoint* fPts;
375 SkPaint fPaint;
376
377 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000378};
379
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000380class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000381public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000382 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000383 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000384 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700385 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000386private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000387 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000388 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000389 SkScalar fX;
390 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000391 SkPaint fPaint;
392
393 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000394};
395
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000396class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000397public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000398 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
399 const SkPaint& paint);
400 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700401 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000402private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000403 char* fText;
404 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000405 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000406 SkPaint fPaint;
407
408 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000409};
410
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000411class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000412public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000413 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
414 const SkMatrix* matrix, const SkPaint& paint);
415 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700416 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000417private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000418 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000419 size_t fByteLength;
420 SkPath fPath;
421 SkMatrix fMatrix;
422 SkPaint fPaint;
423
424 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000425};
426
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000427class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000428public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000429 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
430 SkScalar constY, const SkPaint& paint);
431 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700432 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000433private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000434 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000435 char* fText;
436 size_t fByteLength;
437 SkScalar fConstY;
438 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000439
440 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000441};
442
fmalitab7425172014-08-26 07:56:44 -0700443class SkDrawTextBlobCommand : public SkDrawCommand {
444public:
445 SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);
446
mtklein36352bf2015-03-25 18:17:31 -0700447 void execute(SkCanvas* canvas) const override;
448 bool render(SkCanvas* canvas) const override;
fmalitab7425172014-08-26 07:56:44 -0700449
450private:
451 SkAutoTUnref<const SkTextBlob> fBlob;
452 SkScalar fXPos;
453 SkScalar fYPos;
454 SkPaint fPaint;
455
456 typedef SkDrawCommand INHERITED;
457};
458
robertphillips9bafc302015-02-13 11:13:00 -0800459class SkDrawPatchCommand : public SkDrawCommand {
460public:
461 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
462 const SkPoint texCoords[4], SkXfermode* xmode,
463 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700464 void execute(SkCanvas* canvas) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800465
466private:
467 SkPoint fCubics[12];
468 SkColor fColors[4];
469 SkPoint fTexCoords[4];
470 SkAutoTUnref<SkXfermode> fXfermode;
471 SkPaint fPaint;
472
473 typedef SkDrawCommand INHERITED;
474};
475
476
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000477class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000478public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000479 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700480 void execute(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000481
robertphillips@google.com91217d02013-03-17 18:33:46 +0000482 const SkRect& rect() const { return fRect; }
483 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000484private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000485 SkRect fRect;
486 SkPaint fPaint;
487
488 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000489};
490
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000491class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000492public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000493 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700494 void execute(SkCanvas* canvas) const override;
495 bool render(SkCanvas* canvas) const override;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000496private:
497 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000498 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000499
500 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000501};
502
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000503class SkDrawDRRectCommand : public SkDrawCommand {
504public:
505 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
506 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700507 void execute(SkCanvas* canvas) const override;
508 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000509private:
510 SkRRect fOuter;
511 SkRRect fInner;
512 SkPaint fPaint;
513
514 typedef SkDrawCommand INHERITED;
515};
516
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000517class SkDrawSpriteCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000518public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000519 SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700520 void execute(SkCanvas* canvas) const override;
521 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000522private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000523 SkBitmap fBitmap;
524 int fLeft;
525 int fTop;
526 SkPaint fPaint;
527 SkPaint* fPaintPtr;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000528
529 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000530};
531
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000532class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000533public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000534 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
535 const SkPoint vertices[], const SkPoint texs[],
536 const SkColor colors[], SkXfermode* xfermode,
537 const uint16_t indices[], int indexCount,
538 const SkPaint& paint);
539 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700540 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000541private:
542 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000543 int fVertexCount;
544 SkPoint* fVertices;
545 SkPoint* fTexs;
546 SkColor* fColors;
chudy@google.com902ebe52012-06-29 14:21:22 +0000547 SkXfermode* fXfermode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000548 uint16_t* fIndices;
549 int fIndexCount;
550 SkPaint fPaint;
551
552 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000553};
554
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000555class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000556public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400557 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700558 void execute(SkCanvas* canvas) const override;
559 Action action() const override { return kPushLayer_Action; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000560private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000561 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000562};
563
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000564class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000565public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000566 SkSaveLayerCommand(const SkRect* bounds, const SkPaint* paint,
567 SkCanvas::SaveFlags flags);
mtklein36352bf2015-03-25 18:17:31 -0700568 void execute(SkCanvas* canvas) const override;
569 void vizExecute(SkCanvas* canvas) const override;
570 Action action() const override{ return kPushLayer_Action; }
571 void setActive(bool active) override { fActive = active; }
572 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000573
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000574 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000575
chudy@google.com902ebe52012-06-29 14:21:22 +0000576private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000577 SkRect fBounds;
578 SkPaint fPaint;
579 SkPaint* fPaintPtr;
chudy@google.com902ebe52012-06-29 14:21:22 +0000580 SkCanvas::SaveFlags fFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000581
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000582 bool fActive;
583
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000584 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000585};
586
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000587class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000588public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000589 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700590 void setUserMatrix(const SkMatrix&) override;
591 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000592private:
robertphillips70171682014-10-16 14:28:28 -0700593 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000594 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000595
596 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000597};
598
chudy@google.com902ebe52012-06-29 14:21:22 +0000599#endif