blob: e23eed138c7830eb220edb5a0fc356e6cca73e65 [file] [log] [blame]
chudy@google.com902ebe52012-06-29 14:21:22 +00001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SKDRAWCOMMAND_H_
9#define SKDRAWCOMMAND_H_
10
chudy@google.com902ebe52012-06-29 14:21:22 +000011#include "SkCanvas.h"
bungemand3ebb482015-08-05 13:57:49 -070012#include "SkTLazy.h"
13#include "SkPath.h"
Mike Reed267be7f2017-02-13 09:32:54 -050014#include "SkRegion.h"
bungemand3ebb482015-08-05 13:57:49 -070015#include "SkRRect.h"
reed45561a02016-07-07 12:47:17 -070016#include "SkRSXform.h"
robertphillips@google.com0a4805e2013-05-29 13:24:23 +000017#include "SkString.h"
bungemand3ebb482015-08-05 13:57:49 -070018#include "SkTDArray.h"
Mike Reedfed9cfd2017-03-17 12:09:04 -040019#include "SkVertices.h"
ethannicholas50a8dd02016-02-10 05:40:46 -080020#include "SkJSONCPP.h"
ethannicholasf62a8b72016-02-11 10:35:21 -080021#include "UrlDataManager.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000022
Mike Klein0f61faa2016-10-11 16:26:57 -040023class SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000024public:
robertphillips9bafc302015-02-13 11:13:00 -080025 enum OpType {
fmalita160ebb22015-04-01 20:58:37 -070026 kBeginDrawPicture_OpType,
vjiaoblack95302da2016-07-21 10:25:54 -070027 kBeginDrawShadowedPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080028 kClipPath_OpType,
29 kClipRegion_OpType,
30 kClipRect_OpType,
31 kClipRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080032 kConcat_OpType,
reed97660cc2016-06-28 18:54:19 -070033 kDrawAnnotation_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080034 kDrawBitmap_OpType,
35 kDrawBitmapNine_OpType,
36 kDrawBitmapRect_OpType,
37 kDrawClear_OpType,
38 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070039 kDrawImage_OpType,
Stan Ilievac42aeb2017-01-12 16:20:50 -050040 kDrawImageLattice_OpType,
fmalita651c9202015-07-22 10:23:01 -070041 kDrawImageRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080042 kDrawOval_OpType,
43 kDrawPaint_OpType,
44 kDrawPatch_OpType,
45 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080046 kDrawPoints_OpType,
47 kDrawPosText_OpType,
48 kDrawPosTextH_OpType,
49 kDrawRect_OpType,
50 kDrawRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080051 kDrawText_OpType,
52 kDrawTextBlob_OpType,
53 kDrawTextOnPath_OpType,
reed45561a02016-07-07 12:47:17 -070054 kDrawTextRSXform_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080055 kDrawVertices_OpType,
fmalita160ebb22015-04-01 20:58:37 -070056 kEndDrawPicture_OpType,
vjiaoblack95302da2016-07-21 10:25:54 -070057 kEndDrawShadowedPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080058 kRestore_OpType,
59 kSave_OpType,
60 kSaveLayer_OpType,
61 kSetMatrix_OpType,
vjiaoblacke5de1302016-07-13 14:05:28 -070062 kTranslateZ_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080063
vjiaoblacke5de1302016-07-13 14:05:28 -070064 kLast_OpType = kTranslateZ_OpType
robertphillips9bafc302015-02-13 11:13:00 -080065 };
66
67 static const int kOpTypeCount = kLast_OpType + 1;
68
halcanarya73d76a2016-10-17 13:19:02 -070069 static void WritePNG(const uint8_t* rgba, unsigned width, unsigned height,
msaretta5cf4f42016-06-30 10:06:51 -070070 SkWStream& out, bool isOpaque);
ethannicholasf67531f2016-03-21 10:19:39 -070071
robertphillips9bafc302015-02-13 11:13:00 -080072 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000073
74 virtual ~SkDrawCommand();
75
fmalita8c89c522014-11-08 16:18:56 -080076 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000077
fmalita8c89c522014-11-08 16:18:56 -080078 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080079 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000080 }
81
chudy@google.com0b5bbb02012-07-31 19:55:32 +000082 bool isVisible() const {
83 return fVisible;
84 }
85
86 void setVisible(bool toggle) {
87 fVisible = toggle;
88 }
chudy@google.com902ebe52012-06-29 14:21:22 +000089
fmalita8c89c522014-11-08 16:18:56 -080090 const SkTDArray<SkString*>* Info() const { return &fInfo; }
91 virtual void execute(SkCanvas*) const = 0;
92 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070093
fmalita8c89c522014-11-08 16:18:56 -080094 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070095
mtkleinf0f14112014-12-12 08:46:25 -080096 // The next "active" system is only used by save, saveLayer, and restore.
97 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000098 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000099 // saves just return a kPushLayer action but don't track active state
100 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +0000101 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000102 enum Action {
103 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +0000104 kPopLayer_Action,
105 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000106 };
107 virtual Action action() const { return kNone_Action; }
108 virtual void setActive(bool active) {}
109 virtual bool active() const { return false; }
110
robertphillips9bafc302015-02-13 11:13:00 -0800111 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000112
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000113 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000114
ethannicholasf62a8b72016-02-11 10:35:21 -0800115 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -0800116
117 /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
118 * is the caller's responsibility to delete this object. This method may return null if an error
119 * occurs.
120 */
ethannicholasf62a8b72016-02-11 10:35:21 -0800121 static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800122
robertphillips9bafc302015-02-13 11:13:00 -0800123 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000124
joshualittbd724132016-03-03 11:39:38 -0800125 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -0700126 static Json::Value MakeJsonColor(const SkColor color);
brianosman97bbf822016-09-25 13:15:58 -0700127 static Json::Value MakeJsonColor4f(const SkColor4f& color);
brianosmanfad98562016-05-04 11:06:28 -0700128 static Json::Value MakeJsonPoint(const SkPoint& point);
129 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
130 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800131 static Json::Value MakeJsonIRect(const SkIRect&);
132 static Json::Value MakeJsonMatrix(const SkMatrix&);
vjiaoblacke5de1302016-07-13 14:05:28 -0700133 static Json::Value MakeJsonScalar(SkScalar);
brianosmanfad98562016-05-04 11:06:28 -0700134 static Json::Value MakeJsonPath(const SkPath& path);
135 static Json::Value MakeJsonRegion(const SkRegion& region);
136 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500137 static Json::Value MakeJsonLattice(const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700138
139 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
140 UrlDataManager& urlDataManager);
141 static bool flatten(const SkImage& image, Json::Value* target,
142 UrlDataManager& urlDataManager);
143 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
144 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800145
chudy@google.com902ebe52012-06-29 14:21:22 +0000146protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000147 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000148
149private:
robertphillips9bafc302015-02-13 11:13:00 -0800150 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000151 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000152};
153
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000154class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000155public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000156 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700157 void execute(SkCanvas* canvas) const override;
158 Action action() const override { return kPopLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800159 static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000160
161private:
162 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000163};
164
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000165class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000166public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000167 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700168 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800169 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
170 static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800171
chudy@google.com902ebe52012-06-29 14:21:22 +0000172private:
173 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000174
175 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000176};
177
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000178class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000179public:
Mike Reedc1f77742016-12-09 09:00:50 -0500180 SkClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700181 void execute(SkCanvas* canvas) const override;
182 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800183 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
184 static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800185
chudy@google.com902ebe52012-06-29 14:21:22 +0000186private:
Mike Reedc1f77742016-12-09 09:00:50 -0500187 SkPath fPath;
188 SkClipOp fOp;
189 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000190
191 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000192};
193
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000194class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000195public:
Mike Reedc1f77742016-12-09 09:00:50 -0500196 SkClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700197 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800198 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
199 static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800200
chudy@google.com902ebe52012-06-29 14:21:22 +0000201private:
Mike Reedc1f77742016-12-09 09:00:50 -0500202 SkRegion fRegion;
203 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000204
205 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000206};
207
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000208class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000209public:
Mike Reedc1f77742016-12-09 09:00:50 -0500210 SkClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700211 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800212 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
213 static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000214
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000215 const SkRect& rect() const { return fRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500216 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000217 bool doAA() const { return fDoAA; }
218
chudy@google.com902ebe52012-06-29 14:21:22 +0000219private:
Mike Reedc1f77742016-12-09 09:00:50 -0500220 SkRect fRect;
221 SkClipOp fOp;
222 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000223
224 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000225};
226
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000227class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000228public:
Mike Reedc1f77742016-12-09 09:00:50 -0500229 SkClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700230 void execute(SkCanvas* canvas) const override;
231 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800232 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
233 static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000234
235 const SkRRect& rrect() const { return fRRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500236 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000237 bool doAA() const { return fDoAA; }
238
robertphillips@google.com67baba42013-01-02 20:20:31 +0000239private:
Mike Reedc1f77742016-12-09 09:00:50 -0500240 SkRRect fRRect;
241 SkClipOp fOp;
242 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000243
244 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000245};
246
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000247class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000248public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000249 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700250 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800251 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
252 static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800253
chudy@google.com902ebe52012-06-29 14:21:22 +0000254private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000255 SkMatrix fMatrix;
256
257 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000258};
259
reed97660cc2016-06-28 18:54:19 -0700260class SkDrawAnnotationCommand : public SkDrawCommand {
261public:
262 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
263 void execute(SkCanvas* canvas) const override;
264 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
265 static SkDrawAnnotationCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
266
267private:
268 SkRect fRect;
269 SkString fKey;
270 sk_sp<SkData> fValue;
271
272 typedef SkDrawCommand INHERITED;
273};
274
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000275class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000276public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000277 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000278 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700279 void execute(SkCanvas* canvas) const override;
280 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800281 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
282 static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800283
chudy@google.com902ebe52012-06-29 14:21:22 +0000284private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000285 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000286 SkScalar fLeft;
287 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000288 SkPaint fPaint;
289 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000290
291 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000292};
293
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000294class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000295public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000296 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000297 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700298 void execute(SkCanvas* canvas) const override;
299 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800300 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
301 static SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800302
chudy@google.com902ebe52012-06-29 14:21:22 +0000303private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000304 SkBitmap fBitmap;
305 SkIRect fCenter;
306 SkRect fDst;
307 SkPaint fPaint;
308 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000309
310 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000311};
312
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000313class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000314public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000315 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000316 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700317 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700318 void execute(SkCanvas* canvas) const override;
319 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800320 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
321 static SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000322
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000323 const SkBitmap& bitmap() const { return fBitmap; }
324
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000325 // The non-const 'paint' method allows modification of this object's
326 // SkPaint. For this reason the ctor and setPaint method make a local copy.
327 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
328 // (since only an SkPaint* is passed into the ctor).
329 const SkPaint* paint() const { return fPaintPtr; }
330 SkPaint* paint() { return fPaintPtr; }
331
332 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
333
halcanary96fcdcc2015-08-27 07:41:13 -0700334 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000335 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000336
337 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000338 void setDstRect(const SkRect& dst) { fDst = dst; }
339
reeda5517e22015-07-14 10:54:12 -0700340 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
341 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000342
chudy@google.com902ebe52012-06-29 14:21:22 +0000343private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000344 SkBitmap fBitmap;
345 SkRect fSrc;
346 SkRect fDst;
347 SkPaint fPaint;
348 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700349 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000350
351 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000352};
353
fmalita651c9202015-07-22 10:23:01 -0700354class SkDrawImageCommand : public SkDrawCommand {
355public:
356 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
357 void execute(SkCanvas* canvas) const override;
358 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800359 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
360 static SkDrawImageCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800361
fmalita651c9202015-07-22 10:23:01 -0700362private:
Hal Canary1b612a82016-11-03 16:26:13 -0400363 sk_sp<const SkImage> fImage;
364 SkScalar fLeft;
365 SkScalar fTop;
366 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700367
368 typedef SkDrawCommand INHERITED;
369};
370
Stan Ilievac42aeb2017-01-12 16:20:50 -0500371class SkDrawImageLatticeCommand : public SkDrawCommand {
372public:
373 SkDrawImageLatticeCommand(const SkImage* image, const SkCanvas::Lattice& lattice,
374 const SkRect& dst, const SkPaint* paint);
375 void execute(SkCanvas* canvas) const override;
376 bool render(SkCanvas* canvas) const override;
377 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
378
379private:
380 sk_sp<const SkImage> fImage;
381 SkCanvas::Lattice fLattice;
382 SkRect fDst;
383 SkTLazy<SkPaint> fPaint;
384
385 typedef SkDrawCommand INHERITED;
386};
387
fmalita651c9202015-07-22 10:23:01 -0700388class SkDrawImageRectCommand : public SkDrawCommand {
389public:
390 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
391 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
392 void execute(SkCanvas* canvas) const override;
393 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800394 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
395 static SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800396
fmalita651c9202015-07-22 10:23:01 -0700397private:
Hal Canary1b612a82016-11-03 16:26:13 -0400398 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700399 SkTLazy<SkRect> fSrc;
400 SkRect fDst;
401 SkTLazy<SkPaint> fPaint;
402 SkCanvas::SrcRectConstraint fConstraint;
403
404 typedef SkDrawCommand INHERITED;
405};
406
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000407class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000408public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000409 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700410 void execute(SkCanvas* canvas) const override;
411 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800412 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
413 static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800414
robertphillips@google.com67baba42013-01-02 20:20:31 +0000415private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000416 SkRect fOval;
417 SkPaint fPaint;
418
419 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000420};
421
bsalomonac3aa242016-08-19 11:25:19 -0700422class SkDrawArcCommand : public SkDrawCommand {
423public:
424 SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
425 const SkPaint& paint);
426 void execute(SkCanvas* canvas) const override;
427 bool render(SkCanvas* canvas) const override;
428 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
429 static SkDrawArcCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
430
431private:
432 SkRect fOval;
433 SkScalar fStartAngle;
434 SkScalar fSweepAngle;
435 bool fUseCenter;
436 SkPaint fPaint;
437
438 typedef SkDrawCommand INHERITED;
439};
440
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000441class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000442public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000443 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700444 void execute(SkCanvas* canvas) const override;
445 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800446 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
447 static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800448
chudy@google.com902ebe52012-06-29 14:21:22 +0000449private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000450 SkPaint fPaint;
451
452 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000453};
454
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000455class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000456public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000457 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700458 void execute(SkCanvas* canvas) const override;
459 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800460 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
461 static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000462
chudy@google.com902ebe52012-06-29 14:21:22 +0000463private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000464 SkPath fPath;
465 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000466
467 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000468};
469
fmalita160ebb22015-04-01 20:58:37 -0700470class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000471public:
fmalita160ebb22015-04-01 20:58:37 -0700472 SkBeginDrawPictureCommand(const SkPicture* picture,
473 const SkMatrix* matrix,
474 const SkPaint* paint);
475
mtklein36352bf2015-03-25 18:17:31 -0700476 void execute(SkCanvas* canvas) const override;
477 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000478
chudy@google.com902ebe52012-06-29 14:21:22 +0000479private:
Hal Canary1b612a82016-11-03 16:26:13 -0400480 sk_sp<const SkPicture> fPicture;
481 SkTLazy<SkMatrix> fMatrix;
482 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700483
484 typedef SkDrawCommand INHERITED;
485};
486
487class SkEndDrawPictureCommand : public SkDrawCommand {
488public:
489 SkEndDrawPictureCommand(bool restore);
490
491 void execute(SkCanvas* canvas) const override;
492
493private:
494 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000495
496 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000497};
498
vjiaoblack95302da2016-07-21 10:25:54 -0700499class SkBeginDrawShadowedPictureCommand : public SkDrawCommand {
500public:
501 SkBeginDrawShadowedPictureCommand(const SkPicture* picture,
502 const SkMatrix* matrix,
vjiaoblacke6f5d562016-08-25 06:30:23 -0700503 const SkPaint* paint,
504 const SkShadowParams& params);
vjiaoblack95302da2016-07-21 10:25:54 -0700505
506 void execute(SkCanvas* canvas) const override;
507 bool render(SkCanvas* canvas) const override;
508
509private:
Hal Canary1b612a82016-11-03 16:26:13 -0400510 sk_sp<const SkPicture> fPicture;
vjiaoblack95302da2016-07-21 10:25:54 -0700511 SkTLazy<SkMatrix> fMatrix;
512 SkTLazy<SkPaint> fPaint;
vjiaoblacke6f5d562016-08-25 06:30:23 -0700513#ifdef SK_EXPERIMENTAL_SHADOWING
514 SkShadowParams fShadowParams;
515#endif
vjiaoblack95302da2016-07-21 10:25:54 -0700516
517 typedef SkDrawCommand INHERITED;
518};
519
520class SkEndDrawShadowedPictureCommand : public SkDrawCommand {
521public:
522 SkEndDrawShadowedPictureCommand(bool restore);
523
524 void execute(SkCanvas* canvas) const override;
525
526private:
527 bool fRestore;
528
529 typedef SkDrawCommand INHERITED;
530};
531
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000532class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000533public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000534 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000535 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000536 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700537 void execute(SkCanvas* canvas) const override;
538 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800539 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
540 static SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800541
chudy@google.com902ebe52012-06-29 14:21:22 +0000542private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000543 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000544 size_t fCount;
545 SkPoint* fPts;
546 SkPaint fPaint;
547
548 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000549};
550
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000551class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000552public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000553 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000554 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000555 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700556 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800557 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
558 static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800559
chudy@google.com902ebe52012-06-29 14:21:22 +0000560private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000561 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000562 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000563 SkScalar fX;
564 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000565 SkPaint fPaint;
566
567 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000568};
569
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000570class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000571public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000572 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
573 const SkPaint& paint);
574 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700575 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800576 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
577 static SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800578
chudy@google.com902ebe52012-06-29 14:21:22 +0000579private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000580 char* fText;
581 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000582 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000583 SkPaint fPaint;
584
585 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000586};
587
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000588class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000589public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000590 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
591 const SkMatrix* matrix, const SkPaint& paint);
592 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700593 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800594 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
595 static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800596
chudy@google.com902ebe52012-06-29 14:21:22 +0000597private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000598 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000599 size_t fByteLength;
600 SkPath fPath;
601 SkMatrix fMatrix;
602 SkPaint fPaint;
603
604 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000605};
606
reed45561a02016-07-07 12:47:17 -0700607class SkDrawTextRSXformCommand : public SkDrawCommand {
608public:
609 SkDrawTextRSXformCommand(const void* text, size_t byteLength, const SkRSXform[],
610 const SkRect*, const SkPaint& paint);
611 ~SkDrawTextRSXformCommand() override { delete[] fText; delete[] fXform; }
612 void execute(SkCanvas* canvas) const override;
613 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
614 static SkDrawTextRSXformCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
615
616private:
617 char* fText;
618 size_t fByteLength;
619 SkRSXform* fXform;
620 SkRect* fCull;
621 SkRect fCullStorage;
622 SkPaint fPaint;
623
624 typedef SkDrawCommand INHERITED;
625};
626
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000627class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000628public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000629 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
630 SkScalar constY, const SkPaint& paint);
631 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700632 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800633 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
634 static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800635
chudy@google.com902ebe52012-06-29 14:21:22 +0000636private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000637 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000638 char* fText;
639 size_t fByteLength;
640 SkScalar fConstY;
641 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000642
643 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000644};
645
fmalitab7425172014-08-26 07:56:44 -0700646class SkDrawTextBlobCommand : public SkDrawCommand {
647public:
fmalita37283c22016-09-13 10:00:23 -0700648 SkDrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700649
mtklein36352bf2015-03-25 18:17:31 -0700650 void execute(SkCanvas* canvas) const override;
651 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800652 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
653 static SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
fmalitab7425172014-08-26 07:56:44 -0700654
655private:
fmalita37283c22016-09-13 10:00:23 -0700656 sk_sp<SkTextBlob> fBlob;
657 SkScalar fXPos;
658 SkScalar fYPos;
659 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700660
661 typedef SkDrawCommand INHERITED;
662};
663
robertphillips9bafc302015-02-13 11:13:00 -0800664class SkDrawPatchCommand : public SkDrawCommand {
665public:
666 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
Mike Reed7d954ad2016-10-28 15:42:34 -0400667 const SkPoint texCoords[4], SkBlendMode bmode,
robertphillips9bafc302015-02-13 11:13:00 -0800668 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700669 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800670 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
671 static SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips9bafc302015-02-13 11:13:00 -0800672
673private:
674 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800675 SkColor* fColorsPtr;
676 SkColor fColors[4];
677 SkPoint* fTexCoordsPtr;
678 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400679 SkBlendMode fBlendMode;
robertphillips9bafc302015-02-13 11:13:00 -0800680 SkPaint fPaint;
681
682 typedef SkDrawCommand INHERITED;
683};
684
685
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000686class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000687public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000688 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700689 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800690 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
691 static SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000692
robertphillips@google.com91217d02013-03-17 18:33:46 +0000693 const SkRect& rect() const { return fRect; }
694 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000695private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000696 SkRect fRect;
697 SkPaint fPaint;
698
699 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000700};
701
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000702class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000703public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000704 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700705 void execute(SkCanvas* canvas) const override;
706 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800707 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
708 static SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800709
robertphillips@google.com67baba42013-01-02 20:20:31 +0000710private:
711 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000712 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000713
714 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000715};
716
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000717class SkDrawDRRectCommand : public SkDrawCommand {
718public:
719 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
720 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700721 void execute(SkCanvas* canvas) const override;
722 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800723 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
724 static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800725
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000726private:
727 SkRRect fOuter;
728 SkRRect fInner;
729 SkPaint fPaint;
730
731 typedef SkDrawCommand INHERITED;
732};
733
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000734class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000735public:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400736 SkDrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
737
mtklein36352bf2015-03-25 18:17:31 -0700738 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800739
chudy@google.com902ebe52012-06-29 14:21:22 +0000740private:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400741 sk_sp<SkVertices> fVertices;
742 SkBlendMode fBlendMode;
743 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000744
745 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000746};
747
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000748class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000749public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400750 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700751 void execute(SkCanvas* canvas) const override;
752 Action action() const override { return kPushLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800753 static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800754
chudy@google.com902ebe52012-06-29 14:21:22 +0000755private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000756 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000757};
758
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000759class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000760public:
reed4960eee2015-12-18 07:09:18 -0800761 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
ethannicholas50a8dd02016-02-10 05:40:46 -0800762 virtual ~SkSaveLayerCommand();
mtklein36352bf2015-03-25 18:17:31 -0700763 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800764 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
765 static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
mtklein36352bf2015-03-25 18:17:31 -0700766 void vizExecute(SkCanvas* canvas) const override;
767 Action action() const override{ return kPushLayer_Action; }
768 void setActive(bool active) override { fActive = active; }
769 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000770
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000771 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000772
chudy@google.com902ebe52012-06-29 14:21:22 +0000773private:
ethannicholas50a8dd02016-02-10 05:40:46 -0800774 SkRect fBounds;
775 SkPaint fPaint;
776 SkPaint* fPaintPtr;
777 const SkImageFilter* fBackdrop;
778 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000779
reed4960eee2015-12-18 07:09:18 -0800780 bool fActive;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000781
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000782 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000783};
784
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000785class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000786public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000787 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700788 void setUserMatrix(const SkMatrix&) override;
789 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800790 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
791 static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800792
chudy@google.com902ebe52012-06-29 14:21:22 +0000793private:
robertphillips70171682014-10-16 14:28:28 -0700794 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000795 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000796
797 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000798};
799
vjiaoblacke5de1302016-07-13 14:05:28 -0700800class SkTranslateZCommand : public SkDrawCommand {
801public:
802 SkTranslateZCommand(SkScalar);
803 void execute(SkCanvas* canvas) const override;
804 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
805 static SkTranslateZCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
806
807private:
808 SkScalar fZTranslate;
809
810 typedef SkDrawCommand INHERITED;
811};
chudy@google.com902ebe52012-06-29 14:21:22 +0000812#endif
vjiaoblacke6f5d562016-08-25 06:30:23 -0700813