blob: 9b81adad3fa6be4eda1e0d7b8130364fcaa9bc76 [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
ethannicholasf67531f2016-03-21 10:19:39 -070011#include "png.h"
12
chudy@google.com902ebe52012-06-29 14:21:22 +000013#include "SkCanvas.h"
bungemand3ebb482015-08-05 13:57:49 -070014#include "SkTLazy.h"
15#include "SkPath.h"
16#include "SkRRect.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
fmalita@google.com86681b32013-06-13 20:59:14 +000022class SK_API 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,
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,
31 kDrawBitmap_OpType,
32 kDrawBitmapNine_OpType,
33 kDrawBitmapRect_OpType,
34 kDrawClear_OpType,
35 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070036 kDrawImage_OpType,
37 kDrawImageRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080038 kDrawOval_OpType,
39 kDrawPaint_OpType,
40 kDrawPatch_OpType,
41 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080042 kDrawPoints_OpType,
43 kDrawPosText_OpType,
44 kDrawPosTextH_OpType,
45 kDrawRect_OpType,
46 kDrawRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080047 kDrawText_OpType,
48 kDrawTextBlob_OpType,
49 kDrawTextOnPath_OpType,
50 kDrawVertices_OpType,
fmalita160ebb22015-04-01 20:58:37 -070051 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080052 kRestore_OpType,
53 kSave_OpType,
54 kSaveLayer_OpType,
55 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080056
robertphillips9bafc302015-02-13 11:13:00 -080057 kLast_OpType = kSetMatrix_OpType
58 };
59
60 static const int kOpTypeCount = kLast_OpType + 1;
61
halcanary9d524f22016-03-29 09:03:52 -070062 static void WritePNG(const png_bytep rgba, png_uint_32 width, png_uint_32 height,
ethannicholasf67531f2016-03-21 10:19:39 -070063 SkWStream& out);
64
robertphillips9bafc302015-02-13 11:13:00 -080065 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000066
67 virtual ~SkDrawCommand();
68
fmalita8c89c522014-11-08 16:18:56 -080069 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000070
fmalita8c89c522014-11-08 16:18:56 -080071 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080072 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000073 }
74
chudy@google.com0b5bbb02012-07-31 19:55:32 +000075 bool isVisible() const {
76 return fVisible;
77 }
78
79 void setVisible(bool toggle) {
80 fVisible = toggle;
81 }
chudy@google.com902ebe52012-06-29 14:21:22 +000082
fmalita8c89c522014-11-08 16:18:56 -080083 const SkTDArray<SkString*>* Info() const { return &fInfo; }
84 virtual void execute(SkCanvas*) const = 0;
85 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070086
fmalita8c89c522014-11-08 16:18:56 -080087 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070088
mtkleinf0f14112014-12-12 08:46:25 -080089 // The next "active" system is only used by save, saveLayer, and restore.
90 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000091 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000092 // saves just return a kPushLayer action but don't track active state
93 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000094 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000095 enum Action {
96 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000097 kPopLayer_Action,
98 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000099 };
100 virtual Action action() const { return kNone_Action; }
101 virtual void setActive(bool active) {}
102 virtual bool active() const { return false; }
103
robertphillips9bafc302015-02-13 11:13:00 -0800104 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000105
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000106 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000107
ethannicholasf62a8b72016-02-11 10:35:21 -0800108 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -0800109
110 /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
111 * is the caller's responsibility to delete this object. This method may return null if an error
112 * occurs.
113 */
ethannicholasf62a8b72016-02-11 10:35:21 -0800114 static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800115
robertphillips9bafc302015-02-13 11:13:00 -0800116 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000117
joshualittbd724132016-03-03 11:39:38 -0800118 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -0700119 static Json::Value MakeJsonColor(const SkColor color);
120 static Json::Value MakeJsonPoint(const SkPoint& point);
121 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
122 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800123 static Json::Value MakeJsonIRect(const SkIRect&);
124 static Json::Value MakeJsonMatrix(const SkMatrix&);
brianosmanfad98562016-05-04 11:06:28 -0700125 static Json::Value MakeJsonPath(const SkPath& path);
126 static Json::Value MakeJsonRegion(const SkRegion& region);
127 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
128
129 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
130 UrlDataManager& urlDataManager);
131 static bool flatten(const SkImage& image, Json::Value* target,
132 UrlDataManager& urlDataManager);
133 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
134 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800135
chudy@google.com902ebe52012-06-29 14:21:22 +0000136protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000137 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000138
139private:
robertphillips9bafc302015-02-13 11:13:00 -0800140 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000141 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000142};
143
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000144class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000145public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000146 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700147 void execute(SkCanvas* canvas) const override;
148 Action action() const override { return kPopLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800149 static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000150
151private:
152 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000153};
154
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000155class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000156public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000157 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700158 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800159 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
160 static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800161
chudy@google.com902ebe52012-06-29 14:21:22 +0000162private:
163 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000164
165 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000166};
167
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000168class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000169public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000170 SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700171 void execute(SkCanvas* canvas) const override;
172 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800173 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
174 static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800175
chudy@google.com902ebe52012-06-29 14:21:22 +0000176private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000177 SkPath fPath;
chudy@google.com902ebe52012-06-29 14:21:22 +0000178 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000179 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000180
181 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000182};
183
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000184class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000185public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000186 SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
mtklein36352bf2015-03-25 18:17:31 -0700187 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800188 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
189 static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800190
chudy@google.com902ebe52012-06-29 14:21:22 +0000191private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000192 SkRegion fRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000193 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000194
195 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000196};
197
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000198class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000199public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000200 SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700201 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800202 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
203 static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000204
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000205 const SkRect& rect() const { return fRect; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000206 SkRegion::Op op() const { return fOp; }
207 bool doAA() const { return fDoAA; }
208
chudy@google.com902ebe52012-06-29 14:21:22 +0000209private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000210 SkRect fRect;
chudy@google.com902ebe52012-06-29 14:21:22 +0000211 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000212 bool fDoAA;
213
214 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000215};
216
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000217class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000218public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000219 SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700220 void execute(SkCanvas* canvas) const override;
221 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800222 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
223 static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000224
225 const SkRRect& rrect() const { return fRRect; }
226 SkRegion::Op op() const { return fOp; }
227 bool doAA() const { return fDoAA; }
228
robertphillips@google.com67baba42013-01-02 20:20:31 +0000229private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000230 SkRRect fRRect;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000231 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000232 bool fDoAA;
233
234 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000235};
236
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000237class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000238public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000239 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700240 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800241 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
242 static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800243
chudy@google.com902ebe52012-06-29 14:21:22 +0000244private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000245 SkMatrix fMatrix;
246
247 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000248};
249
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000250class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000251public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000252 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000253 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700254 void execute(SkCanvas* canvas) const override;
255 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800256 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
257 static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800258
chudy@google.com902ebe52012-06-29 14:21:22 +0000259private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000260 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000261 SkScalar fLeft;
262 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000263 SkPaint fPaint;
264 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000265
266 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000267};
268
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000269class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000270public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000271 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000272 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700273 void execute(SkCanvas* canvas) const override;
274 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800275 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
276 static SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800277
chudy@google.com902ebe52012-06-29 14:21:22 +0000278private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000279 SkBitmap fBitmap;
280 SkIRect fCenter;
281 SkRect fDst;
282 SkPaint fPaint;
283 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000284
285 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000286};
287
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000288class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000289public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000290 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000291 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700292 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700293 void execute(SkCanvas* canvas) const override;
294 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800295 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
296 static SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000297
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000298 const SkBitmap& bitmap() const { return fBitmap; }
299
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000300 // The non-const 'paint' method allows modification of this object's
301 // SkPaint. For this reason the ctor and setPaint method make a local copy.
302 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
303 // (since only an SkPaint* is passed into the ctor).
304 const SkPaint* paint() const { return fPaintPtr; }
305 SkPaint* paint() { return fPaintPtr; }
306
307 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
308
halcanary96fcdcc2015-08-27 07:41:13 -0700309 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000310 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000311
312 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000313 void setDstRect(const SkRect& dst) { fDst = dst; }
314
reeda5517e22015-07-14 10:54:12 -0700315 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
316 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000317
chudy@google.com902ebe52012-06-29 14:21:22 +0000318private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000319 SkBitmap fBitmap;
320 SkRect fSrc;
321 SkRect fDst;
322 SkPaint fPaint;
323 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700324 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000325
326 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000327};
328
fmalita651c9202015-07-22 10:23:01 -0700329class SkDrawImageCommand : public SkDrawCommand {
330public:
331 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
332 void execute(SkCanvas* canvas) const override;
333 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800334 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
335 static SkDrawImageCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800336
fmalita651c9202015-07-22 10:23:01 -0700337private:
338 SkAutoTUnref<const SkImage> fImage;
339 SkScalar fLeft;
340 SkScalar fTop;
341 SkTLazy<SkPaint> fPaint;
342
343 typedef SkDrawCommand INHERITED;
344};
345
346class SkDrawImageRectCommand : public SkDrawCommand {
347public:
348 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
349 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
350 void execute(SkCanvas* canvas) const override;
351 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800352 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
353 static SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800354
fmalita651c9202015-07-22 10:23:01 -0700355private:
356 SkAutoTUnref<const SkImage> fImage;
357 SkTLazy<SkRect> fSrc;
358 SkRect fDst;
359 SkTLazy<SkPaint> fPaint;
360 SkCanvas::SrcRectConstraint fConstraint;
361
362 typedef SkDrawCommand INHERITED;
363};
364
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000365class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000366public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000367 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700368 void execute(SkCanvas* canvas) const override;
369 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800370 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
371 static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800372
robertphillips@google.com67baba42013-01-02 20:20:31 +0000373private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000374 SkRect fOval;
375 SkPaint fPaint;
376
377 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000378};
379
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000380class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000381public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000382 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700383 void execute(SkCanvas* canvas) const override;
384 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800385 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
386 static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800387
chudy@google.com902ebe52012-06-29 14:21:22 +0000388private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000389 SkPaint fPaint;
390
391 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000392};
393
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000394class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000395public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000396 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700397 void execute(SkCanvas* canvas) const override;
398 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800399 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
400 static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000401
chudy@google.com902ebe52012-06-29 14:21:22 +0000402private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000403 SkPath fPath;
404 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000405
406 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000407};
408
fmalita160ebb22015-04-01 20:58:37 -0700409class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000410public:
fmalita160ebb22015-04-01 20:58:37 -0700411 SkBeginDrawPictureCommand(const SkPicture* picture,
412 const SkMatrix* matrix,
413 const SkPaint* paint);
414
mtklein36352bf2015-03-25 18:17:31 -0700415 void execute(SkCanvas* canvas) const override;
416 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000417
chudy@google.com902ebe52012-06-29 14:21:22 +0000418private:
robertphillips9b14f262014-06-04 05:40:44 -0700419 SkAutoTUnref<const SkPicture> fPicture;
fmalita160ebb22015-04-01 20:58:37 -0700420 SkTLazy<SkMatrix> fMatrix;
421 SkTLazy<SkPaint> fPaint;
422
423 typedef SkDrawCommand INHERITED;
424};
425
426class SkEndDrawPictureCommand : public SkDrawCommand {
427public:
428 SkEndDrawPictureCommand(bool restore);
429
430 void execute(SkCanvas* canvas) const override;
431
432private:
433 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000434
435 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000436};
437
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000438class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000439public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000440 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000441 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000442 virtual ~SkDrawPointsCommand() { delete [] fPts; }
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 SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800447
chudy@google.com902ebe52012-06-29 14:21:22 +0000448private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000449 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000450 size_t fCount;
451 SkPoint* fPts;
452 SkPaint fPaint;
453
454 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000455};
456
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000457class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000458public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000459 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000460 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000461 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700462 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800463 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
464 static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800465
chudy@google.com902ebe52012-06-29 14:21:22 +0000466private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000467 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000468 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000469 SkScalar fX;
470 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000471 SkPaint fPaint;
472
473 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000474};
475
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000476class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000477public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000478 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
479 const SkPaint& paint);
480 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700481 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800482 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
483 static SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800484
chudy@google.com902ebe52012-06-29 14:21:22 +0000485private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000486 char* fText;
487 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000488 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000489 SkPaint fPaint;
490
491 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000492};
493
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000494class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000495public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000496 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
497 const SkMatrix* matrix, const SkPaint& paint);
498 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700499 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800500 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
501 static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800502
chudy@google.com902ebe52012-06-29 14:21:22 +0000503private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000504 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000505 size_t fByteLength;
506 SkPath fPath;
507 SkMatrix fMatrix;
508 SkPaint fPaint;
509
510 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000511};
512
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000513class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000514public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000515 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
516 SkScalar constY, const SkPaint& paint);
517 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700518 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800519 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
520 static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800521
chudy@google.com902ebe52012-06-29 14:21:22 +0000522private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000523 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000524 char* fText;
525 size_t fByteLength;
526 SkScalar fConstY;
527 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000528
529 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000530};
531
fmalitab7425172014-08-26 07:56:44 -0700532class SkDrawTextBlobCommand : public SkDrawCommand {
533public:
534 SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);
535
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 SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
fmalitab7425172014-08-26 07:56:44 -0700540
541private:
542 SkAutoTUnref<const SkTextBlob> fBlob;
543 SkScalar fXPos;
544 SkScalar fYPos;
545 SkPaint fPaint;
546
547 typedef SkDrawCommand INHERITED;
548};
549
robertphillips9bafc302015-02-13 11:13:00 -0800550class SkDrawPatchCommand : public SkDrawCommand {
551public:
552 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
553 const SkPoint texCoords[4], SkXfermode* xmode,
554 const SkPaint& paint);
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 SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips9bafc302015-02-13 11:13:00 -0800558
559private:
560 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800561 SkColor* fColorsPtr;
562 SkColor fColors[4];
563 SkPoint* fTexCoordsPtr;
564 SkPoint fTexCoords[4];
robertphillips9bafc302015-02-13 11:13:00 -0800565 SkAutoTUnref<SkXfermode> fXfermode;
566 SkPaint fPaint;
567
568 typedef SkDrawCommand INHERITED;
569};
570
571
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000572class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000573public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000574 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700575 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800576 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
577 static SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000578
robertphillips@google.com91217d02013-03-17 18:33:46 +0000579 const SkRect& rect() const { return fRect; }
580 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000581private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000582 SkRect fRect;
583 SkPaint fPaint;
584
585 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000586};
587
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000588class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000589public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000590 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700591 void execute(SkCanvas* canvas) const override;
592 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800593 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
594 static SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800595
robertphillips@google.com67baba42013-01-02 20:20:31 +0000596private:
597 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000598 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000599
600 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000601};
602
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000603class SkDrawDRRectCommand : public SkDrawCommand {
604public:
605 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
606 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700607 void execute(SkCanvas* canvas) const override;
608 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800609 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
610 static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800611
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000612private:
613 SkRRect fOuter;
614 SkRRect fInner;
615 SkPaint fPaint;
616
617 typedef SkDrawCommand INHERITED;
618};
619
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000620class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000621public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000622 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
623 const SkPoint vertices[], const SkPoint texs[],
624 const SkColor colors[], SkXfermode* xfermode,
625 const uint16_t indices[], int indexCount,
626 const SkPaint& paint);
627 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700628 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800629
chudy@google.com902ebe52012-06-29 14:21:22 +0000630private:
631 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000632 int fVertexCount;
633 SkPoint* fVertices;
634 SkPoint* fTexs;
635 SkColor* fColors;
chudy@google.com902ebe52012-06-29 14:21:22 +0000636 SkXfermode* fXfermode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000637 uint16_t* fIndices;
638 int fIndexCount;
639 SkPaint fPaint;
640
641 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000642};
643
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000644class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000645public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400646 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700647 void execute(SkCanvas* canvas) const override;
648 Action action() const override { return kPushLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800649 static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800650
chudy@google.com902ebe52012-06-29 14:21:22 +0000651private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000652 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000653};
654
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000655class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000656public:
reed4960eee2015-12-18 07:09:18 -0800657 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
ethannicholas50a8dd02016-02-10 05:40:46 -0800658 virtual ~SkSaveLayerCommand();
mtklein36352bf2015-03-25 18:17:31 -0700659 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800660 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
661 static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
mtklein36352bf2015-03-25 18:17:31 -0700662 void vizExecute(SkCanvas* canvas) const override;
663 Action action() const override{ return kPushLayer_Action; }
664 void setActive(bool active) override { fActive = active; }
665 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000666
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000667 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000668
chudy@google.com902ebe52012-06-29 14:21:22 +0000669private:
ethannicholas50a8dd02016-02-10 05:40:46 -0800670 SkRect fBounds;
671 SkPaint fPaint;
672 SkPaint* fPaintPtr;
673 const SkImageFilter* fBackdrop;
674 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000675
reed4960eee2015-12-18 07:09:18 -0800676 bool fActive;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000677
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000678 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000679};
680
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000681class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000682public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000683 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700684 void setUserMatrix(const SkMatrix&) override;
685 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800686 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
687 static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800688
chudy@google.com902ebe52012-06-29 14:21:22 +0000689private:
robertphillips70171682014-10-16 14:28:28 -0700690 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000691 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000692
693 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000694};
695
chudy@google.com902ebe52012-06-29 14:21:22 +0000696#endif