blob: 880c2aa0860ecc20431be79989b28476e5b4abd5 [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,
38 kDrawImageRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080039 kDrawOval_OpType,
40 kDrawPaint_OpType,
41 kDrawPatch_OpType,
42 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080043 kDrawPoints_OpType,
44 kDrawPosText_OpType,
45 kDrawPosTextH_OpType,
46 kDrawRect_OpType,
47 kDrawRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080048 kDrawText_OpType,
49 kDrawTextBlob_OpType,
50 kDrawTextOnPath_OpType,
reed45561a02016-07-07 12:47:17 -070051 kDrawTextRSXform_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080052 kDrawVertices_OpType,
fmalita160ebb22015-04-01 20:58:37 -070053 kEndDrawPicture_OpType,
vjiaoblack95302da2016-07-21 10:25:54 -070054 kEndDrawShadowedPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080055 kRestore_OpType,
56 kSave_OpType,
57 kSaveLayer_OpType,
58 kSetMatrix_OpType,
vjiaoblacke5de1302016-07-13 14:05:28 -070059 kTranslateZ_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080060
vjiaoblacke5de1302016-07-13 14:05:28 -070061 kLast_OpType = kTranslateZ_OpType
robertphillips9bafc302015-02-13 11:13:00 -080062 };
63
64 static const int kOpTypeCount = kLast_OpType + 1;
65
halcanarya73d76a2016-10-17 13:19:02 -070066 static void WritePNG(const uint8_t* rgba, unsigned width, unsigned height,
msaretta5cf4f42016-06-30 10:06:51 -070067 SkWStream& out, bool isOpaque);
ethannicholasf67531f2016-03-21 10:19:39 -070068
robertphillips9bafc302015-02-13 11:13:00 -080069 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000070
71 virtual ~SkDrawCommand();
72
fmalita8c89c522014-11-08 16:18:56 -080073 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000074
fmalita8c89c522014-11-08 16:18:56 -080075 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080076 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000077 }
78
chudy@google.com0b5bbb02012-07-31 19:55:32 +000079 bool isVisible() const {
80 return fVisible;
81 }
82
83 void setVisible(bool toggle) {
84 fVisible = toggle;
85 }
chudy@google.com902ebe52012-06-29 14:21:22 +000086
fmalita8c89c522014-11-08 16:18:56 -080087 const SkTDArray<SkString*>* Info() const { return &fInfo; }
88 virtual void execute(SkCanvas*) const = 0;
89 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070090
fmalita8c89c522014-11-08 16:18:56 -080091 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070092
mtkleinf0f14112014-12-12 08:46:25 -080093 // The next "active" system is only used by save, saveLayer, and restore.
94 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000095 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000096 // saves just return a kPushLayer action but don't track active state
97 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000098 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000099 enum Action {
100 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +0000101 kPopLayer_Action,
102 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000103 };
104 virtual Action action() const { return kNone_Action; }
105 virtual void setActive(bool active) {}
106 virtual bool active() const { return false; }
107
robertphillips9bafc302015-02-13 11:13:00 -0800108 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000109
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000110 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000111
ethannicholasf62a8b72016-02-11 10:35:21 -0800112 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -0800113
114 /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
115 * is the caller's responsibility to delete this object. This method may return null if an error
116 * occurs.
117 */
ethannicholasf62a8b72016-02-11 10:35:21 -0800118 static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800119
robertphillips9bafc302015-02-13 11:13:00 -0800120 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000121
joshualittbd724132016-03-03 11:39:38 -0800122 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -0700123 static Json::Value MakeJsonColor(const SkColor color);
brianosman97bbf822016-09-25 13:15:58 -0700124 static Json::Value MakeJsonColor4f(const SkColor4f& color);
brianosmanfad98562016-05-04 11:06:28 -0700125 static Json::Value MakeJsonPoint(const SkPoint& point);
126 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
127 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800128 static Json::Value MakeJsonIRect(const SkIRect&);
129 static Json::Value MakeJsonMatrix(const SkMatrix&);
vjiaoblacke5de1302016-07-13 14:05:28 -0700130 static Json::Value MakeJsonScalar(SkScalar);
brianosmanfad98562016-05-04 11:06:28 -0700131 static Json::Value MakeJsonPath(const SkPath& path);
132 static Json::Value MakeJsonRegion(const SkRegion& region);
133 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
134
135 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
136 UrlDataManager& urlDataManager);
137 static bool flatten(const SkImage& image, Json::Value* target,
138 UrlDataManager& urlDataManager);
139 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
140 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800141
chudy@google.com902ebe52012-06-29 14:21:22 +0000142protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000143 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000144
145private:
robertphillips9bafc302015-02-13 11:13:00 -0800146 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000147 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000148};
149
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000150class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000151public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000152 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700153 void execute(SkCanvas* canvas) const override;
154 Action action() const override { return kPopLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800155 static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000156
157private:
158 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000159};
160
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000161class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000162public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000163 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700164 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800165 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
166 static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800167
chudy@google.com902ebe52012-06-29 14:21:22 +0000168private:
169 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000170
171 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000172};
173
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000174class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000175public:
Mike Reedc1f77742016-12-09 09:00:50 -0500176 SkClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700177 void execute(SkCanvas* canvas) const override;
178 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800179 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
180 static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800181
chudy@google.com902ebe52012-06-29 14:21:22 +0000182private:
Mike Reedc1f77742016-12-09 09:00:50 -0500183 SkPath fPath;
184 SkClipOp fOp;
185 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000186
187 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000188};
189
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000190class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000191public:
Mike Reedc1f77742016-12-09 09:00:50 -0500192 SkClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700193 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800194 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
195 static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800196
chudy@google.com902ebe52012-06-29 14:21:22 +0000197private:
Mike Reedc1f77742016-12-09 09:00:50 -0500198 SkRegion fRegion;
199 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000200
201 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000202};
203
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000204class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000205public:
Mike Reedc1f77742016-12-09 09:00:50 -0500206 SkClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700207 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800208 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
209 static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000210
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000211 const SkRect& rect() const { return fRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500212 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000213 bool doAA() const { return fDoAA; }
214
chudy@google.com902ebe52012-06-29 14:21:22 +0000215private:
Mike Reedc1f77742016-12-09 09:00:50 -0500216 SkRect fRect;
217 SkClipOp fOp;
218 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000219
220 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000221};
222
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000223class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000224public:
Mike Reedc1f77742016-12-09 09:00:50 -0500225 SkClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700226 void execute(SkCanvas* canvas) const override;
227 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800228 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
229 static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000230
231 const SkRRect& rrect() const { return fRRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500232 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000233 bool doAA() const { return fDoAA; }
234
robertphillips@google.com67baba42013-01-02 20:20:31 +0000235private:
Mike Reedc1f77742016-12-09 09:00:50 -0500236 SkRRect fRRect;
237 SkClipOp fOp;
238 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000239
240 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000241};
242
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000243class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000244public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000245 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700246 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800247 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
248 static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800249
chudy@google.com902ebe52012-06-29 14:21:22 +0000250private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000251 SkMatrix fMatrix;
252
253 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000254};
255
reed97660cc2016-06-28 18:54:19 -0700256class SkDrawAnnotationCommand : public SkDrawCommand {
257public:
258 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
259 void execute(SkCanvas* canvas) const override;
260 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
261 static SkDrawAnnotationCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
262
263private:
264 SkRect fRect;
265 SkString fKey;
266 sk_sp<SkData> fValue;
267
268 typedef SkDrawCommand INHERITED;
269};
270
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000271class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000272public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000273 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000274 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700275 void execute(SkCanvas* canvas) const override;
276 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800277 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
278 static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800279
chudy@google.com902ebe52012-06-29 14:21:22 +0000280private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000281 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000282 SkScalar fLeft;
283 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000284 SkPaint fPaint;
285 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000286
287 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000288};
289
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000290class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000291public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000292 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000293 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700294 void execute(SkCanvas* canvas) const override;
295 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800296 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
297 static SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800298
chudy@google.com902ebe52012-06-29 14:21:22 +0000299private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000300 SkBitmap fBitmap;
301 SkIRect fCenter;
302 SkRect fDst;
303 SkPaint fPaint;
304 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000305
306 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000307};
308
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000309class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000310public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000311 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000312 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700313 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700314 void execute(SkCanvas* canvas) const override;
315 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800316 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
317 static SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000318
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000319 const SkBitmap& bitmap() const { return fBitmap; }
320
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000321 // The non-const 'paint' method allows modification of this object's
322 // SkPaint. For this reason the ctor and setPaint method make a local copy.
323 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
324 // (since only an SkPaint* is passed into the ctor).
325 const SkPaint* paint() const { return fPaintPtr; }
326 SkPaint* paint() { return fPaintPtr; }
327
328 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
329
halcanary96fcdcc2015-08-27 07:41:13 -0700330 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000331 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000332
333 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000334 void setDstRect(const SkRect& dst) { fDst = dst; }
335
reeda5517e22015-07-14 10:54:12 -0700336 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
337 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000338
chudy@google.com902ebe52012-06-29 14:21:22 +0000339private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000340 SkBitmap fBitmap;
341 SkRect fSrc;
342 SkRect fDst;
343 SkPaint fPaint;
344 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700345 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000346
347 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000348};
349
fmalita651c9202015-07-22 10:23:01 -0700350class SkDrawImageCommand : public SkDrawCommand {
351public:
352 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
353 void execute(SkCanvas* canvas) const override;
354 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800355 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
356 static SkDrawImageCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800357
fmalita651c9202015-07-22 10:23:01 -0700358private:
Hal Canary1b612a82016-11-03 16:26:13 -0400359 sk_sp<const SkImage> fImage;
360 SkScalar fLeft;
361 SkScalar fTop;
362 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700363
364 typedef SkDrawCommand INHERITED;
365};
366
367class SkDrawImageRectCommand : public SkDrawCommand {
368public:
369 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
370 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
371 void execute(SkCanvas* canvas) const override;
372 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800373 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
374 static SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800375
fmalita651c9202015-07-22 10:23:01 -0700376private:
Hal Canary1b612a82016-11-03 16:26:13 -0400377 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700378 SkTLazy<SkRect> fSrc;
379 SkRect fDst;
380 SkTLazy<SkPaint> fPaint;
381 SkCanvas::SrcRectConstraint fConstraint;
382
383 typedef SkDrawCommand INHERITED;
384};
385
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000386class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000387public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000388 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700389 void execute(SkCanvas* canvas) const override;
390 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800391 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
392 static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800393
robertphillips@google.com67baba42013-01-02 20:20:31 +0000394private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000395 SkRect fOval;
396 SkPaint fPaint;
397
398 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000399};
400
bsalomonac3aa242016-08-19 11:25:19 -0700401class SkDrawArcCommand : public SkDrawCommand {
402public:
403 SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
404 const SkPaint& paint);
405 void execute(SkCanvas* canvas) const override;
406 bool render(SkCanvas* canvas) const override;
407 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
408 static SkDrawArcCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
409
410private:
411 SkRect fOval;
412 SkScalar fStartAngle;
413 SkScalar fSweepAngle;
414 bool fUseCenter;
415 SkPaint fPaint;
416
417 typedef SkDrawCommand INHERITED;
418};
419
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000420class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000421public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000422 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700423 void execute(SkCanvas* canvas) const override;
424 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800425 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
426 static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800427
chudy@google.com902ebe52012-06-29 14:21:22 +0000428private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000429 SkPaint fPaint;
430
431 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000432};
433
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000434class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000435public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000436 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700437 void execute(SkCanvas* canvas) const override;
438 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800439 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
440 static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000441
chudy@google.com902ebe52012-06-29 14:21:22 +0000442private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000443 SkPath fPath;
444 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000445
446 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000447};
448
fmalita160ebb22015-04-01 20:58:37 -0700449class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000450public:
fmalita160ebb22015-04-01 20:58:37 -0700451 SkBeginDrawPictureCommand(const SkPicture* picture,
452 const SkMatrix* matrix,
453 const SkPaint* paint);
454
mtklein36352bf2015-03-25 18:17:31 -0700455 void execute(SkCanvas* canvas) const override;
456 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000457
chudy@google.com902ebe52012-06-29 14:21:22 +0000458private:
Hal Canary1b612a82016-11-03 16:26:13 -0400459 sk_sp<const SkPicture> fPicture;
460 SkTLazy<SkMatrix> fMatrix;
461 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700462
463 typedef SkDrawCommand INHERITED;
464};
465
466class SkEndDrawPictureCommand : public SkDrawCommand {
467public:
468 SkEndDrawPictureCommand(bool restore);
469
470 void execute(SkCanvas* canvas) const override;
471
472private:
473 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000474
475 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000476};
477
vjiaoblack95302da2016-07-21 10:25:54 -0700478class SkBeginDrawShadowedPictureCommand : public SkDrawCommand {
479public:
480 SkBeginDrawShadowedPictureCommand(const SkPicture* picture,
481 const SkMatrix* matrix,
vjiaoblacke6f5d562016-08-25 06:30:23 -0700482 const SkPaint* paint,
483 const SkShadowParams& params);
vjiaoblack95302da2016-07-21 10:25:54 -0700484
485 void execute(SkCanvas* canvas) const override;
486 bool render(SkCanvas* canvas) const override;
487
488private:
Hal Canary1b612a82016-11-03 16:26:13 -0400489 sk_sp<const SkPicture> fPicture;
vjiaoblack95302da2016-07-21 10:25:54 -0700490 SkTLazy<SkMatrix> fMatrix;
491 SkTLazy<SkPaint> fPaint;
vjiaoblacke6f5d562016-08-25 06:30:23 -0700492#ifdef SK_EXPERIMENTAL_SHADOWING
493 SkShadowParams fShadowParams;
494#endif
vjiaoblack95302da2016-07-21 10:25:54 -0700495
496 typedef SkDrawCommand INHERITED;
497};
498
499class SkEndDrawShadowedPictureCommand : public SkDrawCommand {
500public:
501 SkEndDrawShadowedPictureCommand(bool restore);
502
503 void execute(SkCanvas* canvas) const override;
504
505private:
506 bool fRestore;
507
508 typedef SkDrawCommand INHERITED;
509};
510
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000511class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000512public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000513 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000514 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000515 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700516 void execute(SkCanvas* canvas) const override;
517 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800518 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
519 static SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800520
chudy@google.com902ebe52012-06-29 14:21:22 +0000521private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000522 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000523 size_t fCount;
524 SkPoint* fPts;
525 SkPaint fPaint;
526
527 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000528};
529
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000530class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000531public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000532 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000533 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000534 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700535 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800536 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
537 static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800538
chudy@google.com902ebe52012-06-29 14:21:22 +0000539private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000540 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000541 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000542 SkScalar fX;
543 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000544 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 SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000550public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000551 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
552 const SkPaint& paint);
553 virtual ~SkDrawPosTextCommand() { delete [] fPos; 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 SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800557
chudy@google.com902ebe52012-06-29 14:21:22 +0000558private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000559 char* fText;
560 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000561 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000562 SkPaint fPaint;
563
564 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000565};
566
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000567class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000568public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000569 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
570 const SkMatrix* matrix, const SkPaint& paint);
571 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700572 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800573 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
574 static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800575
chudy@google.com902ebe52012-06-29 14:21:22 +0000576private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000577 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000578 size_t fByteLength;
579 SkPath fPath;
580 SkMatrix fMatrix;
581 SkPaint fPaint;
582
583 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000584};
585
reed45561a02016-07-07 12:47:17 -0700586class SkDrawTextRSXformCommand : public SkDrawCommand {
587public:
588 SkDrawTextRSXformCommand(const void* text, size_t byteLength, const SkRSXform[],
589 const SkRect*, const SkPaint& paint);
590 ~SkDrawTextRSXformCommand() override { delete[] fText; delete[] fXform; }
591 void execute(SkCanvas* canvas) const override;
592 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
593 static SkDrawTextRSXformCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
594
595private:
596 char* fText;
597 size_t fByteLength;
598 SkRSXform* fXform;
599 SkRect* fCull;
600 SkRect fCullStorage;
601 SkPaint fPaint;
602
603 typedef SkDrawCommand INHERITED;
604};
605
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000606class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000607public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000608 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
609 SkScalar constY, const SkPaint& paint);
610 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700611 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800612 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
613 static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800614
chudy@google.com902ebe52012-06-29 14:21:22 +0000615private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000616 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000617 char* fText;
618 size_t fByteLength;
619 SkScalar fConstY;
620 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000621
622 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000623};
624
fmalitab7425172014-08-26 07:56:44 -0700625class SkDrawTextBlobCommand : public SkDrawCommand {
626public:
fmalita37283c22016-09-13 10:00:23 -0700627 SkDrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700628
mtklein36352bf2015-03-25 18:17:31 -0700629 void execute(SkCanvas* canvas) const override;
630 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800631 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
632 static SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
fmalitab7425172014-08-26 07:56:44 -0700633
634private:
fmalita37283c22016-09-13 10:00:23 -0700635 sk_sp<SkTextBlob> fBlob;
636 SkScalar fXPos;
637 SkScalar fYPos;
638 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700639
640 typedef SkDrawCommand INHERITED;
641};
642
robertphillips9bafc302015-02-13 11:13:00 -0800643class SkDrawPatchCommand : public SkDrawCommand {
644public:
645 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
Mike Reed7d954ad2016-10-28 15:42:34 -0400646 const SkPoint texCoords[4], SkBlendMode bmode,
robertphillips9bafc302015-02-13 11:13:00 -0800647 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700648 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800649 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
650 static SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips9bafc302015-02-13 11:13:00 -0800651
652private:
653 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800654 SkColor* fColorsPtr;
655 SkColor fColors[4];
656 SkPoint* fTexCoordsPtr;
657 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400658 SkBlendMode fBlendMode;
robertphillips9bafc302015-02-13 11:13:00 -0800659 SkPaint fPaint;
660
661 typedef SkDrawCommand INHERITED;
662};
663
664
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000665class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000666public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000667 SkDrawRectCommand(const SkRect& rect, 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 SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000671
robertphillips@google.com91217d02013-03-17 18:33:46 +0000672 const SkRect& rect() const { return fRect; }
673 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000674private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000675 SkRect fRect;
676 SkPaint fPaint;
677
678 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000679};
680
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000681class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000682public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000683 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700684 void execute(SkCanvas* canvas) const override;
685 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800686 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
687 static SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800688
robertphillips@google.com67baba42013-01-02 20:20:31 +0000689private:
690 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000691 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000692
693 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000694};
695
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000696class SkDrawDRRectCommand : public SkDrawCommand {
697public:
698 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
699 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700700 void execute(SkCanvas* canvas) const override;
701 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800702 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
703 static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800704
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000705private:
706 SkRRect fOuter;
707 SkRRect fInner;
708 SkPaint fPaint;
709
710 typedef SkDrawCommand INHERITED;
711};
712
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000713class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000714public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000715 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
716 const SkPoint vertices[], const SkPoint texs[],
Mike Reed7d954ad2016-10-28 15:42:34 -0400717 const SkColor colors[], SkBlendMode,
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000718 const uint16_t indices[], int indexCount,
719 const SkPaint& paint);
720 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700721 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800722
chudy@google.com902ebe52012-06-29 14:21:22 +0000723private:
724 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000725 int fVertexCount;
726 SkPoint* fVertices;
727 SkPoint* fTexs;
728 SkColor* fColors;
Mike Reed7d954ad2016-10-28 15:42:34 -0400729 SkBlendMode fBlendMode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000730 uint16_t* fIndices;
731 int fIndexCount;
732 SkPaint fPaint;
733
734 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000735};
736
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000737class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000738public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400739 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700740 void execute(SkCanvas* canvas) const override;
741 Action action() const override { return kPushLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800742 static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800743
chudy@google.com902ebe52012-06-29 14:21:22 +0000744private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000745 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000746};
747
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000748class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000749public:
reed4960eee2015-12-18 07:09:18 -0800750 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
ethannicholas50a8dd02016-02-10 05:40:46 -0800751 virtual ~SkSaveLayerCommand();
mtklein36352bf2015-03-25 18:17:31 -0700752 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800753 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
754 static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
mtklein36352bf2015-03-25 18:17:31 -0700755 void vizExecute(SkCanvas* canvas) const override;
756 Action action() const override{ return kPushLayer_Action; }
757 void setActive(bool active) override { fActive = active; }
758 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000759
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000760 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000761
chudy@google.com902ebe52012-06-29 14:21:22 +0000762private:
ethannicholas50a8dd02016-02-10 05:40:46 -0800763 SkRect fBounds;
764 SkPaint fPaint;
765 SkPaint* fPaintPtr;
766 const SkImageFilter* fBackdrop;
767 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000768
reed4960eee2015-12-18 07:09:18 -0800769 bool fActive;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000770
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000771 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000772};
773
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000774class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000775public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000776 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700777 void setUserMatrix(const SkMatrix&) override;
778 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800779 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
780 static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800781
chudy@google.com902ebe52012-06-29 14:21:22 +0000782private:
robertphillips70171682014-10-16 14:28:28 -0700783 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000784 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000785
786 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000787};
788
vjiaoblacke5de1302016-07-13 14:05:28 -0700789class SkTranslateZCommand : public SkDrawCommand {
790public:
791 SkTranslateZCommand(SkScalar);
792 void execute(SkCanvas* canvas) const override;
793 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
794 static SkTranslateZCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
795
796private:
797 SkScalar fZTranslate;
798
799 typedef SkDrawCommand INHERITED;
800};
chudy@google.com902ebe52012-06-29 14:21:22 +0000801#endif
vjiaoblacke6f5d562016-08-25 06:30:23 -0700802