blob: 8b8ada267fa8845f1fa243f60bfe205f8891715b [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,
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,
51 kDrawVertices_OpType,
fmalita160ebb22015-04-01 20:58:37 -070052 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080053 kRestore_OpType,
54 kSave_OpType,
55 kSaveLayer_OpType,
56 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080057
robertphillips9bafc302015-02-13 11:13:00 -080058 kLast_OpType = kSetMatrix_OpType
59 };
60
61 static const int kOpTypeCount = kLast_OpType + 1;
62
halcanary9d524f22016-03-29 09:03:52 -070063 static void WritePNG(const png_bytep rgba, png_uint_32 width, png_uint_32 height,
msaretta5cf4f42016-06-30 10:06:51 -070064 SkWStream& out, bool isOpaque);
ethannicholasf67531f2016-03-21 10:19:39 -070065
robertphillips9bafc302015-02-13 11:13:00 -080066 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000067
68 virtual ~SkDrawCommand();
69
fmalita8c89c522014-11-08 16:18:56 -080070 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000071
fmalita8c89c522014-11-08 16:18:56 -080072 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080073 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000074 }
75
chudy@google.com0b5bbb02012-07-31 19:55:32 +000076 bool isVisible() const {
77 return fVisible;
78 }
79
80 void setVisible(bool toggle) {
81 fVisible = toggle;
82 }
chudy@google.com902ebe52012-06-29 14:21:22 +000083
fmalita8c89c522014-11-08 16:18:56 -080084 const SkTDArray<SkString*>* Info() const { return &fInfo; }
85 virtual void execute(SkCanvas*) const = 0;
86 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070087
fmalita8c89c522014-11-08 16:18:56 -080088 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070089
mtkleinf0f14112014-12-12 08:46:25 -080090 // The next "active" system is only used by save, saveLayer, and restore.
91 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000092 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000093 // saves just return a kPushLayer action but don't track active state
94 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000095 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000096 enum Action {
97 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000098 kPopLayer_Action,
99 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000100 };
101 virtual Action action() const { return kNone_Action; }
102 virtual void setActive(bool active) {}
103 virtual bool active() const { return false; }
104
robertphillips9bafc302015-02-13 11:13:00 -0800105 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000106
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000107 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000108
ethannicholasf62a8b72016-02-11 10:35:21 -0800109 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -0800110
111 /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
112 * is the caller's responsibility to delete this object. This method may return null if an error
113 * occurs.
114 */
ethannicholasf62a8b72016-02-11 10:35:21 -0800115 static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800116
robertphillips9bafc302015-02-13 11:13:00 -0800117 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000118
joshualittbd724132016-03-03 11:39:38 -0800119 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -0700120 static Json::Value MakeJsonColor(const SkColor color);
121 static Json::Value MakeJsonPoint(const SkPoint& point);
122 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
123 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800124 static Json::Value MakeJsonIRect(const SkIRect&);
125 static Json::Value MakeJsonMatrix(const SkMatrix&);
brianosmanfad98562016-05-04 11:06:28 -0700126 static Json::Value MakeJsonPath(const SkPath& path);
127 static Json::Value MakeJsonRegion(const SkRegion& region);
128 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
129
130 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
131 UrlDataManager& urlDataManager);
132 static bool flatten(const SkImage& image, Json::Value* target,
133 UrlDataManager& urlDataManager);
134 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
135 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800136
chudy@google.com902ebe52012-06-29 14:21:22 +0000137protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000138 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000139
140private:
robertphillips9bafc302015-02-13 11:13:00 -0800141 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000142 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000143};
144
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000145class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000146public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000147 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700148 void execute(SkCanvas* canvas) const override;
149 Action action() const override { return kPopLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800150 static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000151
152private:
153 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000154};
155
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000156class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000157public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000158 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700159 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800160 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
161 static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800162
chudy@google.com902ebe52012-06-29 14:21:22 +0000163private:
164 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000165
166 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000167};
168
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000169class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000170public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000171 SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700172 void execute(SkCanvas* canvas) const override;
173 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800174 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
175 static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800176
chudy@google.com902ebe52012-06-29 14:21:22 +0000177private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000178 SkPath fPath;
chudy@google.com902ebe52012-06-29 14:21:22 +0000179 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000180 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000181
182 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000183};
184
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000185class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000186public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000187 SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
mtklein36352bf2015-03-25 18:17:31 -0700188 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800189 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
190 static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800191
chudy@google.com902ebe52012-06-29 14:21:22 +0000192private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000193 SkRegion fRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000194 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000195
196 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000197};
198
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000199class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000200public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000201 SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700202 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800203 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
204 static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000205
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000206 const SkRect& rect() const { return fRect; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000207 SkRegion::Op op() const { return fOp; }
208 bool doAA() const { return fDoAA; }
209
chudy@google.com902ebe52012-06-29 14:21:22 +0000210private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000211 SkRect fRect;
chudy@google.com902ebe52012-06-29 14:21:22 +0000212 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000213 bool fDoAA;
214
215 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000216};
217
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000218class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000219public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000220 SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700221 void execute(SkCanvas* canvas) const override;
222 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800223 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
224 static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000225
226 const SkRRect& rrect() const { return fRRect; }
227 SkRegion::Op op() const { return fOp; }
228 bool doAA() const { return fDoAA; }
229
robertphillips@google.com67baba42013-01-02 20:20:31 +0000230private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000231 SkRRect fRRect;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000232 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000233 bool fDoAA;
234
235 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000236};
237
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000238class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000239public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000240 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700241 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800242 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
243 static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800244
chudy@google.com902ebe52012-06-29 14:21:22 +0000245private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000246 SkMatrix fMatrix;
247
248 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000249};
250
reed97660cc2016-06-28 18:54:19 -0700251class SkDrawAnnotationCommand : public SkDrawCommand {
252public:
253 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
254 void execute(SkCanvas* canvas) const override;
255 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
256 static SkDrawAnnotationCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
257
258private:
259 SkRect fRect;
260 SkString fKey;
261 sk_sp<SkData> fValue;
262
263 typedef SkDrawCommand INHERITED;
264};
265
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000266class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000267public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000268 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000269 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700270 void execute(SkCanvas* canvas) const override;
271 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800272 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
273 static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800274
chudy@google.com902ebe52012-06-29 14:21:22 +0000275private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000276 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000277 SkScalar fLeft;
278 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000279 SkPaint fPaint;
280 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000281
282 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000283};
284
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000285class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000286public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000287 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000288 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700289 void execute(SkCanvas* canvas) const override;
290 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800291 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
292 static SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800293
chudy@google.com902ebe52012-06-29 14:21:22 +0000294private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000295 SkBitmap fBitmap;
296 SkIRect fCenter;
297 SkRect fDst;
298 SkPaint fPaint;
299 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000300
301 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000302};
303
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000304class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000305public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000306 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000307 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700308 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700309 void execute(SkCanvas* canvas) const override;
310 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800311 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
312 static SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000313
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000314 const SkBitmap& bitmap() const { return fBitmap; }
315
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000316 // The non-const 'paint' method allows modification of this object's
317 // SkPaint. For this reason the ctor and setPaint method make a local copy.
318 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
319 // (since only an SkPaint* is passed into the ctor).
320 const SkPaint* paint() const { return fPaintPtr; }
321 SkPaint* paint() { return fPaintPtr; }
322
323 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
324
halcanary96fcdcc2015-08-27 07:41:13 -0700325 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000326 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000327
328 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000329 void setDstRect(const SkRect& dst) { fDst = dst; }
330
reeda5517e22015-07-14 10:54:12 -0700331 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
332 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000333
chudy@google.com902ebe52012-06-29 14:21:22 +0000334private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000335 SkBitmap fBitmap;
336 SkRect fSrc;
337 SkRect fDst;
338 SkPaint fPaint;
339 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700340 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000341
342 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000343};
344
fmalita651c9202015-07-22 10:23:01 -0700345class SkDrawImageCommand : public SkDrawCommand {
346public:
347 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
348 void execute(SkCanvas* canvas) const override;
349 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800350 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
351 static SkDrawImageCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800352
fmalita651c9202015-07-22 10:23:01 -0700353private:
354 SkAutoTUnref<const SkImage> fImage;
355 SkScalar fLeft;
356 SkScalar fTop;
357 SkTLazy<SkPaint> fPaint;
358
359 typedef SkDrawCommand INHERITED;
360};
361
362class SkDrawImageRectCommand : public SkDrawCommand {
363public:
364 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
365 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
366 void execute(SkCanvas* canvas) const override;
367 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800368 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
369 static SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800370
fmalita651c9202015-07-22 10:23:01 -0700371private:
372 SkAutoTUnref<const SkImage> fImage;
373 SkTLazy<SkRect> fSrc;
374 SkRect fDst;
375 SkTLazy<SkPaint> fPaint;
376 SkCanvas::SrcRectConstraint fConstraint;
377
378 typedef SkDrawCommand INHERITED;
379};
380
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000381class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000382public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000383 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700384 void execute(SkCanvas* canvas) const override;
385 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800386 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
387 static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800388
robertphillips@google.com67baba42013-01-02 20:20:31 +0000389private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000390 SkRect fOval;
391 SkPaint fPaint;
392
393 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000394};
395
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000396class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000397public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000398 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700399 void execute(SkCanvas* canvas) const override;
400 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800401 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
402 static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800403
chudy@google.com902ebe52012-06-29 14:21:22 +0000404private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000405 SkPaint fPaint;
406
407 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000408};
409
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000410class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000411public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000412 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700413 void execute(SkCanvas* canvas) const override;
414 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800415 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
416 static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000417
chudy@google.com902ebe52012-06-29 14:21:22 +0000418private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000419 SkPath fPath;
420 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000421
422 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000423};
424
fmalita160ebb22015-04-01 20:58:37 -0700425class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000426public:
fmalita160ebb22015-04-01 20:58:37 -0700427 SkBeginDrawPictureCommand(const SkPicture* picture,
428 const SkMatrix* matrix,
429 const SkPaint* paint);
430
mtklein36352bf2015-03-25 18:17:31 -0700431 void execute(SkCanvas* canvas) const override;
432 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000433
chudy@google.com902ebe52012-06-29 14:21:22 +0000434private:
robertphillips9b14f262014-06-04 05:40:44 -0700435 SkAutoTUnref<const SkPicture> fPicture;
fmalita160ebb22015-04-01 20:58:37 -0700436 SkTLazy<SkMatrix> fMatrix;
437 SkTLazy<SkPaint> fPaint;
438
439 typedef SkDrawCommand INHERITED;
440};
441
442class SkEndDrawPictureCommand : public SkDrawCommand {
443public:
444 SkEndDrawPictureCommand(bool restore);
445
446 void execute(SkCanvas* canvas) const override;
447
448private:
449 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000450
451 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000452};
453
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000454class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000455public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000456 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000457 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000458 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700459 void execute(SkCanvas* canvas) const override;
460 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800461 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
462 static SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800463
chudy@google.com902ebe52012-06-29 14:21:22 +0000464private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000465 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000466 size_t fCount;
467 SkPoint* fPts;
468 SkPaint fPaint;
469
470 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000471};
472
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000473class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000474public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000475 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000476 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000477 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700478 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800479 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
480 static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800481
chudy@google.com902ebe52012-06-29 14:21:22 +0000482private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000483 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000484 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000485 SkScalar fX;
486 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000487 SkPaint fPaint;
488
489 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000490};
491
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000492class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000493public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000494 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
495 const SkPaint& paint);
496 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700497 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800498 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
499 static SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800500
chudy@google.com902ebe52012-06-29 14:21:22 +0000501private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000502 char* fText;
503 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000504 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000505 SkPaint fPaint;
506
507 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000508};
509
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000510class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000511public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000512 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
513 const SkMatrix* matrix, const SkPaint& paint);
514 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700515 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800516 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
517 static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800518
chudy@google.com902ebe52012-06-29 14:21:22 +0000519private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000520 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000521 size_t fByteLength;
522 SkPath fPath;
523 SkMatrix fMatrix;
524 SkPaint fPaint;
525
526 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000527};
528
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000529class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000530public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000531 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
532 SkScalar constY, const SkPaint& paint);
533 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700534 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800535 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
536 static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800537
chudy@google.com902ebe52012-06-29 14:21:22 +0000538private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000539 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000540 char* fText;
541 size_t fByteLength;
542 SkScalar fConstY;
543 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000544
545 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000546};
547
fmalitab7425172014-08-26 07:56:44 -0700548class SkDrawTextBlobCommand : public SkDrawCommand {
549public:
550 SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);
551
mtklein36352bf2015-03-25 18:17:31 -0700552 void execute(SkCanvas* canvas) const override;
553 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800554 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
555 static SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
fmalitab7425172014-08-26 07:56:44 -0700556
557private:
558 SkAutoTUnref<const SkTextBlob> fBlob;
559 SkScalar fXPos;
560 SkScalar fYPos;
561 SkPaint fPaint;
562
563 typedef SkDrawCommand INHERITED;
564};
565
robertphillips9bafc302015-02-13 11:13:00 -0800566class SkDrawPatchCommand : public SkDrawCommand {
567public:
568 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
569 const SkPoint texCoords[4], SkXfermode* xmode,
570 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700571 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800572 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
573 static SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips9bafc302015-02-13 11:13:00 -0800574
575private:
576 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800577 SkColor* fColorsPtr;
578 SkColor fColors[4];
579 SkPoint* fTexCoordsPtr;
580 SkPoint fTexCoords[4];
robertphillips9bafc302015-02-13 11:13:00 -0800581 SkAutoTUnref<SkXfermode> fXfermode;
582 SkPaint fPaint;
583
584 typedef SkDrawCommand INHERITED;
585};
586
587
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000588class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000589public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000590 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700591 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800592 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
593 static SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000594
robertphillips@google.com91217d02013-03-17 18:33:46 +0000595 const SkRect& rect() const { return fRect; }
596 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000597private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000598 SkRect fRect;
599 SkPaint fPaint;
600
601 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000602};
603
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000604class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000605public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000606 SkDrawRRectCommand(const SkRRect& rrect, 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 SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800611
robertphillips@google.com67baba42013-01-02 20:20:31 +0000612private:
613 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000614 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000615
616 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000617};
618
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000619class SkDrawDRRectCommand : public SkDrawCommand {
620public:
621 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
622 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700623 void execute(SkCanvas* canvas) const override;
624 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800625 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
626 static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800627
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000628private:
629 SkRRect fOuter;
630 SkRRect fInner;
631 SkPaint fPaint;
632
633 typedef SkDrawCommand INHERITED;
634};
635
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000636class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000637public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000638 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
639 const SkPoint vertices[], const SkPoint texs[],
640 const SkColor colors[], SkXfermode* xfermode,
641 const uint16_t indices[], int indexCount,
642 const SkPaint& paint);
643 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700644 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800645
chudy@google.com902ebe52012-06-29 14:21:22 +0000646private:
647 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000648 int fVertexCount;
649 SkPoint* fVertices;
650 SkPoint* fTexs;
651 SkColor* fColors;
chudy@google.com902ebe52012-06-29 14:21:22 +0000652 SkXfermode* fXfermode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000653 uint16_t* fIndices;
654 int fIndexCount;
655 SkPaint fPaint;
656
657 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000658};
659
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000660class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000661public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400662 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700663 void execute(SkCanvas* canvas) const override;
664 Action action() const override { return kPushLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800665 static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800666
chudy@google.com902ebe52012-06-29 14:21:22 +0000667private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000668 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000669};
670
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000671class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000672public:
reed4960eee2015-12-18 07:09:18 -0800673 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
ethannicholas50a8dd02016-02-10 05:40:46 -0800674 virtual ~SkSaveLayerCommand();
mtklein36352bf2015-03-25 18:17:31 -0700675 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800676 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
677 static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
mtklein36352bf2015-03-25 18:17:31 -0700678 void vizExecute(SkCanvas* canvas) const override;
679 Action action() const override{ return kPushLayer_Action; }
680 void setActive(bool active) override { fActive = active; }
681 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000682
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000683 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000684
chudy@google.com902ebe52012-06-29 14:21:22 +0000685private:
ethannicholas50a8dd02016-02-10 05:40:46 -0800686 SkRect fBounds;
687 SkPaint fPaint;
688 SkPaint* fPaintPtr;
689 const SkImageFilter* fBackdrop;
690 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000691
reed4960eee2015-12-18 07:09:18 -0800692 bool fActive;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000693
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000694 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000695};
696
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000697class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000698public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000699 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700700 void setUserMatrix(const SkMatrix&) override;
701 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800702 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
703 static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800704
chudy@google.com902ebe52012-06-29 14:21:22 +0000705private:
robertphillips70171682014-10-16 14:28:28 -0700706 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000707 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000708
709 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000710};
711
chudy@google.com902ebe52012-06-29 14:21:22 +0000712#endif