blob: a7a301533543827f0ef53f520db520e0d1f51bb1 [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
Florin Malitaab244f02017-05-03 19:16:58 +000011#include "SkBitmap.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000012#include "SkCanvas.h"
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -040013#include "SkDrawShadowInfo.h"
Mike Reed086a4272017-07-18 10:53:11 -040014#include "SkFlattenable.h"
bungemand3ebb482015-08-05 13:57:49 -070015#include "SkTLazy.h"
16#include "SkPath.h"
Mike Reed267be7f2017-02-13 09:32:54 -050017#include "SkRegion.h"
bungemand3ebb482015-08-05 13:57:49 -070018#include "SkRRect.h"
reed45561a02016-07-07 12:47:17 -070019#include "SkRSXform.h"
robertphillips@google.com0a4805e2013-05-29 13:24:23 +000020#include "SkString.h"
bungemand3ebb482015-08-05 13:57:49 -070021#include "SkTDArray.h"
Mike Reedfed9cfd2017-03-17 12:09:04 -040022#include "SkVertices.h"
ethannicholas50a8dd02016-02-10 05:40:46 -080023#include "SkJSONCPP.h"
ethannicholasf62a8b72016-02-11 10:35:21 -080024#include "UrlDataManager.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000025
Mike Klein0f61faa2016-10-11 16:26:57 -040026class SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000027public:
robertphillips9bafc302015-02-13 11:13:00 -080028 enum OpType {
fmalita160ebb22015-04-01 20:58:37 -070029 kBeginDrawPicture_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040030 kClear_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080031 kClipPath_OpType,
32 kClipRegion_OpType,
33 kClipRect_OpType,
34 kClipRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080035 kConcat_OpType,
reed97660cc2016-06-28 18:54:19 -070036 kDrawAnnotation_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080037 kDrawBitmap_OpType,
Brian Osman78a76482018-05-18 16:59:13 -040038 kDrawBitmapLattice_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080039 kDrawBitmapNine_OpType,
40 kDrawBitmapRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080041 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070042 kDrawImage_OpType,
Stan Ilievac42aeb2017-01-12 16:20:50 -050043 kDrawImageLattice_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040044 kDrawImageNine_OpType,
fmalita651c9202015-07-22 10:23:01 -070045 kDrawImageRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080046 kDrawOval_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040047 kDrawArc_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080048 kDrawPaint_OpType,
49 kDrawPatch_OpType,
50 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080051 kDrawPoints_OpType,
52 kDrawPosText_OpType,
53 kDrawPosTextH_OpType,
54 kDrawRect_OpType,
55 kDrawRRect_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040056 kDrawRegion_OpType,
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -040057 kDrawShadow_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080058 kDrawText_OpType,
59 kDrawTextBlob_OpType,
60 kDrawTextOnPath_OpType,
reed45561a02016-07-07 12:47:17 -070061 kDrawTextRSXform_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080062 kDrawVertices_OpType,
Brian Osman616f1cb2018-05-29 11:23:35 -040063 kDrawAtlas_OpType,
Brian Osmanc7611082018-05-29 14:55:50 -040064 kDrawDrawable_OpType,
fmalita160ebb22015-04-01 20:58:37 -070065 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080066 kRestore_OpType,
67 kSave_OpType,
68 kSaveLayer_OpType,
69 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080070
Jim Van Verth343fe492017-05-02 16:49:24 -040071 kLast_OpType = kSetMatrix_OpType
robertphillips9bafc302015-02-13 11:13:00 -080072 };
73
74 static const int kOpTypeCount = kLast_OpType + 1;
75
halcanarya73d76a2016-10-17 13:19:02 -070076 static void WritePNG(const uint8_t* rgba, unsigned width, unsigned height,
msaretta5cf4f42016-06-30 10:06:51 -070077 SkWStream& out, bool isOpaque);
ethannicholasf67531f2016-03-21 10:19:39 -070078
robertphillips9bafc302015-02-13 11:13:00 -080079 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000080
Brian Osman255735e2018-04-06 14:51:42 -040081 virtual ~SkDrawCommand() {}
chudy@google.com902ebe52012-06-29 14:21:22 +000082
chudy@google.com0b5bbb02012-07-31 19:55:32 +000083 bool isVisible() const {
84 return fVisible;
85 }
86
87 void setVisible(bool toggle) {
88 fVisible = toggle;
89 }
chudy@google.com902ebe52012-06-29 14:21:22 +000090
fmalita8c89c522014-11-08 16:18:56 -080091 virtual void execute(SkCanvas*) const = 0;
chudy@google.com902ebe52012-06-29 14:21:22 +000092
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000093 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +000094
ethannicholasf62a8b72016-02-11 10:35:21 -080095 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -080096
robertphillips9bafc302015-02-13 11:13:00 -080097 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +000098
joshualittbd724132016-03-03 11:39:38 -080099 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -0700100 static Json::Value MakeJsonColor(const SkColor color);
brianosman97bbf822016-09-25 13:15:58 -0700101 static Json::Value MakeJsonColor4f(const SkColor4f& color);
brianosmanfad98562016-05-04 11:06:28 -0700102 static Json::Value MakeJsonPoint(const SkPoint& point);
103 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400104 static Json::Value MakeJsonPoint3(const SkPoint3& point);
brianosmanfad98562016-05-04 11:06:28 -0700105 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800106 static Json::Value MakeJsonIRect(const SkIRect&);
107 static Json::Value MakeJsonMatrix(const SkMatrix&);
vjiaoblacke5de1302016-07-13 14:05:28 -0700108 static Json::Value MakeJsonScalar(SkScalar);
brianosmanfad98562016-05-04 11:06:28 -0700109 static Json::Value MakeJsonPath(const SkPath& path);
110 static Json::Value MakeJsonRegion(const SkRegion& region);
111 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500112 static Json::Value MakeJsonLattice(const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700113
114 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
115 UrlDataManager& urlDataManager);
116 static bool flatten(const SkImage& image, Json::Value* target,
117 UrlDataManager& urlDataManager);
118 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
119 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800120
chudy@google.com902ebe52012-06-29 14:21:22 +0000121private:
robertphillips9bafc302015-02-13 11:13:00 -0800122 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000123 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000124};
125
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000126class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000127public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000128 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700129 void execute(SkCanvas* canvas) const override;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000130
131private:
132 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000133};
134
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000135class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000136public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000137 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700138 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800139 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800140
chudy@google.com902ebe52012-06-29 14:21:22 +0000141private:
142 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000143
144 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000145};
146
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000147class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000148public:
Mike Reedc1f77742016-12-09 09:00:50 -0500149 SkClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700150 void execute(SkCanvas* canvas) const override;
151 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800152 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800153
chudy@google.com902ebe52012-06-29 14:21:22 +0000154private:
Mike Reedc1f77742016-12-09 09:00:50 -0500155 SkPath fPath;
156 SkClipOp fOp;
157 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000158
159 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000160};
161
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000162class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000163public:
Mike Reedc1f77742016-12-09 09:00:50 -0500164 SkClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700165 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800166 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800167
chudy@google.com902ebe52012-06-29 14:21:22 +0000168private:
Mike Reedc1f77742016-12-09 09:00:50 -0500169 SkRegion fRegion;
170 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000171
172 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000173};
174
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000175class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000176public:
Mike Reedc1f77742016-12-09 09:00:50 -0500177 SkClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700178 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800179 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000180
chudy@google.com902ebe52012-06-29 14:21:22 +0000181private:
Mike Reedc1f77742016-12-09 09:00:50 -0500182 SkRect fRect;
183 SkClipOp fOp;
184 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +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 SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000190public:
Mike Reedc1f77742016-12-09 09:00:50 -0500191 SkClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700192 void execute(SkCanvas* canvas) const override;
193 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800194 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000195
robertphillips@google.com67baba42013-01-02 20:20:31 +0000196private:
Mike Reedc1f77742016-12-09 09:00:50 -0500197 SkRRect fRRect;
198 SkClipOp fOp;
199 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000200
201 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000202};
203
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000204class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000205public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000206 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700207 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800208 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800209
chudy@google.com902ebe52012-06-29 14:21:22 +0000210private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000211 SkMatrix fMatrix;
212
213 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000214};
215
reed97660cc2016-06-28 18:54:19 -0700216class SkDrawAnnotationCommand : public SkDrawCommand {
217public:
218 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
219 void execute(SkCanvas* canvas) const override;
220 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
reed97660cc2016-06-28 18:54:19 -0700221
222private:
223 SkRect fRect;
224 SkString fKey;
225 sk_sp<SkData> fValue;
226
227 typedef SkDrawCommand INHERITED;
228};
229
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000230class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000231public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000232 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000233 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700234 void execute(SkCanvas* canvas) const override;
235 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800236 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800237
chudy@google.com902ebe52012-06-29 14:21:22 +0000238private:
Brian Osman8363be12018-05-29 13:38:07 -0400239 SkBitmap fBitmap;
240 SkScalar fLeft;
241 SkScalar fTop;
242 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000243
244 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000245};
246
Brian Osman78a76482018-05-18 16:59:13 -0400247class SkDrawBitmapLatticeCommand : public SkDrawCommand {
248public:
249 SkDrawBitmapLatticeCommand(const SkBitmap& bitmap, const SkCanvas::Lattice& lattice,
250 const SkRect& dst, const SkPaint* paint);
251 void execute(SkCanvas* canvas) const override;
252 bool render(SkCanvas* canvas) const override;
253 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osman78a76482018-05-18 16:59:13 -0400254
255private:
256 SkBitmap fBitmap;
257 SkCanvas::Lattice fLattice;
258 SkRect fDst;
259 SkTLazy<SkPaint> fPaint;
260
261 typedef SkDrawCommand INHERITED;
262};
263
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000264class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000265public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000266 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000267 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700268 void execute(SkCanvas* canvas) const override;
269 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800270 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800271
chudy@google.com902ebe52012-06-29 14:21:22 +0000272private:
Brian Osman8363be12018-05-29 13:38:07 -0400273 SkBitmap fBitmap;
274 SkIRect fCenter;
275 SkRect fDst;
276 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000277
278 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000279};
280
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000281class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000282public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000283 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000284 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700285 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700286 void execute(SkCanvas* canvas) const override;
287 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800288 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000289
chudy@google.com902ebe52012-06-29 14:21:22 +0000290private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000291 SkBitmap fBitmap;
Brian Osman8363be12018-05-29 13:38:07 -0400292 SkTLazy<SkRect> fSrc;
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000293 SkRect fDst;
Brian Osman8363be12018-05-29 13:38:07 -0400294 SkTLazy<SkPaint> fPaint;
reeda5517e22015-07-14 10:54:12 -0700295 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000296
297 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000298};
299
fmalita651c9202015-07-22 10:23:01 -0700300class SkDrawImageCommand : public SkDrawCommand {
301public:
302 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
303 void execute(SkCanvas* canvas) const override;
304 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800305 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800306
fmalita651c9202015-07-22 10:23:01 -0700307private:
Hal Canary1b612a82016-11-03 16:26:13 -0400308 sk_sp<const SkImage> fImage;
309 SkScalar fLeft;
310 SkScalar fTop;
311 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700312
313 typedef SkDrawCommand INHERITED;
314};
315
Stan Ilievac42aeb2017-01-12 16:20:50 -0500316class SkDrawImageLatticeCommand : public SkDrawCommand {
317public:
318 SkDrawImageLatticeCommand(const SkImage* image, const SkCanvas::Lattice& lattice,
319 const SkRect& dst, const SkPaint* paint);
320 void execute(SkCanvas* canvas) const override;
321 bool render(SkCanvas* canvas) const override;
322 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
323
324private:
325 sk_sp<const SkImage> fImage;
326 SkCanvas::Lattice fLattice;
327 SkRect fDst;
328 SkTLazy<SkPaint> fPaint;
329
330 typedef SkDrawCommand INHERITED;
331};
332
Brian Osmanc25e2692018-03-12 10:57:28 -0400333class SkDrawImageNineCommand : public SkDrawCommand {
334public:
335 SkDrawImageNineCommand(const SkImage* image, const SkIRect& center,
336 const SkRect& dst, const SkPaint* paint);
337 void execute(SkCanvas* canvas) const override;
338 bool render(SkCanvas* canvas) const override;
339 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400340
341private:
342 sk_sp<const SkImage> fImage;
343 SkIRect fCenter;
344 SkRect fDst;
Brian Osman8363be12018-05-29 13:38:07 -0400345 SkTLazy<SkPaint> fPaint;
Brian Osmanc25e2692018-03-12 10:57:28 -0400346
347 typedef SkDrawCommand INHERITED;
348};
349
fmalita651c9202015-07-22 10:23:01 -0700350class SkDrawImageRectCommand : public SkDrawCommand {
351public:
352 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
353 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
354 void execute(SkCanvas* canvas) const override;
355 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800356 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800357
fmalita651c9202015-07-22 10:23:01 -0700358private:
Hal Canary1b612a82016-11-03 16:26:13 -0400359 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700360 SkTLazy<SkRect> fSrc;
361 SkRect fDst;
362 SkTLazy<SkPaint> fPaint;
363 SkCanvas::SrcRectConstraint fConstraint;
364
365 typedef SkDrawCommand INHERITED;
366};
367
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000368class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000369public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000370 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700371 void execute(SkCanvas* canvas) const override;
372 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800373 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800374
robertphillips@google.com67baba42013-01-02 20:20:31 +0000375private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000376 SkRect fOval;
377 SkPaint fPaint;
378
379 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000380};
381
bsalomonac3aa242016-08-19 11:25:19 -0700382class SkDrawArcCommand : public SkDrawCommand {
383public:
384 SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
385 const SkPaint& paint);
386 void execute(SkCanvas* canvas) const override;
387 bool render(SkCanvas* canvas) const override;
388 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
bsalomonac3aa242016-08-19 11:25:19 -0700389
390private:
391 SkRect fOval;
392 SkScalar fStartAngle;
393 SkScalar fSweepAngle;
394 bool fUseCenter;
395 SkPaint fPaint;
396
397 typedef SkDrawCommand INHERITED;
398};
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;
ethannicholas50a8dd02016-02-10 05:40:46 -0800406
chudy@google.com902ebe52012-06-29 14:21:22 +0000407private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000408 SkPaint fPaint;
409
410 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000411};
412
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000413class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000414public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000415 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700416 void execute(SkCanvas* canvas) const override;
417 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800418 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
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:
Hal Canary1b612a82016-11-03 16:26:13 -0400437 sk_sp<const SkPicture> fPicture;
438 SkTLazy<SkMatrix> fMatrix;
439 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700440
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);
mtklein36352bf2015-03-25 18:17:31 -0700460 void execute(SkCanvas* canvas) const override;
461 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800462 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
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;
Brian Osman8363be12018-05-29 13:38:07 -0400466 SkTDArray<SkPoint> fPts;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000467 SkPaint fPaint;
468
469 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000470};
471
Brian Osmanc25e2692018-03-12 10:57:28 -0400472class SkDrawRegionCommand : public SkDrawCommand {
473public:
474 SkDrawRegionCommand(const SkRegion& region, const SkPaint& paint);
475 void execute(SkCanvas* canvas) const override;
476 bool render(SkCanvas* canvas) const override;
477 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400478
479private:
480 SkRegion fRegion;
481 SkPaint fPaint;
482
483 typedef SkDrawCommand INHERITED;
484};
485
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000486class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000487public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000488 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000489 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700490 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800491 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800492
chudy@google.com902ebe52012-06-29 14:21:22 +0000493private:
Brian Osman65197ff2018-05-29 14:25:39 -0400494 sk_sp<SkData> fText;
495 SkScalar fX;
496 SkScalar fY;
497 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000498
499 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000500};
501
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000502class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000503public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000504 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
505 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700506 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800507 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800508
chudy@google.com902ebe52012-06-29 14:21:22 +0000509private:
Brian Osman65197ff2018-05-29 14:25:39 -0400510 sk_sp<SkData> fText;
511 SkTDArray<SkPoint> fPos;
512 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000513
514 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000515};
516
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000517class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000518public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000519 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
520 const SkMatrix* matrix, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700521 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800522 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800523
chudy@google.com902ebe52012-06-29 14:21:22 +0000524private:
Brian Osman65197ff2018-05-29 14:25:39 -0400525 sk_sp<SkData> fText;
Brian Osman8363be12018-05-29 13:38:07 -0400526 SkPath fPath;
527 SkTLazy<SkMatrix> fMatrix;
528 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000529
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);
reed45561a02016-07-07 12:47:17 -0700537 void execute(SkCanvas* canvas) const override;
538 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
reed45561a02016-07-07 12:47:17 -0700539
540private:
Brian Osman65197ff2018-05-29 14:25:39 -0400541 sk_sp<SkData> fText;
542 SkTDArray<SkRSXform> fXform;
543 SkTLazy<SkRect> fCull;
544 SkPaint fPaint;
reed45561a02016-07-07 12:47:17 -0700545
546 typedef SkDrawCommand INHERITED;
547};
548
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000549class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000550public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000551 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
552 SkScalar constY, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700553 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800554 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800555
chudy@google.com902ebe52012-06-29 14:21:22 +0000556private:
Brian Osman65197ff2018-05-29 14:25:39 -0400557 sk_sp<SkData> fText;
558 SkTDArray<SkScalar> fXpos;
559 SkScalar fConstY;
560 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000561
562 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000563};
564
fmalitab7425172014-08-26 07:56:44 -0700565class SkDrawTextBlobCommand : public SkDrawCommand {
566public:
fmalita37283c22016-09-13 10:00:23 -0700567 SkDrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700568
mtklein36352bf2015-03-25 18:17:31 -0700569 void execute(SkCanvas* canvas) const override;
570 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800571 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
fmalitab7425172014-08-26 07:56:44 -0700572
573private:
fmalita37283c22016-09-13 10:00:23 -0700574 sk_sp<SkTextBlob> fBlob;
575 SkScalar fXPos;
576 SkScalar fYPos;
577 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700578
579 typedef SkDrawCommand INHERITED;
580};
581
robertphillips9bafc302015-02-13 11:13:00 -0800582class SkDrawPatchCommand : public SkDrawCommand {
583public:
584 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
Mike Reed7d954ad2016-10-28 15:42:34 -0400585 const SkPoint texCoords[4], SkBlendMode bmode,
robertphillips9bafc302015-02-13 11:13:00 -0800586 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700587 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800588 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800589
590private:
591 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800592 SkColor* fColorsPtr;
593 SkColor fColors[4];
594 SkPoint* fTexCoordsPtr;
595 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400596 SkBlendMode fBlendMode;
robertphillips9bafc302015-02-13 11:13:00 -0800597 SkPaint fPaint;
598
599 typedef SkDrawCommand INHERITED;
600};
601
602
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000603class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000604public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000605 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700606 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800607 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000608
chudy@google.com902ebe52012-06-29 14:21:22 +0000609private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000610 SkRect fRect;
611 SkPaint fPaint;
612
613 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000614};
615
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000616class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000617public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000618 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700619 void execute(SkCanvas* canvas) const override;
620 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800621 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800622
robertphillips@google.com67baba42013-01-02 20:20:31 +0000623private:
624 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000625 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000626
627 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000628};
629
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000630class SkDrawDRRectCommand : public SkDrawCommand {
631public:
632 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
633 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700634 void execute(SkCanvas* canvas) const override;
635 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800636 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800637
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000638private:
639 SkRRect fOuter;
640 SkRRect fInner;
641 SkPaint fPaint;
642
643 typedef SkDrawCommand INHERITED;
644};
645
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000646class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000647public:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400648 SkDrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
649
mtklein36352bf2015-03-25 18:17:31 -0700650 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800651
chudy@google.com902ebe52012-06-29 14:21:22 +0000652private:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400653 sk_sp<SkVertices> fVertices;
654 SkBlendMode fBlendMode;
655 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000656
657 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000658};
659
Brian Osman616f1cb2018-05-29 11:23:35 -0400660class SkDrawAtlasCommand : public SkDrawCommand {
661public:
662 SkDrawAtlasCommand(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int,
663 SkBlendMode, const SkRect*, const SkPaint*);
664
665 void execute(SkCanvas* canvas) const override;
666
667private:
668 sk_sp<const SkImage> fImage;
669 SkTDArray<SkRSXform> fXform;
670 SkTDArray<SkRect> fTex;
671 SkTDArray<SkColor> fColors;
672 SkBlendMode fBlendMode;
673 SkTLazy<SkRect> fCull;
674 SkTLazy<SkPaint> fPaint;
675
676 typedef SkDrawCommand INHERITED;
677};
678
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000679class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000680public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400681 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700682 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800683
chudy@google.com902ebe52012-06-29 14:21:22 +0000684private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000685 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000686};
687
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000688class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000689public:
reed4960eee2015-12-18 07:09:18 -0800690 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
mtklein36352bf2015-03-25 18:17:31 -0700691 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800692 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000693
chudy@google.com902ebe52012-06-29 14:21:22 +0000694private:
Brian Osman8363be12018-05-29 13:38:07 -0400695 SkTLazy<SkRect> fBounds;
696 SkTLazy<SkPaint> fPaint;
697 sk_sp<const SkImageFilter> fBackdrop;
698 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000699
700 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000701};
702
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000703class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000704public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000705 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700706 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800707 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800708
chudy@google.com902ebe52012-06-29 14:21:22 +0000709private:
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000710 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000711
712 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000713};
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400714
715class SkDrawShadowCommand : public SkDrawCommand {
716public:
717 SkDrawShadowCommand(const SkPath& path, const SkDrawShadowRec& rec);
718 void execute(SkCanvas* canvas) const override;
719 bool render(SkCanvas* canvas) const override;
720 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400721
722private:
723 SkPath fPath;
724 SkDrawShadowRec fShadowRec;
725
726 typedef SkDrawCommand INHERITED;
727};
vjiaoblacke6f5d562016-08-25 06:30:23 -0700728
Brian Osmanc7611082018-05-29 14:55:50 -0400729class SkDrawDrawableCommand : public SkDrawCommand {
730public:
731 SkDrawDrawableCommand(SkDrawable*, const SkMatrix*);
732 void execute(SkCanvas* canvas) const override;
733
734private:
735 sk_sp<SkDrawable> fDrawable;
736 SkTLazy<SkMatrix> fMatrix;
737
738 typedef SkDrawCommand INHERITED;
739};
740#endif