blob: a7e6c73802bdee18e30d37f0efced17555376a0d [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,
vjiaoblacke5de1302016-07-13 14:05:28 -070059 kTranslateZ_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080060
vjiaoblacke5de1302016-07-13 14:05:28 -070061 kLast_OpType = kTranslateZ_OpType
robertphillips9bafc302015-02-13 11:13:00 -080062 };
63
64 static const int kOpTypeCount = kLast_OpType + 1;
65
halcanary9d524f22016-03-29 09:03:52 -070066 static void WritePNG(const png_bytep rgba, png_uint_32 width, png_uint_32 height,
msaretta5cf4f42016-06-30 10:06:51 -070067 SkWStream& out, bool isOpaque);
ethannicholasf67531f2016-03-21 10:19:39 -070068
robertphillips9bafc302015-02-13 11:13:00 -080069 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000070
71 virtual ~SkDrawCommand();
72
fmalita8c89c522014-11-08 16:18:56 -080073 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000074
fmalita8c89c522014-11-08 16:18:56 -080075 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080076 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000077 }
78
chudy@google.com0b5bbb02012-07-31 19:55:32 +000079 bool isVisible() const {
80 return fVisible;
81 }
82
83 void setVisible(bool toggle) {
84 fVisible = toggle;
85 }
chudy@google.com902ebe52012-06-29 14:21:22 +000086
fmalita8c89c522014-11-08 16:18:56 -080087 const SkTDArray<SkString*>* Info() const { return &fInfo; }
88 virtual void execute(SkCanvas*) const = 0;
89 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070090
fmalita8c89c522014-11-08 16:18:56 -080091 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070092
mtkleinf0f14112014-12-12 08:46:25 -080093 // The next "active" system is only used by save, saveLayer, and restore.
94 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000095 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000096 // saves just return a kPushLayer action but don't track active state
97 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000098 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000099 enum Action {
100 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +0000101 kPopLayer_Action,
102 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000103 };
104 virtual Action action() const { return kNone_Action; }
105 virtual void setActive(bool active) {}
106 virtual bool active() const { return false; }
107
robertphillips9bafc302015-02-13 11:13:00 -0800108 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000109
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000110 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000111
ethannicholasf62a8b72016-02-11 10:35:21 -0800112 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -0800113
114 /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
115 * is the caller's responsibility to delete this object. This method may return null if an error
116 * occurs.
117 */
ethannicholasf62a8b72016-02-11 10:35:21 -0800118 static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800119
robertphillips9bafc302015-02-13 11:13:00 -0800120 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000121
joshualittbd724132016-03-03 11:39:38 -0800122 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -0700123 static Json::Value MakeJsonColor(const SkColor color);
124 static Json::Value MakeJsonPoint(const SkPoint& point);
125 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
126 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800127 static Json::Value MakeJsonIRect(const SkIRect&);
128 static Json::Value MakeJsonMatrix(const SkMatrix&);
vjiaoblacke5de1302016-07-13 14:05:28 -0700129 static Json::Value MakeJsonScalar(SkScalar);
brianosmanfad98562016-05-04 11:06:28 -0700130 static Json::Value MakeJsonPath(const SkPath& path);
131 static Json::Value MakeJsonRegion(const SkRegion& region);
132 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
133
134 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
135 UrlDataManager& urlDataManager);
136 static bool flatten(const SkImage& image, Json::Value* target,
137 UrlDataManager& urlDataManager);
138 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
139 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800140
chudy@google.com902ebe52012-06-29 14:21:22 +0000141protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000142 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000143
144private:
robertphillips9bafc302015-02-13 11:13:00 -0800145 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000146 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000147};
148
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000149class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000150public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000151 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700152 void execute(SkCanvas* canvas) const override;
153 Action action() const override { return kPopLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800154 static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000155
156private:
157 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000158};
159
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000160class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000161public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000162 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700163 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800164 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
165 static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800166
chudy@google.com902ebe52012-06-29 14:21:22 +0000167private:
168 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000169
170 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000171};
172
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000173class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000174public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000175 SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700176 void execute(SkCanvas* canvas) const override;
177 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800178 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
179 static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800180
chudy@google.com902ebe52012-06-29 14:21:22 +0000181private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000182 SkPath fPath;
chudy@google.com902ebe52012-06-29 14:21:22 +0000183 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000184 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000185
186 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000187};
188
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000189class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000190public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000191 SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
mtklein36352bf2015-03-25 18:17:31 -0700192 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800193 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
194 static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800195
chudy@google.com902ebe52012-06-29 14:21:22 +0000196private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000197 SkRegion fRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000198 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000199
200 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000201};
202
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000203class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000204public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000205 SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700206 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800207 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
208 static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000209
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000210 const SkRect& rect() const { return fRect; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000211 SkRegion::Op op() const { return fOp; }
212 bool doAA() const { return fDoAA; }
213
chudy@google.com902ebe52012-06-29 14:21:22 +0000214private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000215 SkRect fRect;
chudy@google.com902ebe52012-06-29 14:21:22 +0000216 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000217 bool fDoAA;
218
219 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000220};
221
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000222class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000223public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000224 SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700225 void execute(SkCanvas* canvas) const override;
226 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800227 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
228 static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000229
230 const SkRRect& rrect() const { return fRRect; }
231 SkRegion::Op op() const { return fOp; }
232 bool doAA() const { return fDoAA; }
233
robertphillips@google.com67baba42013-01-02 20:20:31 +0000234private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000235 SkRRect fRRect;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000236 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000237 bool fDoAA;
238
239 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000240};
241
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000242class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000243public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000244 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700245 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800246 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
247 static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800248
chudy@google.com902ebe52012-06-29 14:21:22 +0000249private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000250 SkMatrix fMatrix;
251
252 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000253};
254
reed97660cc2016-06-28 18:54:19 -0700255class SkDrawAnnotationCommand : public SkDrawCommand {
256public:
257 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
258 void execute(SkCanvas* canvas) const override;
259 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
260 static SkDrawAnnotationCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
261
262private:
263 SkRect fRect;
264 SkString fKey;
265 sk_sp<SkData> fValue;
266
267 typedef SkDrawCommand INHERITED;
268};
269
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000270class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000271public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000272 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000273 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700274 void execute(SkCanvas* canvas) const override;
275 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800276 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
277 static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800278
chudy@google.com902ebe52012-06-29 14:21:22 +0000279private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000280 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000281 SkScalar fLeft;
282 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000283 SkPaint fPaint;
284 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000285
286 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000287};
288
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000289class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000290public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000291 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000292 const SkRect& dst, const SkPaint* paint);
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 SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800297
chudy@google.com902ebe52012-06-29 14:21:22 +0000298private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000299 SkBitmap fBitmap;
300 SkIRect fCenter;
301 SkRect fDst;
302 SkPaint fPaint;
303 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000304
305 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000306};
307
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000308class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000309public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000310 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000311 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700312 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700313 void execute(SkCanvas* canvas) const override;
314 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800315 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
316 static SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000317
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000318 const SkBitmap& bitmap() const { return fBitmap; }
319
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000320 // The non-const 'paint' method allows modification of this object's
321 // SkPaint. For this reason the ctor and setPaint method make a local copy.
322 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
323 // (since only an SkPaint* is passed into the ctor).
324 const SkPaint* paint() const { return fPaintPtr; }
325 SkPaint* paint() { return fPaintPtr; }
326
327 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
328
halcanary96fcdcc2015-08-27 07:41:13 -0700329 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000330 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000331
332 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000333 void setDstRect(const SkRect& dst) { fDst = dst; }
334
reeda5517e22015-07-14 10:54:12 -0700335 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
336 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000337
chudy@google.com902ebe52012-06-29 14:21:22 +0000338private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000339 SkBitmap fBitmap;
340 SkRect fSrc;
341 SkRect fDst;
342 SkPaint fPaint;
343 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700344 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000345
346 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000347};
348
fmalita651c9202015-07-22 10:23:01 -0700349class SkDrawImageCommand : public SkDrawCommand {
350public:
351 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
352 void execute(SkCanvas* canvas) const override;
353 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800354 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
355 static SkDrawImageCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800356
fmalita651c9202015-07-22 10:23:01 -0700357private:
358 SkAutoTUnref<const SkImage> fImage;
359 SkScalar fLeft;
360 SkScalar fTop;
361 SkTLazy<SkPaint> fPaint;
362
363 typedef SkDrawCommand INHERITED;
364};
365
366class SkDrawImageRectCommand : public SkDrawCommand {
367public:
368 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
369 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
370 void execute(SkCanvas* canvas) const override;
371 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800372 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
373 static SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800374
fmalita651c9202015-07-22 10:23:01 -0700375private:
376 SkAutoTUnref<const SkImage> fImage;
377 SkTLazy<SkRect> fSrc;
378 SkRect fDst;
379 SkTLazy<SkPaint> fPaint;
380 SkCanvas::SrcRectConstraint fConstraint;
381
382 typedef SkDrawCommand INHERITED;
383};
384
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000385class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000386public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000387 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700388 void execute(SkCanvas* canvas) const override;
389 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800390 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
391 static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800392
robertphillips@google.com67baba42013-01-02 20:20:31 +0000393private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000394 SkRect fOval;
395 SkPaint fPaint;
396
397 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000398};
399
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000400class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000401public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000402 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700403 void execute(SkCanvas* canvas) const override;
404 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800405 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
406 static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800407
chudy@google.com902ebe52012-06-29 14:21:22 +0000408private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000409 SkPaint fPaint;
410
411 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000412};
413
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000414class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000415public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000416 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700417 void execute(SkCanvas* canvas) const override;
418 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800419 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
420 static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000421
chudy@google.com902ebe52012-06-29 14:21:22 +0000422private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000423 SkPath fPath;
424 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000425
426 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000427};
428
fmalita160ebb22015-04-01 20:58:37 -0700429class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000430public:
fmalita160ebb22015-04-01 20:58:37 -0700431 SkBeginDrawPictureCommand(const SkPicture* picture,
432 const SkMatrix* matrix,
433 const SkPaint* paint);
434
mtklein36352bf2015-03-25 18:17:31 -0700435 void execute(SkCanvas* canvas) const override;
436 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000437
chudy@google.com902ebe52012-06-29 14:21:22 +0000438private:
robertphillips9b14f262014-06-04 05:40:44 -0700439 SkAutoTUnref<const SkPicture> fPicture;
fmalita160ebb22015-04-01 20:58:37 -0700440 SkTLazy<SkMatrix> fMatrix;
441 SkTLazy<SkPaint> fPaint;
442
443 typedef SkDrawCommand INHERITED;
444};
445
446class SkEndDrawPictureCommand : public SkDrawCommand {
447public:
448 SkEndDrawPictureCommand(bool restore);
449
450 void execute(SkCanvas* canvas) const override;
451
452private:
453 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000454
455 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000456};
457
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000458class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000459public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000460 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000461 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000462 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700463 void execute(SkCanvas* canvas) const override;
464 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800465 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
466 static SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800467
chudy@google.com902ebe52012-06-29 14:21:22 +0000468private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000469 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000470 size_t fCount;
471 SkPoint* fPts;
472 SkPaint fPaint;
473
474 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000475};
476
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000477class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000478public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000479 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000480 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000481 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700482 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800483 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
484 static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800485
chudy@google.com902ebe52012-06-29 14:21:22 +0000486private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000487 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000488 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000489 SkScalar fX;
490 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000491 SkPaint fPaint;
492
493 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000494};
495
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000496class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000497public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000498 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
499 const SkPaint& paint);
500 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700501 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800502 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
503 static SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800504
chudy@google.com902ebe52012-06-29 14:21:22 +0000505private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000506 char* fText;
507 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000508 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000509 SkPaint fPaint;
510
511 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000512};
513
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000514class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000515public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000516 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
517 const SkMatrix* matrix, const SkPaint& paint);
518 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700519 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800520 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
521 static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800522
chudy@google.com902ebe52012-06-29 14:21:22 +0000523private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000524 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000525 size_t fByteLength;
526 SkPath fPath;
527 SkMatrix fMatrix;
528 SkPaint fPaint;
529
530 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000531};
532
reed45561a02016-07-07 12:47:17 -0700533class SkDrawTextRSXformCommand : public SkDrawCommand {
534public:
535 SkDrawTextRSXformCommand(const void* text, size_t byteLength, const SkRSXform[],
536 const SkRect*, const SkPaint& paint);
537 ~SkDrawTextRSXformCommand() override { delete[] fText; delete[] fXform; }
538 void execute(SkCanvas* canvas) const override;
539 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
540 static SkDrawTextRSXformCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
541
542private:
543 char* fText;
544 size_t fByteLength;
545 SkRSXform* fXform;
546 SkRect* fCull;
547 SkRect fCullStorage;
548 SkPaint fPaint;
549
550 typedef SkDrawCommand INHERITED;
551};
552
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000553class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000554public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000555 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
556 SkScalar constY, const SkPaint& paint);
557 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700558 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800559 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
560 static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800561
chudy@google.com902ebe52012-06-29 14:21:22 +0000562private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000563 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000564 char* fText;
565 size_t fByteLength;
566 SkScalar fConstY;
567 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000568
569 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000570};
571
fmalitab7425172014-08-26 07:56:44 -0700572class SkDrawTextBlobCommand : public SkDrawCommand {
573public:
574 SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);
575
mtklein36352bf2015-03-25 18:17:31 -0700576 void execute(SkCanvas* canvas) const override;
577 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800578 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
579 static SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
fmalitab7425172014-08-26 07:56:44 -0700580
581private:
582 SkAutoTUnref<const SkTextBlob> fBlob;
583 SkScalar fXPos;
584 SkScalar fYPos;
585 SkPaint fPaint;
586
587 typedef SkDrawCommand INHERITED;
588};
589
robertphillips9bafc302015-02-13 11:13:00 -0800590class SkDrawPatchCommand : public SkDrawCommand {
591public:
592 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
593 const SkPoint texCoords[4], SkXfermode* xmode,
594 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700595 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800596 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
597 static SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips9bafc302015-02-13 11:13:00 -0800598
599private:
600 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800601 SkColor* fColorsPtr;
602 SkColor fColors[4];
603 SkPoint* fTexCoordsPtr;
604 SkPoint fTexCoords[4];
robertphillips9bafc302015-02-13 11:13:00 -0800605 SkAutoTUnref<SkXfermode> fXfermode;
606 SkPaint fPaint;
607
608 typedef SkDrawCommand INHERITED;
609};
610
611
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000612class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000613public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000614 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700615 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800616 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
617 static SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000618
robertphillips@google.com91217d02013-03-17 18:33:46 +0000619 const SkRect& rect() const { return fRect; }
620 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000621private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000622 SkRect fRect;
623 SkPaint fPaint;
624
625 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000626};
627
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000628class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000629public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000630 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700631 void execute(SkCanvas* canvas) const override;
632 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800633 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
634 static SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800635
robertphillips@google.com67baba42013-01-02 20:20:31 +0000636private:
637 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000638 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000639
640 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000641};
642
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000643class SkDrawDRRectCommand : public SkDrawCommand {
644public:
645 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
646 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700647 void execute(SkCanvas* canvas) const override;
648 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800649 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
650 static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800651
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000652private:
653 SkRRect fOuter;
654 SkRRect fInner;
655 SkPaint fPaint;
656
657 typedef SkDrawCommand INHERITED;
658};
659
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000660class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000661public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000662 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
663 const SkPoint vertices[], const SkPoint texs[],
664 const SkColor colors[], SkXfermode* xfermode,
665 const uint16_t indices[], int indexCount,
666 const SkPaint& paint);
667 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700668 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800669
chudy@google.com902ebe52012-06-29 14:21:22 +0000670private:
671 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000672 int fVertexCount;
673 SkPoint* fVertices;
674 SkPoint* fTexs;
675 SkColor* fColors;
chudy@google.com902ebe52012-06-29 14:21:22 +0000676 SkXfermode* fXfermode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000677 uint16_t* fIndices;
678 int fIndexCount;
679 SkPaint fPaint;
680
681 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000682};
683
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000684class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000685public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400686 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700687 void execute(SkCanvas* canvas) const override;
688 Action action() const override { return kPushLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800689 static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800690
chudy@google.com902ebe52012-06-29 14:21:22 +0000691private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000692 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000693};
694
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000695class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000696public:
reed4960eee2015-12-18 07:09:18 -0800697 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
ethannicholas50a8dd02016-02-10 05:40:46 -0800698 virtual ~SkSaveLayerCommand();
mtklein36352bf2015-03-25 18:17:31 -0700699 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800700 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
701 static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
mtklein36352bf2015-03-25 18:17:31 -0700702 void vizExecute(SkCanvas* canvas) const override;
703 Action action() const override{ return kPushLayer_Action; }
704 void setActive(bool active) override { fActive = active; }
705 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000706
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000707 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000708
chudy@google.com902ebe52012-06-29 14:21:22 +0000709private:
ethannicholas50a8dd02016-02-10 05:40:46 -0800710 SkRect fBounds;
711 SkPaint fPaint;
712 SkPaint* fPaintPtr;
713 const SkImageFilter* fBackdrop;
714 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000715
reed4960eee2015-12-18 07:09:18 -0800716 bool fActive;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000717
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000718 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000719};
720
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000721class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000722public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000723 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700724 void setUserMatrix(const SkMatrix&) override;
725 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800726 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
727 static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800728
chudy@google.com902ebe52012-06-29 14:21:22 +0000729private:
robertphillips70171682014-10-16 14:28:28 -0700730 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000731 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000732
733 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000734};
735
vjiaoblacke5de1302016-07-13 14:05:28 -0700736class SkTranslateZCommand : public SkDrawCommand {
737public:
738 SkTranslateZCommand(SkScalar);
739 void execute(SkCanvas* canvas) const override;
740 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
741 static SkTranslateZCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
742
743private:
744 SkScalar fZTranslate;
745
746 typedef SkDrawCommand INHERITED;
747};
chudy@google.com902ebe52012-06-29 14:21:22 +0000748#endif