blob: dc639ec3a3d0751d43a1c925b54b31a144dc78f0 [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"
reed45561a02016-07-07 12:47:17 -070017#include "SkRSXform.h"
robertphillips@google.com0a4805e2013-05-29 13:24:23 +000018#include "SkString.h"
bungemand3ebb482015-08-05 13:57:49 -070019#include "SkTDArray.h"
ethannicholas50a8dd02016-02-10 05:40:46 -080020#include "SkJSONCPP.h"
ethannicholasf62a8b72016-02-11 10:35:21 -080021#include "UrlDataManager.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000022
fmalita@google.com86681b32013-06-13 20:59:14 +000023class SK_API SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000024public:
robertphillips9bafc302015-02-13 11:13:00 -080025 enum OpType {
fmalita160ebb22015-04-01 20:58:37 -070026 kBeginDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080027 kClipPath_OpType,
28 kClipRegion_OpType,
29 kClipRect_OpType,
30 kClipRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080031 kConcat_OpType,
reed97660cc2016-06-28 18:54:19 -070032 kDrawAnnotation_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080033 kDrawBitmap_OpType,
34 kDrawBitmapNine_OpType,
35 kDrawBitmapRect_OpType,
36 kDrawClear_OpType,
37 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070038 kDrawImage_OpType,
39 kDrawImageRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080040 kDrawOval_OpType,
41 kDrawPaint_OpType,
42 kDrawPatch_OpType,
43 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080044 kDrawPoints_OpType,
45 kDrawPosText_OpType,
46 kDrawPosTextH_OpType,
47 kDrawRect_OpType,
48 kDrawRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080049 kDrawText_OpType,
50 kDrawTextBlob_OpType,
51 kDrawTextOnPath_OpType,
reed45561a02016-07-07 12:47:17 -070052 kDrawTextRSXform_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080053 kDrawVertices_OpType,
fmalita160ebb22015-04-01 20:58:37 -070054 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080055 kRestore_OpType,
56 kSave_OpType,
57 kSaveLayer_OpType,
58 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080059
robertphillips9bafc302015-02-13 11:13:00 -080060 kLast_OpType = kSetMatrix_OpType
61 };
62
63 static const int kOpTypeCount = kLast_OpType + 1;
64
halcanary9d524f22016-03-29 09:03:52 -070065 static void WritePNG(const png_bytep rgba, png_uint_32 width, png_uint_32 height,
msaretta5cf4f42016-06-30 10:06:51 -070066 SkWStream& out, bool isOpaque);
ethannicholasf67531f2016-03-21 10:19:39 -070067
robertphillips9bafc302015-02-13 11:13:00 -080068 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000069
70 virtual ~SkDrawCommand();
71
fmalita8c89c522014-11-08 16:18:56 -080072 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000073
fmalita8c89c522014-11-08 16:18:56 -080074 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080075 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000076 }
77
chudy@google.com0b5bbb02012-07-31 19:55:32 +000078 bool isVisible() const {
79 return fVisible;
80 }
81
82 void setVisible(bool toggle) {
83 fVisible = toggle;
84 }
chudy@google.com902ebe52012-06-29 14:21:22 +000085
fmalita8c89c522014-11-08 16:18:56 -080086 const SkTDArray<SkString*>* Info() const { return &fInfo; }
87 virtual void execute(SkCanvas*) const = 0;
88 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070089
fmalita8c89c522014-11-08 16:18:56 -080090 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070091
mtkleinf0f14112014-12-12 08:46:25 -080092 // The next "active" system is only used by save, saveLayer, and restore.
93 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000094 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000095 // saves just return a kPushLayer action but don't track active state
96 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000097 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000098 enum Action {
99 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +0000100 kPopLayer_Action,
101 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000102 };
103 virtual Action action() const { return kNone_Action; }
104 virtual void setActive(bool active) {}
105 virtual bool active() const { return false; }
106
robertphillips9bafc302015-02-13 11:13:00 -0800107 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000108
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000109 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000110
ethannicholasf62a8b72016-02-11 10:35:21 -0800111 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -0800112
113 /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
114 * is the caller's responsibility to delete this object. This method may return null if an error
115 * occurs.
116 */
ethannicholasf62a8b72016-02-11 10:35:21 -0800117 static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800118
robertphillips9bafc302015-02-13 11:13:00 -0800119 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000120
joshualittbd724132016-03-03 11:39:38 -0800121 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -0700122 static Json::Value MakeJsonColor(const SkColor color);
123 static Json::Value MakeJsonPoint(const SkPoint& point);
124 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
125 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800126 static Json::Value MakeJsonIRect(const SkIRect&);
127 static Json::Value MakeJsonMatrix(const SkMatrix&);
brianosmanfad98562016-05-04 11:06:28 -0700128 static Json::Value MakeJsonPath(const SkPath& path);
129 static Json::Value MakeJsonRegion(const SkRegion& region);
130 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
131
132 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
133 UrlDataManager& urlDataManager);
134 static bool flatten(const SkImage& image, Json::Value* target,
135 UrlDataManager& urlDataManager);
136 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
137 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800138
chudy@google.com902ebe52012-06-29 14:21:22 +0000139protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000140 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000141
142private:
robertphillips9bafc302015-02-13 11:13:00 -0800143 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000144 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000145};
146
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000147class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000148public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000149 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700150 void execute(SkCanvas* canvas) const override;
151 Action action() const override { return kPopLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800152 static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000153
154private:
155 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000156};
157
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000158class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000159public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000160 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700161 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800162 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
163 static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800164
chudy@google.com902ebe52012-06-29 14:21:22 +0000165private:
166 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000167
168 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000169};
170
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000171class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000172public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000173 SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700174 void execute(SkCanvas* canvas) const override;
175 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800176 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
177 static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800178
chudy@google.com902ebe52012-06-29 14:21:22 +0000179private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000180 SkPath fPath;
chudy@google.com902ebe52012-06-29 14:21:22 +0000181 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000182 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000183
184 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000185};
186
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000187class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000188public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000189 SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
mtklein36352bf2015-03-25 18:17:31 -0700190 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800191 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
192 static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800193
chudy@google.com902ebe52012-06-29 14:21:22 +0000194private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000195 SkRegion fRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000196 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000197
198 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000199};
200
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000201class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000202public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000203 SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700204 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800205 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
206 static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000207
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000208 const SkRect& rect() const { return fRect; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000209 SkRegion::Op op() const { return fOp; }
210 bool doAA() const { return fDoAA; }
211
chudy@google.com902ebe52012-06-29 14:21:22 +0000212private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000213 SkRect fRect;
chudy@google.com902ebe52012-06-29 14:21:22 +0000214 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000215 bool fDoAA;
216
217 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000218};
219
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000220class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000221public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000222 SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700223 void execute(SkCanvas* canvas) const override;
224 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800225 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
226 static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000227
228 const SkRRect& rrect() const { return fRRect; }
229 SkRegion::Op op() const { return fOp; }
230 bool doAA() const { return fDoAA; }
231
robertphillips@google.com67baba42013-01-02 20:20:31 +0000232private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000233 SkRRect fRRect;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000234 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000235 bool fDoAA;
236
237 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000238};
239
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000240class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000241public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000242 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700243 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800244 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
245 static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800246
chudy@google.com902ebe52012-06-29 14:21:22 +0000247private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000248 SkMatrix fMatrix;
249
250 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000251};
252
reed97660cc2016-06-28 18:54:19 -0700253class SkDrawAnnotationCommand : public SkDrawCommand {
254public:
255 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
256 void execute(SkCanvas* canvas) const override;
257 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
258 static SkDrawAnnotationCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
259
260private:
261 SkRect fRect;
262 SkString fKey;
263 sk_sp<SkData> fValue;
264
265 typedef SkDrawCommand INHERITED;
266};
267
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000268class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000269public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000270 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000271 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700272 void execute(SkCanvas* canvas) const override;
273 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800274 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
275 static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800276
chudy@google.com902ebe52012-06-29 14:21:22 +0000277private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000278 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000279 SkScalar fLeft;
280 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000281 SkPaint fPaint;
282 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000283
284 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000285};
286
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000287class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000288public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000289 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000290 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700291 void execute(SkCanvas* canvas) const override;
292 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800293 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
294 static SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800295
chudy@google.com902ebe52012-06-29 14:21:22 +0000296private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000297 SkBitmap fBitmap;
298 SkIRect fCenter;
299 SkRect fDst;
300 SkPaint fPaint;
301 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000302
303 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000304};
305
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000306class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000307public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000308 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000309 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700310 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700311 void execute(SkCanvas* canvas) const override;
312 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800313 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
314 static SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000315
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000316 const SkBitmap& bitmap() const { return fBitmap; }
317
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000318 // The non-const 'paint' method allows modification of this object's
319 // SkPaint. For this reason the ctor and setPaint method make a local copy.
320 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
321 // (since only an SkPaint* is passed into the ctor).
322 const SkPaint* paint() const { return fPaintPtr; }
323 SkPaint* paint() { return fPaintPtr; }
324
325 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
326
halcanary96fcdcc2015-08-27 07:41:13 -0700327 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000328 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000329
330 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000331 void setDstRect(const SkRect& dst) { fDst = dst; }
332
reeda5517e22015-07-14 10:54:12 -0700333 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
334 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000335
chudy@google.com902ebe52012-06-29 14:21:22 +0000336private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000337 SkBitmap fBitmap;
338 SkRect fSrc;
339 SkRect fDst;
340 SkPaint fPaint;
341 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700342 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000343
344 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000345};
346
fmalita651c9202015-07-22 10:23:01 -0700347class SkDrawImageCommand : public SkDrawCommand {
348public:
349 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
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 SkDrawImageCommand* 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 SkScalar fLeft;
358 SkScalar fTop;
359 SkTLazy<SkPaint> fPaint;
360
361 typedef SkDrawCommand INHERITED;
362};
363
364class SkDrawImageRectCommand : public SkDrawCommand {
365public:
366 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
367 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
368 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 SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800372
fmalita651c9202015-07-22 10:23:01 -0700373private:
374 SkAutoTUnref<const SkImage> fImage;
375 SkTLazy<SkRect> fSrc;
376 SkRect fDst;
377 SkTLazy<SkPaint> fPaint;
378 SkCanvas::SrcRectConstraint fConstraint;
379
380 typedef SkDrawCommand INHERITED;
381};
382
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000383class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000384public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000385 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700386 void execute(SkCanvas* canvas) const override;
387 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800388 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
389 static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800390
robertphillips@google.com67baba42013-01-02 20:20:31 +0000391private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000392 SkRect fOval;
393 SkPaint fPaint;
394
395 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000396};
397
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000398class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000399public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000400 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700401 void execute(SkCanvas* canvas) const override;
402 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800403 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
404 static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800405
chudy@google.com902ebe52012-06-29 14:21:22 +0000406private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000407 SkPaint fPaint;
408
409 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000410};
411
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000412class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000413public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000414 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700415 void execute(SkCanvas* canvas) const override;
416 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800417 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
418 static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000419
chudy@google.com902ebe52012-06-29 14:21:22 +0000420private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000421 SkPath fPath;
422 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000423
424 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000425};
426
fmalita160ebb22015-04-01 20:58:37 -0700427class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000428public:
fmalita160ebb22015-04-01 20:58:37 -0700429 SkBeginDrawPictureCommand(const SkPicture* picture,
430 const SkMatrix* matrix,
431 const SkPaint* paint);
432
mtklein36352bf2015-03-25 18:17:31 -0700433 void execute(SkCanvas* canvas) const override;
434 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000435
chudy@google.com902ebe52012-06-29 14:21:22 +0000436private:
robertphillips9b14f262014-06-04 05:40:44 -0700437 SkAutoTUnref<const SkPicture> fPicture;
fmalita160ebb22015-04-01 20:58:37 -0700438 SkTLazy<SkMatrix> fMatrix;
439 SkTLazy<SkPaint> fPaint;
440
441 typedef SkDrawCommand INHERITED;
442};
443
444class SkEndDrawPictureCommand : public SkDrawCommand {
445public:
446 SkEndDrawPictureCommand(bool restore);
447
448 void execute(SkCanvas* canvas) const override;
449
450private:
451 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000452
453 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000454};
455
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000456class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000457public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000458 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000459 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000460 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700461 void execute(SkCanvas* canvas) const override;
462 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800463 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
464 static SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800465
chudy@google.com902ebe52012-06-29 14:21:22 +0000466private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000467 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000468 size_t fCount;
469 SkPoint* fPts;
470 SkPaint fPaint;
471
472 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000473};
474
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000475class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000476public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000477 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000478 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000479 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700480 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800481 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
482 static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800483
chudy@google.com902ebe52012-06-29 14:21:22 +0000484private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000485 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000486 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000487 SkScalar fX;
488 SkScalar fY;
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 SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000495public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000496 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
497 const SkPaint& paint);
498 virtual ~SkDrawPosTextCommand() { delete [] fPos; 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 SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800502
chudy@google.com902ebe52012-06-29 14:21:22 +0000503private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000504 char* fText;
505 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000506 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000507 SkPaint fPaint;
508
509 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000510};
511
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000512class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000513public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000514 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
515 const SkMatrix* matrix, const SkPaint& paint);
516 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700517 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800518 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
519 static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800520
chudy@google.com902ebe52012-06-29 14:21:22 +0000521private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000522 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000523 size_t fByteLength;
524 SkPath fPath;
525 SkMatrix fMatrix;
526 SkPaint fPaint;
527
528 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000529};
530
reed45561a02016-07-07 12:47:17 -0700531class SkDrawTextRSXformCommand : public SkDrawCommand {
532public:
533 SkDrawTextRSXformCommand(const void* text, size_t byteLength, const SkRSXform[],
534 const SkRect*, const SkPaint& paint);
535 ~SkDrawTextRSXformCommand() override { delete[] fText; delete[] fXform; }
536 void execute(SkCanvas* canvas) const override;
537 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
538 static SkDrawTextRSXformCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
539
540private:
541 char* fText;
542 size_t fByteLength;
543 SkRSXform* fXform;
544 SkRect* fCull;
545 SkRect fCullStorage;
546 SkPaint fPaint;
547
548 typedef SkDrawCommand INHERITED;
549};
550
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000551class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000552public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000553 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
554 SkScalar constY, const SkPaint& paint);
555 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700556 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800557 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
558 static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800559
chudy@google.com902ebe52012-06-29 14:21:22 +0000560private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000561 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000562 char* fText;
563 size_t fByteLength;
564 SkScalar fConstY;
565 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000566
567 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000568};
569
fmalitab7425172014-08-26 07:56:44 -0700570class SkDrawTextBlobCommand : public SkDrawCommand {
571public:
572 SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);
573
mtklein36352bf2015-03-25 18:17:31 -0700574 void execute(SkCanvas* canvas) const override;
575 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800576 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
577 static SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
fmalitab7425172014-08-26 07:56:44 -0700578
579private:
580 SkAutoTUnref<const SkTextBlob> fBlob;
581 SkScalar fXPos;
582 SkScalar fYPos;
583 SkPaint fPaint;
584
585 typedef SkDrawCommand INHERITED;
586};
587
robertphillips9bafc302015-02-13 11:13:00 -0800588class SkDrawPatchCommand : public SkDrawCommand {
589public:
590 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
591 const SkPoint texCoords[4], SkXfermode* xmode,
592 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700593 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800594 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
595 static SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips9bafc302015-02-13 11:13:00 -0800596
597private:
598 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800599 SkColor* fColorsPtr;
600 SkColor fColors[4];
601 SkPoint* fTexCoordsPtr;
602 SkPoint fTexCoords[4];
robertphillips9bafc302015-02-13 11:13:00 -0800603 SkAutoTUnref<SkXfermode> fXfermode;
604 SkPaint fPaint;
605
606 typedef SkDrawCommand INHERITED;
607};
608
609
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000610class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000611public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000612 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700613 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800614 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
615 static SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000616
robertphillips@google.com91217d02013-03-17 18:33:46 +0000617 const SkRect& rect() const { return fRect; }
618 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000619private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000620 SkRect fRect;
621 SkPaint fPaint;
622
623 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000624};
625
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000626class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000627public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000628 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
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 SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800633
robertphillips@google.com67baba42013-01-02 20:20:31 +0000634private:
635 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000636 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000637
638 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000639};
640
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000641class SkDrawDRRectCommand : public SkDrawCommand {
642public:
643 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
644 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700645 void execute(SkCanvas* canvas) const override;
646 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800647 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
648 static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800649
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000650private:
651 SkRRect fOuter;
652 SkRRect fInner;
653 SkPaint fPaint;
654
655 typedef SkDrawCommand INHERITED;
656};
657
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000658class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000659public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000660 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
661 const SkPoint vertices[], const SkPoint texs[],
662 const SkColor colors[], SkXfermode* xfermode,
663 const uint16_t indices[], int indexCount,
664 const SkPaint& paint);
665 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700666 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800667
chudy@google.com902ebe52012-06-29 14:21:22 +0000668private:
669 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000670 int fVertexCount;
671 SkPoint* fVertices;
672 SkPoint* fTexs;
673 SkColor* fColors;
chudy@google.com902ebe52012-06-29 14:21:22 +0000674 SkXfermode* fXfermode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000675 uint16_t* fIndices;
676 int fIndexCount;
677 SkPaint fPaint;
678
679 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000680};
681
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000682class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000683public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400684 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700685 void execute(SkCanvas* canvas) const override;
686 Action action() const override { return kPushLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800687 static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800688
chudy@google.com902ebe52012-06-29 14:21:22 +0000689private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000690 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000691};
692
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000693class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000694public:
reed4960eee2015-12-18 07:09:18 -0800695 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
ethannicholas50a8dd02016-02-10 05:40:46 -0800696 virtual ~SkSaveLayerCommand();
mtklein36352bf2015-03-25 18:17:31 -0700697 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800698 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
699 static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
mtklein36352bf2015-03-25 18:17:31 -0700700 void vizExecute(SkCanvas* canvas) const override;
701 Action action() const override{ return kPushLayer_Action; }
702 void setActive(bool active) override { fActive = active; }
703 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000704
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000705 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000706
chudy@google.com902ebe52012-06-29 14:21:22 +0000707private:
ethannicholas50a8dd02016-02-10 05:40:46 -0800708 SkRect fBounds;
709 SkPaint fPaint;
710 SkPaint* fPaintPtr;
711 const SkImageFilter* fBackdrop;
712 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000713
reed4960eee2015-12-18 07:09:18 -0800714 bool fActive;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000715
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000716 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000717};
718
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000719class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000720public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000721 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700722 void setUserMatrix(const SkMatrix&) override;
723 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800724 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
725 static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800726
chudy@google.com902ebe52012-06-29 14:21:22 +0000727private:
robertphillips70171682014-10-16 14:28:28 -0700728 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000729 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000730
731 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000732};
733
chudy@google.com902ebe52012-06-29 14:21:22 +0000734#endif