blob: 266fc99fad5eee287c8c08e343e767d23b2755ea [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"
14#include "SkRRect.h"
reed45561a02016-07-07 12:47:17 -070015#include "SkRSXform.h"
robertphillips@google.com0a4805e2013-05-29 13:24:23 +000016#include "SkString.h"
bungemand3ebb482015-08-05 13:57:49 -070017#include "SkTDArray.h"
ethannicholas50a8dd02016-02-10 05:40:46 -080018#include "SkJSONCPP.h"
ethannicholasf62a8b72016-02-11 10:35:21 -080019#include "UrlDataManager.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000020
Mike Klein0f61faa2016-10-11 16:26:57 -040021class SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000022public:
robertphillips9bafc302015-02-13 11:13:00 -080023 enum OpType {
fmalita160ebb22015-04-01 20:58:37 -070024 kBeginDrawPicture_OpType,
vjiaoblack95302da2016-07-21 10:25:54 -070025 kBeginDrawShadowedPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080026 kClipPath_OpType,
27 kClipRegion_OpType,
28 kClipRect_OpType,
29 kClipRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080030 kConcat_OpType,
reed97660cc2016-06-28 18:54:19 -070031 kDrawAnnotation_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080032 kDrawBitmap_OpType,
33 kDrawBitmapNine_OpType,
34 kDrawBitmapRect_OpType,
35 kDrawClear_OpType,
36 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070037 kDrawImage_OpType,
Stan Ilievac42aeb2017-01-12 16:20:50 -050038 kDrawImageLattice_OpType,
fmalita651c9202015-07-22 10:23:01 -070039 kDrawImageRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080040 kDrawOval_OpType,
41 kDrawPaint_OpType,
42 kDrawPatch_OpType,
43 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080044 kDrawPoints_OpType,
45 kDrawPosText_OpType,
46 kDrawPosTextH_OpType,
47 kDrawRect_OpType,
48 kDrawRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080049 kDrawText_OpType,
50 kDrawTextBlob_OpType,
51 kDrawTextOnPath_OpType,
reed45561a02016-07-07 12:47:17 -070052 kDrawTextRSXform_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080053 kDrawVertices_OpType,
fmalita160ebb22015-04-01 20:58:37 -070054 kEndDrawPicture_OpType,
vjiaoblack95302da2016-07-21 10:25:54 -070055 kEndDrawShadowedPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080056 kRestore_OpType,
57 kSave_OpType,
58 kSaveLayer_OpType,
59 kSetMatrix_OpType,
vjiaoblacke5de1302016-07-13 14:05:28 -070060 kTranslateZ_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080061
vjiaoblacke5de1302016-07-13 14:05:28 -070062 kLast_OpType = kTranslateZ_OpType
robertphillips9bafc302015-02-13 11:13:00 -080063 };
64
65 static const int kOpTypeCount = kLast_OpType + 1;
66
halcanarya73d76a2016-10-17 13:19:02 -070067 static void WritePNG(const uint8_t* rgba, unsigned width, unsigned height,
msaretta5cf4f42016-06-30 10:06:51 -070068 SkWStream& out, bool isOpaque);
ethannicholasf67531f2016-03-21 10:19:39 -070069
robertphillips9bafc302015-02-13 11:13:00 -080070 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000071
72 virtual ~SkDrawCommand();
73
fmalita8c89c522014-11-08 16:18:56 -080074 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000075
fmalita8c89c522014-11-08 16:18:56 -080076 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080077 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000078 }
79
chudy@google.com0b5bbb02012-07-31 19:55:32 +000080 bool isVisible() const {
81 return fVisible;
82 }
83
84 void setVisible(bool toggle) {
85 fVisible = toggle;
86 }
chudy@google.com902ebe52012-06-29 14:21:22 +000087
fmalita8c89c522014-11-08 16:18:56 -080088 const SkTDArray<SkString*>* Info() const { return &fInfo; }
89 virtual void execute(SkCanvas*) const = 0;
90 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070091
fmalita8c89c522014-11-08 16:18:56 -080092 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070093
mtkleinf0f14112014-12-12 08:46:25 -080094 // The next "active" system is only used by save, saveLayer, and restore.
95 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000096 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000097 // saves just return a kPushLayer action but don't track active state
98 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000099 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000100 enum Action {
101 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +0000102 kPopLayer_Action,
103 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000104 };
105 virtual Action action() const { return kNone_Action; }
106 virtual void setActive(bool active) {}
107 virtual bool active() const { return false; }
108
robertphillips9bafc302015-02-13 11:13:00 -0800109 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000110
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000111 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000112
ethannicholasf62a8b72016-02-11 10:35:21 -0800113 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -0800114
115 /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
116 * is the caller's responsibility to delete this object. This method may return null if an error
117 * occurs.
118 */
ethannicholasf62a8b72016-02-11 10:35:21 -0800119 static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800120
robertphillips9bafc302015-02-13 11:13:00 -0800121 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000122
joshualittbd724132016-03-03 11:39:38 -0800123 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -0700124 static Json::Value MakeJsonColor(const SkColor color);
brianosman97bbf822016-09-25 13:15:58 -0700125 static Json::Value MakeJsonColor4f(const SkColor4f& color);
brianosmanfad98562016-05-04 11:06:28 -0700126 static Json::Value MakeJsonPoint(const SkPoint& point);
127 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
128 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800129 static Json::Value MakeJsonIRect(const SkIRect&);
130 static Json::Value MakeJsonMatrix(const SkMatrix&);
vjiaoblacke5de1302016-07-13 14:05:28 -0700131 static Json::Value MakeJsonScalar(SkScalar);
brianosmanfad98562016-05-04 11:06:28 -0700132 static Json::Value MakeJsonPath(const SkPath& path);
133 static Json::Value MakeJsonRegion(const SkRegion& region);
134 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500135 static Json::Value MakeJsonLattice(const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700136
137 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
138 UrlDataManager& urlDataManager);
139 static bool flatten(const SkImage& image, Json::Value* target,
140 UrlDataManager& urlDataManager);
141 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
142 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800143
chudy@google.com902ebe52012-06-29 14:21:22 +0000144protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000145 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000146
147private:
robertphillips9bafc302015-02-13 11:13:00 -0800148 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000149 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000150};
151
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000152class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000153public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000154 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700155 void execute(SkCanvas* canvas) const override;
156 Action action() const override { return kPopLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800157 static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000158
159private:
160 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000161};
162
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000163class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000164public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000165 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700166 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800167 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
168 static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800169
chudy@google.com902ebe52012-06-29 14:21:22 +0000170private:
171 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000172
173 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000174};
175
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000176class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000177public:
Mike Reedc1f77742016-12-09 09:00:50 -0500178 SkClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700179 void execute(SkCanvas* canvas) const override;
180 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800181 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
182 static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800183
chudy@google.com902ebe52012-06-29 14:21:22 +0000184private:
Mike Reedc1f77742016-12-09 09:00:50 -0500185 SkPath fPath;
186 SkClipOp fOp;
187 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000188
189 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000190};
191
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000192class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000193public:
Mike Reedc1f77742016-12-09 09:00:50 -0500194 SkClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700195 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800196 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
197 static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800198
chudy@google.com902ebe52012-06-29 14:21:22 +0000199private:
Mike Reedc1f77742016-12-09 09:00:50 -0500200 SkRegion fRegion;
201 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000202
203 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000204};
205
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000206class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000207public:
Mike Reedc1f77742016-12-09 09:00:50 -0500208 SkClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700209 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800210 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
211 static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000212
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000213 const SkRect& rect() const { return fRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500214 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000215 bool doAA() const { return fDoAA; }
216
chudy@google.com902ebe52012-06-29 14:21:22 +0000217private:
Mike Reedc1f77742016-12-09 09:00:50 -0500218 SkRect fRect;
219 SkClipOp fOp;
220 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000221
222 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000223};
224
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000225class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000226public:
Mike Reedc1f77742016-12-09 09:00:50 -0500227 SkClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700228 void execute(SkCanvas* canvas) const override;
229 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800230 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
231 static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000232
233 const SkRRect& rrect() const { return fRRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500234 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000235 bool doAA() const { return fDoAA; }
236
robertphillips@google.com67baba42013-01-02 20:20:31 +0000237private:
Mike Reedc1f77742016-12-09 09:00:50 -0500238 SkRRect fRRect;
239 SkClipOp fOp;
240 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000241
242 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000243};
244
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000245class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000246public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000247 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700248 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800249 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
250 static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800251
chudy@google.com902ebe52012-06-29 14:21:22 +0000252private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000253 SkMatrix fMatrix;
254
255 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000256};
257
reed97660cc2016-06-28 18:54:19 -0700258class SkDrawAnnotationCommand : public SkDrawCommand {
259public:
260 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
261 void execute(SkCanvas* canvas) const override;
262 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
263 static SkDrawAnnotationCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
264
265private:
266 SkRect fRect;
267 SkString fKey;
268 sk_sp<SkData> fValue;
269
270 typedef SkDrawCommand INHERITED;
271};
272
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000273class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000274public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000275 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000276 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700277 void execute(SkCanvas* canvas) const override;
278 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800279 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
280 static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800281
chudy@google.com902ebe52012-06-29 14:21:22 +0000282private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000283 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000284 SkScalar fLeft;
285 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000286 SkPaint fPaint;
287 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000288
289 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000290};
291
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000292class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000293public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000294 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000295 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700296 void execute(SkCanvas* canvas) const override;
297 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800298 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
299 static SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800300
chudy@google.com902ebe52012-06-29 14:21:22 +0000301private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000302 SkBitmap fBitmap;
303 SkIRect fCenter;
304 SkRect fDst;
305 SkPaint fPaint;
306 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000307
308 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000309};
310
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000311class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000312public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000313 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000314 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700315 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700316 void execute(SkCanvas* canvas) const override;
317 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800318 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
319 static SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000320
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000321 const SkBitmap& bitmap() const { return fBitmap; }
322
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000323 // The non-const 'paint' method allows modification of this object's
324 // SkPaint. For this reason the ctor and setPaint method make a local copy.
325 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
326 // (since only an SkPaint* is passed into the ctor).
327 const SkPaint* paint() const { return fPaintPtr; }
328 SkPaint* paint() { return fPaintPtr; }
329
330 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
331
halcanary96fcdcc2015-08-27 07:41:13 -0700332 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000333 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000334
335 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000336 void setDstRect(const SkRect& dst) { fDst = dst; }
337
reeda5517e22015-07-14 10:54:12 -0700338 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
339 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000340
chudy@google.com902ebe52012-06-29 14:21:22 +0000341private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000342 SkBitmap fBitmap;
343 SkRect fSrc;
344 SkRect fDst;
345 SkPaint fPaint;
346 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700347 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000348
349 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000350};
351
fmalita651c9202015-07-22 10:23:01 -0700352class SkDrawImageCommand : public SkDrawCommand {
353public:
354 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
355 void execute(SkCanvas* canvas) const override;
356 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800357 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
358 static SkDrawImageCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800359
fmalita651c9202015-07-22 10:23:01 -0700360private:
Hal Canary1b612a82016-11-03 16:26:13 -0400361 sk_sp<const SkImage> fImage;
362 SkScalar fLeft;
363 SkScalar fTop;
364 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700365
366 typedef SkDrawCommand INHERITED;
367};
368
Stan Ilievac42aeb2017-01-12 16:20:50 -0500369class SkDrawImageLatticeCommand : public SkDrawCommand {
370public:
371 SkDrawImageLatticeCommand(const SkImage* image, const SkCanvas::Lattice& lattice,
372 const SkRect& dst, const SkPaint* paint);
373 void execute(SkCanvas* canvas) const override;
374 bool render(SkCanvas* canvas) const override;
375 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
376
377private:
378 sk_sp<const SkImage> fImage;
379 SkCanvas::Lattice fLattice;
380 SkRect fDst;
381 SkTLazy<SkPaint> fPaint;
382
383 typedef SkDrawCommand INHERITED;
384};
385
fmalita651c9202015-07-22 10:23:01 -0700386class SkDrawImageRectCommand : public SkDrawCommand {
387public:
388 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
389 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
390 void execute(SkCanvas* canvas) const override;
391 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800392 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
393 static SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800394
fmalita651c9202015-07-22 10:23:01 -0700395private:
Hal Canary1b612a82016-11-03 16:26:13 -0400396 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700397 SkTLazy<SkRect> fSrc;
398 SkRect fDst;
399 SkTLazy<SkPaint> fPaint;
400 SkCanvas::SrcRectConstraint fConstraint;
401
402 typedef SkDrawCommand INHERITED;
403};
404
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000405class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000406public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000407 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700408 void execute(SkCanvas* canvas) const override;
409 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800410 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
411 static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800412
robertphillips@google.com67baba42013-01-02 20:20:31 +0000413private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000414 SkRect fOval;
415 SkPaint fPaint;
416
417 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000418};
419
bsalomonac3aa242016-08-19 11:25:19 -0700420class SkDrawArcCommand : public SkDrawCommand {
421public:
422 SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
423 const SkPaint& paint);
424 void execute(SkCanvas* canvas) const override;
425 bool render(SkCanvas* canvas) const override;
426 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
427 static SkDrawArcCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
428
429private:
430 SkRect fOval;
431 SkScalar fStartAngle;
432 SkScalar fSweepAngle;
433 bool fUseCenter;
434 SkPaint fPaint;
435
436 typedef SkDrawCommand INHERITED;
437};
438
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000439class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000440public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000441 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700442 void execute(SkCanvas* canvas) const override;
443 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800444 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
445 static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800446
chudy@google.com902ebe52012-06-29 14:21:22 +0000447private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000448 SkPaint fPaint;
449
450 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000451};
452
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000453class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000454public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000455 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700456 void execute(SkCanvas* canvas) const override;
457 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800458 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
459 static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000460
chudy@google.com902ebe52012-06-29 14:21:22 +0000461private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000462 SkPath fPath;
463 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000464
465 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000466};
467
fmalita160ebb22015-04-01 20:58:37 -0700468class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000469public:
fmalita160ebb22015-04-01 20:58:37 -0700470 SkBeginDrawPictureCommand(const SkPicture* picture,
471 const SkMatrix* matrix,
472 const SkPaint* paint);
473
mtklein36352bf2015-03-25 18:17:31 -0700474 void execute(SkCanvas* canvas) const override;
475 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000476
chudy@google.com902ebe52012-06-29 14:21:22 +0000477private:
Hal Canary1b612a82016-11-03 16:26:13 -0400478 sk_sp<const SkPicture> fPicture;
479 SkTLazy<SkMatrix> fMatrix;
480 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700481
482 typedef SkDrawCommand INHERITED;
483};
484
485class SkEndDrawPictureCommand : public SkDrawCommand {
486public:
487 SkEndDrawPictureCommand(bool restore);
488
489 void execute(SkCanvas* canvas) const override;
490
491private:
492 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000493
494 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000495};
496
vjiaoblack95302da2016-07-21 10:25:54 -0700497class SkBeginDrawShadowedPictureCommand : public SkDrawCommand {
498public:
499 SkBeginDrawShadowedPictureCommand(const SkPicture* picture,
500 const SkMatrix* matrix,
vjiaoblacke6f5d562016-08-25 06:30:23 -0700501 const SkPaint* paint,
502 const SkShadowParams& params);
vjiaoblack95302da2016-07-21 10:25:54 -0700503
504 void execute(SkCanvas* canvas) const override;
505 bool render(SkCanvas* canvas) const override;
506
507private:
Hal Canary1b612a82016-11-03 16:26:13 -0400508 sk_sp<const SkPicture> fPicture;
vjiaoblack95302da2016-07-21 10:25:54 -0700509 SkTLazy<SkMatrix> fMatrix;
510 SkTLazy<SkPaint> fPaint;
vjiaoblacke6f5d562016-08-25 06:30:23 -0700511#ifdef SK_EXPERIMENTAL_SHADOWING
512 SkShadowParams fShadowParams;
513#endif
vjiaoblack95302da2016-07-21 10:25:54 -0700514
515 typedef SkDrawCommand INHERITED;
516};
517
518class SkEndDrawShadowedPictureCommand : public SkDrawCommand {
519public:
520 SkEndDrawShadowedPictureCommand(bool restore);
521
522 void execute(SkCanvas* canvas) const override;
523
524private:
525 bool fRestore;
526
527 typedef SkDrawCommand INHERITED;
528};
529
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000530class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000531public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000532 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000533 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000534 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700535 void execute(SkCanvas* canvas) const override;
536 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800537 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
538 static SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800539
chudy@google.com902ebe52012-06-29 14:21:22 +0000540private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000541 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000542 size_t fCount;
543 SkPoint* fPts;
544 SkPaint fPaint;
545
546 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000547};
548
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000549class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000550public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000551 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000552 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000553 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700554 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800555 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
556 static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800557
chudy@google.com902ebe52012-06-29 14:21:22 +0000558private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000559 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000560 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000561 SkScalar fX;
562 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000563 SkPaint fPaint;
564
565 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000566};
567
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000568class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000569public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000570 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
571 const SkPaint& paint);
572 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700573 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800574 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
575 static SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800576
chudy@google.com902ebe52012-06-29 14:21:22 +0000577private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000578 char* fText;
579 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000580 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000581 SkPaint fPaint;
582
583 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000584};
585
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000586class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000587public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000588 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
589 const SkMatrix* matrix, const SkPaint& paint);
590 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700591 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800592 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
593 static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800594
chudy@google.com902ebe52012-06-29 14:21:22 +0000595private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000596 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000597 size_t fByteLength;
598 SkPath fPath;
599 SkMatrix fMatrix;
600 SkPaint fPaint;
601
602 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000603};
604
reed45561a02016-07-07 12:47:17 -0700605class SkDrawTextRSXformCommand : public SkDrawCommand {
606public:
607 SkDrawTextRSXformCommand(const void* text, size_t byteLength, const SkRSXform[],
608 const SkRect*, const SkPaint& paint);
609 ~SkDrawTextRSXformCommand() override { delete[] fText; delete[] fXform; }
610 void execute(SkCanvas* canvas) const override;
611 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
612 static SkDrawTextRSXformCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
613
614private:
615 char* fText;
616 size_t fByteLength;
617 SkRSXform* fXform;
618 SkRect* fCull;
619 SkRect fCullStorage;
620 SkPaint fPaint;
621
622 typedef SkDrawCommand INHERITED;
623};
624
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000625class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000626public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000627 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
628 SkScalar constY, const SkPaint& paint);
629 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700630 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800631 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
632 static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800633
chudy@google.com902ebe52012-06-29 14:21:22 +0000634private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000635 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000636 char* fText;
637 size_t fByteLength;
638 SkScalar fConstY;
639 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000640
641 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000642};
643
fmalitab7425172014-08-26 07:56:44 -0700644class SkDrawTextBlobCommand : public SkDrawCommand {
645public:
fmalita37283c22016-09-13 10:00:23 -0700646 SkDrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700647
mtklein36352bf2015-03-25 18:17:31 -0700648 void execute(SkCanvas* canvas) const override;
649 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800650 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
651 static SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
fmalitab7425172014-08-26 07:56:44 -0700652
653private:
fmalita37283c22016-09-13 10:00:23 -0700654 sk_sp<SkTextBlob> fBlob;
655 SkScalar fXPos;
656 SkScalar fYPos;
657 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700658
659 typedef SkDrawCommand INHERITED;
660};
661
robertphillips9bafc302015-02-13 11:13:00 -0800662class SkDrawPatchCommand : public SkDrawCommand {
663public:
664 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
Mike Reed7d954ad2016-10-28 15:42:34 -0400665 const SkPoint texCoords[4], SkBlendMode bmode,
robertphillips9bafc302015-02-13 11:13:00 -0800666 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700667 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800668 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
669 static SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips9bafc302015-02-13 11:13:00 -0800670
671private:
672 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800673 SkColor* fColorsPtr;
674 SkColor fColors[4];
675 SkPoint* fTexCoordsPtr;
676 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400677 SkBlendMode fBlendMode;
robertphillips9bafc302015-02-13 11:13:00 -0800678 SkPaint fPaint;
679
680 typedef SkDrawCommand INHERITED;
681};
682
683
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000684class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000685public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000686 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700687 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800688 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
689 static SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000690
robertphillips@google.com91217d02013-03-17 18:33:46 +0000691 const SkRect& rect() const { return fRect; }
692 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000693private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000694 SkRect fRect;
695 SkPaint fPaint;
696
697 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000698};
699
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000700class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000701public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000702 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700703 void execute(SkCanvas* canvas) const override;
704 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800705 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
706 static SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800707
robertphillips@google.com67baba42013-01-02 20:20:31 +0000708private:
709 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000710 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000711
712 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000713};
714
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000715class SkDrawDRRectCommand : public SkDrawCommand {
716public:
717 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
718 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700719 void execute(SkCanvas* canvas) const override;
720 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800721 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
722 static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800723
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000724private:
725 SkRRect fOuter;
726 SkRRect fInner;
727 SkPaint fPaint;
728
729 typedef SkDrawCommand INHERITED;
730};
731
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000732class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000733public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000734 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
735 const SkPoint vertices[], const SkPoint texs[],
Mike Reed7d954ad2016-10-28 15:42:34 -0400736 const SkColor colors[], SkBlendMode,
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000737 const uint16_t indices[], int indexCount,
738 const SkPaint& paint);
739 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700740 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800741
chudy@google.com902ebe52012-06-29 14:21:22 +0000742private:
743 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000744 int fVertexCount;
745 SkPoint* fVertices;
746 SkPoint* fTexs;
747 SkColor* fColors;
Mike Reed7d954ad2016-10-28 15:42:34 -0400748 SkBlendMode fBlendMode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000749 uint16_t* fIndices;
750 int fIndexCount;
751 SkPaint fPaint;
752
753 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000754};
755
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000756class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000757public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400758 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700759 void execute(SkCanvas* canvas) const override;
760 Action action() const override { return kPushLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800761 static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800762
chudy@google.com902ebe52012-06-29 14:21:22 +0000763private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000764 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000765};
766
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000767class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000768public:
reed4960eee2015-12-18 07:09:18 -0800769 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
ethannicholas50a8dd02016-02-10 05:40:46 -0800770 virtual ~SkSaveLayerCommand();
mtklein36352bf2015-03-25 18:17:31 -0700771 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800772 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
773 static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
mtklein36352bf2015-03-25 18:17:31 -0700774 void vizExecute(SkCanvas* canvas) const override;
775 Action action() const override{ return kPushLayer_Action; }
776 void setActive(bool active) override { fActive = active; }
777 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000778
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000779 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000780
chudy@google.com902ebe52012-06-29 14:21:22 +0000781private:
ethannicholas50a8dd02016-02-10 05:40:46 -0800782 SkRect fBounds;
783 SkPaint fPaint;
784 SkPaint* fPaintPtr;
785 const SkImageFilter* fBackdrop;
786 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000787
reed4960eee2015-12-18 07:09:18 -0800788 bool fActive;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000789
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000790 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000791};
792
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000793class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000794public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000795 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700796 void setUserMatrix(const SkMatrix&) override;
797 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800798 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
799 static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800800
chudy@google.com902ebe52012-06-29 14:21:22 +0000801private:
robertphillips70171682014-10-16 14:28:28 -0700802 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000803 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000804
805 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000806};
807
vjiaoblacke5de1302016-07-13 14:05:28 -0700808class SkTranslateZCommand : public SkDrawCommand {
809public:
810 SkTranslateZCommand(SkScalar);
811 void execute(SkCanvas* canvas) const override;
812 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
813 static SkTranslateZCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
814
815private:
816 SkScalar fZTranslate;
817
818 typedef SkDrawCommand INHERITED;
819};
chudy@google.com902ebe52012-06-29 14:21:22 +0000820#endif
vjiaoblacke6f5d562016-08-25 06:30:23 -0700821