blob: 964badcf58cdc5496120f09b5bf8d461d4a4a013 [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"
ethannicholas50a8dd02016-02-10 05:40:46 -080019#include "SkJSONCPP.h"
ethannicholasf62a8b72016-02-11 10:35:21 -080020#include "UrlDataManager.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000021
Mike Klein0f61faa2016-10-11 16:26:57 -040022class SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000023public:
robertphillips9bafc302015-02-13 11:13:00 -080024 enum OpType {
fmalita160ebb22015-04-01 20:58:37 -070025 kBeginDrawPicture_OpType,
vjiaoblack95302da2016-07-21 10:25:54 -070026 kBeginDrawShadowedPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080027 kClipPath_OpType,
28 kClipRegion_OpType,
29 kClipRect_OpType,
30 kClipRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080031 kConcat_OpType,
reed97660cc2016-06-28 18:54:19 -070032 kDrawAnnotation_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080033 kDrawBitmap_OpType,
34 kDrawBitmapNine_OpType,
35 kDrawBitmapRect_OpType,
36 kDrawClear_OpType,
37 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070038 kDrawImage_OpType,
Stan Ilievac42aeb2017-01-12 16:20:50 -050039 kDrawImageLattice_OpType,
fmalita651c9202015-07-22 10:23:01 -070040 kDrawImageRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080041 kDrawOval_OpType,
42 kDrawPaint_OpType,
43 kDrawPatch_OpType,
44 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080045 kDrawPoints_OpType,
46 kDrawPosText_OpType,
47 kDrawPosTextH_OpType,
48 kDrawRect_OpType,
49 kDrawRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080050 kDrawText_OpType,
51 kDrawTextBlob_OpType,
52 kDrawTextOnPath_OpType,
reed45561a02016-07-07 12:47:17 -070053 kDrawTextRSXform_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080054 kDrawVertices_OpType,
fmalita160ebb22015-04-01 20:58:37 -070055 kEndDrawPicture_OpType,
vjiaoblack95302da2016-07-21 10:25:54 -070056 kEndDrawShadowedPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080057 kRestore_OpType,
58 kSave_OpType,
59 kSaveLayer_OpType,
60 kSetMatrix_OpType,
vjiaoblacke5de1302016-07-13 14:05:28 -070061 kTranslateZ_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080062
vjiaoblacke5de1302016-07-13 14:05:28 -070063 kLast_OpType = kTranslateZ_OpType
robertphillips9bafc302015-02-13 11:13:00 -080064 };
65
66 static const int kOpTypeCount = kLast_OpType + 1;
67
halcanarya73d76a2016-10-17 13:19:02 -070068 static void WritePNG(const uint8_t* rgba, unsigned width, unsigned height,
msaretta5cf4f42016-06-30 10:06:51 -070069 SkWStream& out, bool isOpaque);
ethannicholasf67531f2016-03-21 10:19:39 -070070
robertphillips9bafc302015-02-13 11:13:00 -080071 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000072
73 virtual ~SkDrawCommand();
74
fmalita8c89c522014-11-08 16:18:56 -080075 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000076
fmalita8c89c522014-11-08 16:18:56 -080077 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080078 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000079 }
80
chudy@google.com0b5bbb02012-07-31 19:55:32 +000081 bool isVisible() const {
82 return fVisible;
83 }
84
85 void setVisible(bool toggle) {
86 fVisible = toggle;
87 }
chudy@google.com902ebe52012-06-29 14:21:22 +000088
fmalita8c89c522014-11-08 16:18:56 -080089 const SkTDArray<SkString*>* Info() const { return &fInfo; }
90 virtual void execute(SkCanvas*) const = 0;
91 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070092
fmalita8c89c522014-11-08 16:18:56 -080093 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070094
mtkleinf0f14112014-12-12 08:46:25 -080095 // The next "active" system is only used by save, saveLayer, and restore.
96 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000097 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000098 // saves just return a kPushLayer action but don't track active state
99 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +0000100 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000101 enum Action {
102 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +0000103 kPopLayer_Action,
104 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000105 };
106 virtual Action action() const { return kNone_Action; }
107 virtual void setActive(bool active) {}
108 virtual bool active() const { return false; }
109
robertphillips9bafc302015-02-13 11:13:00 -0800110 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000111
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000112 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000113
ethannicholasf62a8b72016-02-11 10:35:21 -0800114 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -0800115
116 /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
117 * is the caller's responsibility to delete this object. This method may return null if an error
118 * occurs.
119 */
ethannicholasf62a8b72016-02-11 10:35:21 -0800120 static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800121
robertphillips9bafc302015-02-13 11:13:00 -0800122 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000123
joshualittbd724132016-03-03 11:39:38 -0800124 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -0700125 static Json::Value MakeJsonColor(const SkColor color);
brianosman97bbf822016-09-25 13:15:58 -0700126 static Json::Value MakeJsonColor4f(const SkColor4f& color);
brianosmanfad98562016-05-04 11:06:28 -0700127 static Json::Value MakeJsonPoint(const SkPoint& point);
128 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
129 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800130 static Json::Value MakeJsonIRect(const SkIRect&);
131 static Json::Value MakeJsonMatrix(const SkMatrix&);
vjiaoblacke5de1302016-07-13 14:05:28 -0700132 static Json::Value MakeJsonScalar(SkScalar);
brianosmanfad98562016-05-04 11:06:28 -0700133 static Json::Value MakeJsonPath(const SkPath& path);
134 static Json::Value MakeJsonRegion(const SkRegion& region);
135 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500136 static Json::Value MakeJsonLattice(const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700137
138 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
139 UrlDataManager& urlDataManager);
140 static bool flatten(const SkImage& image, Json::Value* target,
141 UrlDataManager& urlDataManager);
142 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
143 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800144
chudy@google.com902ebe52012-06-29 14:21:22 +0000145protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000146 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000147
148private:
robertphillips9bafc302015-02-13 11:13:00 -0800149 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000150 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000151};
152
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000153class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000154public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000155 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700156 void execute(SkCanvas* canvas) const override;
157 Action action() const override { return kPopLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800158 static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000159
160private:
161 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000162};
163
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000164class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000165public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000166 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700167 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800168 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
169 static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800170
chudy@google.com902ebe52012-06-29 14:21:22 +0000171private:
172 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000173
174 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000175};
176
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000177class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000178public:
Mike Reedc1f77742016-12-09 09:00:50 -0500179 SkClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700180 void execute(SkCanvas* canvas) const override;
181 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800182 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
183 static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800184
chudy@google.com902ebe52012-06-29 14:21:22 +0000185private:
Mike Reedc1f77742016-12-09 09:00:50 -0500186 SkPath fPath;
187 SkClipOp fOp;
188 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000189
190 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000191};
192
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000193class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000194public:
Mike Reedc1f77742016-12-09 09:00:50 -0500195 SkClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700196 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800197 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
198 static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800199
chudy@google.com902ebe52012-06-29 14:21:22 +0000200private:
Mike Reedc1f77742016-12-09 09:00:50 -0500201 SkRegion fRegion;
202 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000203
204 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000205};
206
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000207class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000208public:
Mike Reedc1f77742016-12-09 09:00:50 -0500209 SkClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700210 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800211 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
212 static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000213
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000214 const SkRect& rect() const { return fRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500215 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000216 bool doAA() const { return fDoAA; }
217
chudy@google.com902ebe52012-06-29 14:21:22 +0000218private:
Mike Reedc1f77742016-12-09 09:00:50 -0500219 SkRect fRect;
220 SkClipOp fOp;
221 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000222
223 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000224};
225
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000226class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000227public:
Mike Reedc1f77742016-12-09 09:00:50 -0500228 SkClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700229 void execute(SkCanvas* canvas) const override;
230 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800231 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
232 static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000233
234 const SkRRect& rrect() const { return fRRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500235 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000236 bool doAA() const { return fDoAA; }
237
robertphillips@google.com67baba42013-01-02 20:20:31 +0000238private:
Mike Reedc1f77742016-12-09 09:00:50 -0500239 SkRRect fRRect;
240 SkClipOp fOp;
241 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000242
243 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000244};
245
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000246class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000247public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000248 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700249 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800250 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
251 static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800252
chudy@google.com902ebe52012-06-29 14:21:22 +0000253private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000254 SkMatrix fMatrix;
255
256 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000257};
258
reed97660cc2016-06-28 18:54:19 -0700259class SkDrawAnnotationCommand : public SkDrawCommand {
260public:
261 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
262 void execute(SkCanvas* canvas) const override;
263 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
264 static SkDrawAnnotationCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
265
266private:
267 SkRect fRect;
268 SkString fKey;
269 sk_sp<SkData> fValue;
270
271 typedef SkDrawCommand INHERITED;
272};
273
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000274class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000275public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000276 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000277 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700278 void execute(SkCanvas* canvas) const override;
279 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800280 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
281 static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800282
chudy@google.com902ebe52012-06-29 14:21:22 +0000283private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000284 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000285 SkScalar fLeft;
286 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000287 SkPaint fPaint;
288 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000289
290 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000291};
292
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000293class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000294public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000295 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000296 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700297 void execute(SkCanvas* canvas) const override;
298 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800299 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
300 static SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800301
chudy@google.com902ebe52012-06-29 14:21:22 +0000302private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000303 SkBitmap fBitmap;
304 SkIRect fCenter;
305 SkRect fDst;
306 SkPaint fPaint;
307 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000308
309 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000310};
311
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000312class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000313public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000314 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000315 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700316 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700317 void execute(SkCanvas* canvas) const override;
318 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800319 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
320 static SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000321
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000322 const SkBitmap& bitmap() const { return fBitmap; }
323
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000324 // The non-const 'paint' method allows modification of this object's
325 // SkPaint. For this reason the ctor and setPaint method make a local copy.
326 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
327 // (since only an SkPaint* is passed into the ctor).
328 const SkPaint* paint() const { return fPaintPtr; }
329 SkPaint* paint() { return fPaintPtr; }
330
331 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
332
halcanary96fcdcc2015-08-27 07:41:13 -0700333 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000334 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000335
336 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000337 void setDstRect(const SkRect& dst) { fDst = dst; }
338
reeda5517e22015-07-14 10:54:12 -0700339 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
340 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000341
chudy@google.com902ebe52012-06-29 14:21:22 +0000342private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000343 SkBitmap fBitmap;
344 SkRect fSrc;
345 SkRect fDst;
346 SkPaint fPaint;
347 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700348 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000349
350 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000351};
352
fmalita651c9202015-07-22 10:23:01 -0700353class SkDrawImageCommand : public SkDrawCommand {
354public:
355 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
356 void execute(SkCanvas* canvas) const override;
357 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800358 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
359 static SkDrawImageCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800360
fmalita651c9202015-07-22 10:23:01 -0700361private:
Hal Canary1b612a82016-11-03 16:26:13 -0400362 sk_sp<const SkImage> fImage;
363 SkScalar fLeft;
364 SkScalar fTop;
365 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700366
367 typedef SkDrawCommand INHERITED;
368};
369
Stan Ilievac42aeb2017-01-12 16:20:50 -0500370class SkDrawImageLatticeCommand : public SkDrawCommand {
371public:
372 SkDrawImageLatticeCommand(const SkImage* image, const SkCanvas::Lattice& lattice,
373 const SkRect& dst, const SkPaint* paint);
374 void execute(SkCanvas* canvas) const override;
375 bool render(SkCanvas* canvas) const override;
376 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
377
378private:
379 sk_sp<const SkImage> fImage;
380 SkCanvas::Lattice fLattice;
381 SkRect fDst;
382 SkTLazy<SkPaint> fPaint;
383
384 typedef SkDrawCommand INHERITED;
385};
386
fmalita651c9202015-07-22 10:23:01 -0700387class SkDrawImageRectCommand : public SkDrawCommand {
388public:
389 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
390 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
391 void execute(SkCanvas* canvas) const override;
392 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800393 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
394 static SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800395
fmalita651c9202015-07-22 10:23:01 -0700396private:
Hal Canary1b612a82016-11-03 16:26:13 -0400397 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700398 SkTLazy<SkRect> fSrc;
399 SkRect fDst;
400 SkTLazy<SkPaint> fPaint;
401 SkCanvas::SrcRectConstraint fConstraint;
402
403 typedef SkDrawCommand INHERITED;
404};
405
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000406class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000407public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000408 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700409 void execute(SkCanvas* canvas) const override;
410 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800411 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
412 static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800413
robertphillips@google.com67baba42013-01-02 20:20:31 +0000414private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000415 SkRect fOval;
416 SkPaint fPaint;
417
418 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000419};
420
bsalomonac3aa242016-08-19 11:25:19 -0700421class SkDrawArcCommand : public SkDrawCommand {
422public:
423 SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
424 const SkPaint& paint);
425 void execute(SkCanvas* canvas) const override;
426 bool render(SkCanvas* canvas) const override;
427 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
428 static SkDrawArcCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
429
430private:
431 SkRect fOval;
432 SkScalar fStartAngle;
433 SkScalar fSweepAngle;
434 bool fUseCenter;
435 SkPaint fPaint;
436
437 typedef SkDrawCommand INHERITED;
438};
439
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000440class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000441public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000442 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700443 void execute(SkCanvas* canvas) const override;
444 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800445 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
446 static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800447
chudy@google.com902ebe52012-06-29 14:21:22 +0000448private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000449 SkPaint fPaint;
450
451 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000452};
453
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000454class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000455public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000456 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700457 void execute(SkCanvas* canvas) const override;
458 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800459 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
460 static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000461
chudy@google.com902ebe52012-06-29 14:21:22 +0000462private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000463 SkPath fPath;
464 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000465
466 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000467};
468
fmalita160ebb22015-04-01 20:58:37 -0700469class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000470public:
fmalita160ebb22015-04-01 20:58:37 -0700471 SkBeginDrawPictureCommand(const SkPicture* picture,
472 const SkMatrix* matrix,
473 const SkPaint* paint);
474
mtklein36352bf2015-03-25 18:17:31 -0700475 void execute(SkCanvas* canvas) const override;
476 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000477
chudy@google.com902ebe52012-06-29 14:21:22 +0000478private:
Hal Canary1b612a82016-11-03 16:26:13 -0400479 sk_sp<const SkPicture> fPicture;
480 SkTLazy<SkMatrix> fMatrix;
481 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700482
483 typedef SkDrawCommand INHERITED;
484};
485
486class SkEndDrawPictureCommand : public SkDrawCommand {
487public:
488 SkEndDrawPictureCommand(bool restore);
489
490 void execute(SkCanvas* canvas) const override;
491
492private:
493 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000494
495 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000496};
497
vjiaoblack95302da2016-07-21 10:25:54 -0700498class SkBeginDrawShadowedPictureCommand : public SkDrawCommand {
499public:
500 SkBeginDrawShadowedPictureCommand(const SkPicture* picture,
501 const SkMatrix* matrix,
vjiaoblacke6f5d562016-08-25 06:30:23 -0700502 const SkPaint* paint,
503 const SkShadowParams& params);
vjiaoblack95302da2016-07-21 10:25:54 -0700504
505 void execute(SkCanvas* canvas) const override;
506 bool render(SkCanvas* canvas) const override;
507
508private:
Hal Canary1b612a82016-11-03 16:26:13 -0400509 sk_sp<const SkPicture> fPicture;
vjiaoblack95302da2016-07-21 10:25:54 -0700510 SkTLazy<SkMatrix> fMatrix;
511 SkTLazy<SkPaint> fPaint;
vjiaoblacke6f5d562016-08-25 06:30:23 -0700512#ifdef SK_EXPERIMENTAL_SHADOWING
513 SkShadowParams fShadowParams;
514#endif
vjiaoblack95302da2016-07-21 10:25:54 -0700515
516 typedef SkDrawCommand INHERITED;
517};
518
519class SkEndDrawShadowedPictureCommand : public SkDrawCommand {
520public:
521 SkEndDrawShadowedPictureCommand(bool restore);
522
523 void execute(SkCanvas* canvas) const override;
524
525private:
526 bool fRestore;
527
528 typedef SkDrawCommand INHERITED;
529};
530
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000531class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000532public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000533 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000534 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000535 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700536 void execute(SkCanvas* canvas) const override;
537 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800538 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
539 static SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800540
chudy@google.com902ebe52012-06-29 14:21:22 +0000541private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000542 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000543 size_t fCount;
544 SkPoint* fPts;
545 SkPaint fPaint;
546
547 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000548};
549
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000550class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000551public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000552 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000553 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000554 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700555 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800556 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
557 static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800558
chudy@google.com902ebe52012-06-29 14:21:22 +0000559private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000560 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000561 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000562 SkScalar fX;
563 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000564 SkPaint fPaint;
565
566 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000567};
568
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000569class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000570public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000571 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
572 const SkPaint& paint);
573 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700574 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800575 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
576 static SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800577
chudy@google.com902ebe52012-06-29 14:21:22 +0000578private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000579 char* fText;
580 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000581 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000582 SkPaint fPaint;
583
584 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000585};
586
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000587class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000588public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000589 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
590 const SkMatrix* matrix, const SkPaint& paint);
591 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700592 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800593 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
594 static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800595
chudy@google.com902ebe52012-06-29 14:21:22 +0000596private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000597 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000598 size_t fByteLength;
599 SkPath fPath;
600 SkMatrix fMatrix;
601 SkPaint fPaint;
602
603 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000604};
605
reed45561a02016-07-07 12:47:17 -0700606class SkDrawTextRSXformCommand : public SkDrawCommand {
607public:
608 SkDrawTextRSXformCommand(const void* text, size_t byteLength, const SkRSXform[],
609 const SkRect*, const SkPaint& paint);
610 ~SkDrawTextRSXformCommand() override { delete[] fText; delete[] fXform; }
611 void execute(SkCanvas* canvas) const override;
612 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
613 static SkDrawTextRSXformCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
614
615private:
616 char* fText;
617 size_t fByteLength;
618 SkRSXform* fXform;
619 SkRect* fCull;
620 SkRect fCullStorage;
621 SkPaint fPaint;
622
623 typedef SkDrawCommand INHERITED;
624};
625
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000626class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000627public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000628 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
629 SkScalar constY, const SkPaint& paint);
630 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700631 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800632 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
633 static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800634
chudy@google.com902ebe52012-06-29 14:21:22 +0000635private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000636 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000637 char* fText;
638 size_t fByteLength;
639 SkScalar fConstY;
640 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000641
642 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000643};
644
fmalitab7425172014-08-26 07:56:44 -0700645class SkDrawTextBlobCommand : public SkDrawCommand {
646public:
fmalita37283c22016-09-13 10:00:23 -0700647 SkDrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700648
mtklein36352bf2015-03-25 18:17:31 -0700649 void execute(SkCanvas* canvas) const override;
650 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800651 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
652 static SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
fmalitab7425172014-08-26 07:56:44 -0700653
654private:
fmalita37283c22016-09-13 10:00:23 -0700655 sk_sp<SkTextBlob> fBlob;
656 SkScalar fXPos;
657 SkScalar fYPos;
658 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700659
660 typedef SkDrawCommand INHERITED;
661};
662
robertphillips9bafc302015-02-13 11:13:00 -0800663class SkDrawPatchCommand : public SkDrawCommand {
664public:
665 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
Mike Reed7d954ad2016-10-28 15:42:34 -0400666 const SkPoint texCoords[4], SkBlendMode bmode,
robertphillips9bafc302015-02-13 11:13:00 -0800667 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700668 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800669 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
670 static SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips9bafc302015-02-13 11:13:00 -0800671
672private:
673 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800674 SkColor* fColorsPtr;
675 SkColor fColors[4];
676 SkPoint* fTexCoordsPtr;
677 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400678 SkBlendMode fBlendMode;
robertphillips9bafc302015-02-13 11:13:00 -0800679 SkPaint fPaint;
680
681 typedef SkDrawCommand INHERITED;
682};
683
684
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000685class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000686public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000687 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700688 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800689 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
690 static SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000691
robertphillips@google.com91217d02013-03-17 18:33:46 +0000692 const SkRect& rect() const { return fRect; }
693 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000694private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000695 SkRect fRect;
696 SkPaint fPaint;
697
698 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000699};
700
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000701class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000702public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000703 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700704 void execute(SkCanvas* canvas) const override;
705 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800706 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
707 static SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800708
robertphillips@google.com67baba42013-01-02 20:20:31 +0000709private:
710 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000711 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000712
713 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000714};
715
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000716class SkDrawDRRectCommand : public SkDrawCommand {
717public:
718 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
719 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700720 void execute(SkCanvas* canvas) const override;
721 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800722 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
723 static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800724
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000725private:
726 SkRRect fOuter;
727 SkRRect fInner;
728 SkPaint fPaint;
729
730 typedef SkDrawCommand INHERITED;
731};
732
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000733class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000734public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000735 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
736 const SkPoint vertices[], const SkPoint texs[],
Mike Reed7d954ad2016-10-28 15:42:34 -0400737 const SkColor colors[], SkBlendMode,
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000738 const uint16_t indices[], int indexCount,
739 const SkPaint& paint);
740 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700741 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800742
chudy@google.com902ebe52012-06-29 14:21:22 +0000743private:
744 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000745 int fVertexCount;
746 SkPoint* fVertices;
747 SkPoint* fTexs;
748 SkColor* fColors;
Mike Reed7d954ad2016-10-28 15:42:34 -0400749 SkBlendMode fBlendMode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000750 uint16_t* fIndices;
751 int fIndexCount;
752 SkPaint fPaint;
753
754 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000755};
756
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000757class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000758public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400759 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700760 void execute(SkCanvas* canvas) const override;
761 Action action() const override { return kPushLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800762 static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800763
chudy@google.com902ebe52012-06-29 14:21:22 +0000764private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000765 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000766};
767
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000768class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000769public:
reed4960eee2015-12-18 07:09:18 -0800770 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
ethannicholas50a8dd02016-02-10 05:40:46 -0800771 virtual ~SkSaveLayerCommand();
mtklein36352bf2015-03-25 18:17:31 -0700772 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800773 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
774 static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
mtklein36352bf2015-03-25 18:17:31 -0700775 void vizExecute(SkCanvas* canvas) const override;
776 Action action() const override{ return kPushLayer_Action; }
777 void setActive(bool active) override { fActive = active; }
778 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000779
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000780 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000781
chudy@google.com902ebe52012-06-29 14:21:22 +0000782private:
ethannicholas50a8dd02016-02-10 05:40:46 -0800783 SkRect fBounds;
784 SkPaint fPaint;
785 SkPaint* fPaintPtr;
786 const SkImageFilter* fBackdrop;
787 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000788
reed4960eee2015-12-18 07:09:18 -0800789 bool fActive;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000790
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000791 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000792};
793
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000794class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000795public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000796 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700797 void setUserMatrix(const SkMatrix&) override;
798 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800799 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
800 static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800801
chudy@google.com902ebe52012-06-29 14:21:22 +0000802private:
robertphillips70171682014-10-16 14:28:28 -0700803 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000804 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000805
806 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000807};
808
vjiaoblacke5de1302016-07-13 14:05:28 -0700809class SkTranslateZCommand : public SkDrawCommand {
810public:
811 SkTranslateZCommand(SkScalar);
812 void execute(SkCanvas* canvas) const override;
813 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
814 static SkTranslateZCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
815
816private:
817 SkScalar fZTranslate;
818
819 typedef SkDrawCommand INHERITED;
820};
chudy@google.com902ebe52012-06-29 14:21:22 +0000821#endif
vjiaoblacke6f5d562016-08-25 06:30:23 -0700822