blob: 99e3eea457530f93112aa615b9a66ba1472a8741 [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,
29 kDrawOval_OpType,
30 kDrawPaint_OpType,
31 kDrawPatch_OpType,
32 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080033 kDrawPoints_OpType,
34 kDrawPosText_OpType,
35 kDrawPosTextH_OpType,
36 kDrawRect_OpType,
37 kDrawRRect_OpType,
38 kDrawSprite_OpType,
39 kDrawText_OpType,
40 kDrawTextBlob_OpType,
41 kDrawTextOnPath_OpType,
42 kDrawVertices_OpType,
fmalita160ebb22015-04-01 20:58:37 -070043 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080044 kRestore_OpType,
45 kSave_OpType,
46 kSaveLayer_OpType,
47 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080048
robertphillips9bafc302015-02-13 11:13:00 -080049 kLast_OpType = kSetMatrix_OpType
50 };
51
52 static const int kOpTypeCount = kLast_OpType + 1;
53
54 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000055
56 virtual ~SkDrawCommand();
57
fmalita8c89c522014-11-08 16:18:56 -080058 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000059
fmalita8c89c522014-11-08 16:18:56 -080060 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080061 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000062 }
63
chudy@google.com0b5bbb02012-07-31 19:55:32 +000064 bool isVisible() const {
65 return fVisible;
66 }
67
68 void setVisible(bool toggle) {
69 fVisible = toggle;
70 }
chudy@google.com902ebe52012-06-29 14:21:22 +000071
fmalita8c89c522014-11-08 16:18:56 -080072 const SkTDArray<SkString*>* Info() const { return &fInfo; }
73 virtual void execute(SkCanvas*) const = 0;
74 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070075
fmalita8c89c522014-11-08 16:18:56 -080076 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070077
mtkleinf0f14112014-12-12 08:46:25 -080078 // The next "active" system is only used by save, saveLayer, and restore.
79 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000080 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000081 // saves just return a kPushLayer action but don't track active state
82 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000083 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000084 enum Action {
85 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000086 kPopLayer_Action,
87 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000088 };
89 virtual Action action() const { return kNone_Action; }
90 virtual void setActive(bool active) {}
91 virtual bool active() const { return false; }
92
robertphillips9bafc302015-02-13 11:13:00 -080093 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +000094
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000095 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +000096
robertphillips9bafc302015-02-13 11:13:00 -080097 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +000098
chudy@google.com902ebe52012-06-29 14:21:22 +000099protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000100 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000101
102private:
robertphillips9bafc302015-02-13 11:13:00 -0800103 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000104 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000105};
106
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000107class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000108public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000109 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700110 void execute(SkCanvas* canvas) const override;
111 Action action() const override { return kPopLayer_Action; }
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000112
113private:
114 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000115};
116
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000117class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000118public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000119 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700120 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000121private:
122 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000123
124 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000125};
126
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000127class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000128public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000129 SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700130 void execute(SkCanvas* canvas) const override;
131 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000132private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000133 SkPath fPath;
chudy@google.com902ebe52012-06-29 14:21:22 +0000134 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000135 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000136
137 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000138};
139
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000140class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000141public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000142 SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
mtklein36352bf2015-03-25 18:17:31 -0700143 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000144private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000145 SkRegion fRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000146 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000147
148 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000149};
150
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000151class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000152public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000153 SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700154 void execute(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000155
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000156 const SkRect& rect() const { return fRect; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000157 SkRegion::Op op() const { return fOp; }
158 bool doAA() const { return fDoAA; }
159
chudy@google.com902ebe52012-06-29 14:21:22 +0000160private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000161 SkRect fRect;
chudy@google.com902ebe52012-06-29 14:21:22 +0000162 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000163 bool fDoAA;
164
165 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000166};
167
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000168class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000169public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000170 SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700171 void execute(SkCanvas* canvas) const override;
172 bool render(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000173
174 const SkRRect& rrect() const { return fRRect; }
175 SkRegion::Op op() const { return fOp; }
176 bool doAA() const { return fDoAA; }
177
robertphillips@google.com67baba42013-01-02 20:20:31 +0000178private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000179 SkRRect fRRect;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000180 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000181 bool fDoAA;
182
183 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000184};
185
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000186class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000187public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000188 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700189 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000190private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000191 SkMatrix fMatrix;
192
193 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000194};
195
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000196class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000197public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000198 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000199 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700200 void execute(SkCanvas* canvas) const override;
201 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000202private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000203 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000204 SkScalar fLeft;
205 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000206 SkPaint fPaint;
207 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000208
209 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000210};
211
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000212class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000213public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000214 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000215 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700216 void execute(SkCanvas* canvas) const override;
217 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000218private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000219 SkBitmap fBitmap;
220 SkIRect fCenter;
221 SkRect fDst;
222 SkPaint fPaint;
223 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000224
225 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000226};
227
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000228class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000229public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000230 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000231 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700232 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700233 void execute(SkCanvas* canvas) const override;
234 bool render(SkCanvas* canvas) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000235
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000236 const SkBitmap& bitmap() const { return fBitmap; }
237
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000238 // The non-const 'paint' method allows modification of this object's
239 // SkPaint. For this reason the ctor and setPaint method make a local copy.
240 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
241 // (since only an SkPaint* is passed into the ctor).
242 const SkPaint* paint() const { return fPaintPtr; }
243 SkPaint* paint() { return fPaintPtr; }
244
245 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
246
robertphillips@google.com91217d02013-03-17 18:33:46 +0000247 const SkRect* srcRect() const { return fSrc.isEmpty() ? NULL : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000248 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000249
250 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000251 void setDstRect(const SkRect& dst) { fDst = dst; }
252
reeda5517e22015-07-14 10:54:12 -0700253 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
254 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000255
chudy@google.com902ebe52012-06-29 14:21:22 +0000256private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000257 SkBitmap fBitmap;
258 SkRect fSrc;
259 SkRect fDst;
260 SkPaint fPaint;
261 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700262 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000263
264 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000265};
266
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000267class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000268public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000269 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700270 void execute(SkCanvas* canvas) const override;
271 bool render(SkCanvas* canvas) const override;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000272private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000273 SkRect fOval;
274 SkPaint fPaint;
275
276 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000277};
278
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000279class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000280public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000281 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700282 void execute(SkCanvas* canvas) const override;
283 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000284private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000285 SkPaint fPaint;
286
287 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000288};
289
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000290class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000291public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000292 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700293 void execute(SkCanvas* canvas) const override;
294 bool render(SkCanvas* canvas) const override;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000295
chudy@google.com902ebe52012-06-29 14:21:22 +0000296private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000297 SkPath fPath;
298 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000299
300 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000301};
302
fmalita160ebb22015-04-01 20:58:37 -0700303class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000304public:
fmalita160ebb22015-04-01 20:58:37 -0700305 SkBeginDrawPictureCommand(const SkPicture* picture,
306 const SkMatrix* matrix,
307 const SkPaint* paint);
308
mtklein36352bf2015-03-25 18:17:31 -0700309 void execute(SkCanvas* canvas) const override;
310 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000311
chudy@google.com902ebe52012-06-29 14:21:22 +0000312private:
robertphillips9b14f262014-06-04 05:40:44 -0700313 SkAutoTUnref<const SkPicture> fPicture;
fmalita160ebb22015-04-01 20:58:37 -0700314 SkTLazy<SkMatrix> fMatrix;
315 SkTLazy<SkPaint> fPaint;
316
317 typedef SkDrawCommand INHERITED;
318};
319
320class SkEndDrawPictureCommand : public SkDrawCommand {
321public:
322 SkEndDrawPictureCommand(bool restore);
323
324 void execute(SkCanvas* canvas) const override;
325
326private:
327 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000328
329 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000330};
331
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000332class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000333public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000334 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000335 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000336 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700337 void execute(SkCanvas* canvas) const override;
338 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000339private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000340 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000341 size_t fCount;
342 SkPoint* fPts;
343 SkPaint fPaint;
344
345 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000346};
347
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000348class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000349public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000350 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000351 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000352 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700353 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000354private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000355 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000356 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000357 SkScalar fX;
358 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000359 SkPaint fPaint;
360
361 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000362};
363
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000364class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000365public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000366 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
367 const SkPaint& paint);
368 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700369 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000370private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000371 char* fText;
372 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000373 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000374 SkPaint fPaint;
375
376 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000377};
378
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000379class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000380public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000381 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
382 const SkMatrix* matrix, const SkPaint& paint);
383 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700384 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000385private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000386 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000387 size_t fByteLength;
388 SkPath fPath;
389 SkMatrix fMatrix;
390 SkPaint fPaint;
391
392 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000393};
394
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000395class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000396public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000397 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
398 SkScalar constY, const SkPaint& paint);
399 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700400 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000401private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000402 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000403 char* fText;
404 size_t fByteLength;
405 SkScalar fConstY;
406 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000407
408 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000409};
410
fmalitab7425172014-08-26 07:56:44 -0700411class SkDrawTextBlobCommand : public SkDrawCommand {
412public:
413 SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);
414
mtklein36352bf2015-03-25 18:17:31 -0700415 void execute(SkCanvas* canvas) const override;
416 bool render(SkCanvas* canvas) const override;
fmalitab7425172014-08-26 07:56:44 -0700417
418private:
419 SkAutoTUnref<const SkTextBlob> fBlob;
420 SkScalar fXPos;
421 SkScalar fYPos;
422 SkPaint fPaint;
423
424 typedef SkDrawCommand INHERITED;
425};
426
robertphillips9bafc302015-02-13 11:13:00 -0800427class SkDrawPatchCommand : public SkDrawCommand {
428public:
429 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
430 const SkPoint texCoords[4], SkXfermode* xmode,
431 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700432 void execute(SkCanvas* canvas) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800433
434private:
435 SkPoint fCubics[12];
436 SkColor fColors[4];
437 SkPoint fTexCoords[4];
438 SkAutoTUnref<SkXfermode> fXfermode;
439 SkPaint fPaint;
440
441 typedef SkDrawCommand INHERITED;
442};
443
444
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000445class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000446public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000447 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700448 void execute(SkCanvas* canvas) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000449
robertphillips@google.com91217d02013-03-17 18:33:46 +0000450 const SkRect& rect() const { return fRect; }
451 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000452private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000453 SkRect fRect;
454 SkPaint fPaint;
455
456 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000457};
458
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000459class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000460public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000461 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700462 void execute(SkCanvas* canvas) const override;
463 bool render(SkCanvas* canvas) const override;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000464private:
465 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000466 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000467
468 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000469};
470
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000471class SkDrawDRRectCommand : public SkDrawCommand {
472public:
473 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
474 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700475 void execute(SkCanvas* canvas) const override;
476 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000477private:
478 SkRRect fOuter;
479 SkRRect fInner;
480 SkPaint fPaint;
481
482 typedef SkDrawCommand INHERITED;
483};
484
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000485class SkDrawSpriteCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000486public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000487 SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700488 void execute(SkCanvas* canvas) const override;
489 bool render(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000490private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000491 SkBitmap fBitmap;
492 int fLeft;
493 int fTop;
494 SkPaint fPaint;
495 SkPaint* fPaintPtr;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000496
497 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000498};
499
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000500class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000501public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000502 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
503 const SkPoint vertices[], const SkPoint texs[],
504 const SkColor colors[], SkXfermode* xfermode,
505 const uint16_t indices[], int indexCount,
506 const SkPaint& paint);
507 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700508 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000509private:
510 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000511 int fVertexCount;
512 SkPoint* fVertices;
513 SkPoint* fTexs;
514 SkColor* fColors;
chudy@google.com902ebe52012-06-29 14:21:22 +0000515 SkXfermode* fXfermode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000516 uint16_t* fIndices;
517 int fIndexCount;
518 SkPaint fPaint;
519
520 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000521};
522
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000523class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000524public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400525 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700526 void execute(SkCanvas* canvas) const override;
527 Action action() const override { return kPushLayer_Action; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000528private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000529 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000530};
531
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000532class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000533public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000534 SkSaveLayerCommand(const SkRect* bounds, const SkPaint* paint,
535 SkCanvas::SaveFlags flags);
mtklein36352bf2015-03-25 18:17:31 -0700536 void execute(SkCanvas* canvas) const override;
537 void vizExecute(SkCanvas* canvas) const override;
538 Action action() const override{ return kPushLayer_Action; }
539 void setActive(bool active) override { fActive = active; }
540 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000541
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000542 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000543
chudy@google.com902ebe52012-06-29 14:21:22 +0000544private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000545 SkRect fBounds;
546 SkPaint fPaint;
547 SkPaint* fPaintPtr;
chudy@google.com902ebe52012-06-29 14:21:22 +0000548 SkCanvas::SaveFlags fFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000549
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000550 bool fActive;
551
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000552 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000553};
554
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000555class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000556public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000557 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700558 void setUserMatrix(const SkMatrix&) override;
559 void execute(SkCanvas* canvas) const override;
chudy@google.com902ebe52012-06-29 14:21:22 +0000560private:
robertphillips70171682014-10-16 14:28:28 -0700561 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000562 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000563
564 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000565};
566
chudy@google.com902ebe52012-06-29 14:21:22 +0000567#endif