blob: 9a84e9a1855df404317f6a37c5037afa978d5f8f [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,
Brian Salomond7065e72018-10-12 11:42:02 -040046 kDrawImageSet_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080047 kDrawOval_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040048 kDrawArc_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080049 kDrawPaint_OpType,
50 kDrawPatch_OpType,
51 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080052 kDrawPoints_OpType,
53 kDrawPosText_OpType,
54 kDrawPosTextH_OpType,
55 kDrawRect_OpType,
56 kDrawRRect_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040057 kDrawRegion_OpType,
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -040058 kDrawShadow_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080059 kDrawText_OpType,
60 kDrawTextBlob_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,
robertphillips72942b82015-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
Brian Osmand9ea8162018-08-08 17:03:39 -040076 static void WritePNG(SkBitmap bitmap, SkWStream& out);
ethannicholasf67531f2016-03-21 10:19:39 -070077
robertphillips9bafc302015-02-13 11:13:00 -080078 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000079
Brian Osman255735e2018-04-06 14:51:42 -040080 virtual ~SkDrawCommand() {}
chudy@google.com902ebe52012-06-29 14:21:22 +000081
chudy@google.com0b5bbb02012-07-31 19:55:32 +000082 bool isVisible() const {
83 return fVisible;
84 }
85
86 void setVisible(bool toggle) {
87 fVisible = toggle;
88 }
chudy@google.com902ebe52012-06-29 14:21:22 +000089
fmalita8c89c522014-11-08 16:18:56 -080090 virtual void execute(SkCanvas*) const = 0;
chudy@google.com902ebe52012-06-29 14:21:22 +000091
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000092 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +000093
ethannicholasf62a8b72016-02-11 10:35:21 -080094 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -080095
robertphillips9bafc302015-02-13 11:13:00 -080096 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +000097
joshualittbd724132016-03-03 11:39:38 -080098 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -070099 static Json::Value MakeJsonColor(const SkColor color);
brianosman97bbf822016-09-25 13:15:58 -0700100 static Json::Value MakeJsonColor4f(const SkColor4f& color);
brianosmanfad98562016-05-04 11:06:28 -0700101 static Json::Value MakeJsonPoint(const SkPoint& point);
102 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400103 static Json::Value MakeJsonPoint3(const SkPoint3& point);
brianosmanfad98562016-05-04 11:06:28 -0700104 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800105 static Json::Value MakeJsonIRect(const SkIRect&);
106 static Json::Value MakeJsonMatrix(const SkMatrix&);
vjiaoblacke5de1302016-07-13 14:05:28 -0700107 static Json::Value MakeJsonScalar(SkScalar);
brianosmanfad98562016-05-04 11:06:28 -0700108 static Json::Value MakeJsonPath(const SkPath& path);
109 static Json::Value MakeJsonRegion(const SkRegion& region);
110 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500111 static Json::Value MakeJsonLattice(const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700112
113 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
114 UrlDataManager& urlDataManager);
115 static bool flatten(const SkImage& image, Json::Value* target,
116 UrlDataManager& urlDataManager);
117 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
118 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800119
chudy@google.com902ebe52012-06-29 14:21:22 +0000120private:
robertphillips9bafc302015-02-13 11:13:00 -0800121 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000122 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000123};
124
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000125class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000126public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000127 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700128 void execute(SkCanvas* canvas) const override;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000129
130private:
131 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000132};
133
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000134class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000135public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000136 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700137 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800138 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800139
chudy@google.com902ebe52012-06-29 14:21:22 +0000140private:
141 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000142
143 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000144};
145
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000146class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000147public:
Mike Reedc1f77742016-12-09 09:00:50 -0500148 SkClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700149 void execute(SkCanvas* canvas) const override;
150 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800151 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800152
chudy@google.com902ebe52012-06-29 14:21:22 +0000153private:
Mike Reedc1f77742016-12-09 09:00:50 -0500154 SkPath fPath;
155 SkClipOp fOp;
156 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000157
158 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000159};
160
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000161class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000162public:
Mike Reedc1f77742016-12-09 09:00:50 -0500163 SkClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700164 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800165 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800166
chudy@google.com902ebe52012-06-29 14:21:22 +0000167private:
Mike Reedc1f77742016-12-09 09:00:50 -0500168 SkRegion fRegion;
169 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000170
171 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000172};
173
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000174class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000175public:
Mike Reedc1f77742016-12-09 09:00:50 -0500176 SkClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700177 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800178 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000179
chudy@google.com902ebe52012-06-29 14:21:22 +0000180private:
Mike Reedc1f77742016-12-09 09:00:50 -0500181 SkRect fRect;
182 SkClipOp fOp;
183 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000184
185 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000186};
187
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000188class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000189public:
Mike Reedc1f77742016-12-09 09:00:50 -0500190 SkClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700191 void execute(SkCanvas* canvas) const override;
192 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800193 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000194
robertphillips@google.com67baba42013-01-02 20:20:31 +0000195private:
Mike Reedc1f77742016-12-09 09:00:50 -0500196 SkRRect fRRect;
197 SkClipOp fOp;
198 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000199
200 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000201};
202
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000203class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000204public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000205 SkConcatCommand(const SkMatrix& matrix);
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;
ethannicholas50a8dd02016-02-10 05:40:46 -0800208
chudy@google.com902ebe52012-06-29 14:21:22 +0000209private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000210 SkMatrix fMatrix;
211
212 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000213};
214
reed97660cc2016-06-28 18:54:19 -0700215class SkDrawAnnotationCommand : public SkDrawCommand {
216public:
217 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
218 void execute(SkCanvas* canvas) const override;
219 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
reed97660cc2016-06-28 18:54:19 -0700220
221private:
222 SkRect fRect;
223 SkString fKey;
224 sk_sp<SkData> fValue;
225
226 typedef SkDrawCommand INHERITED;
227};
228
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000229class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000230public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000231 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000232 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700233 void execute(SkCanvas* canvas) const override;
234 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800235 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800236
chudy@google.com902ebe52012-06-29 14:21:22 +0000237private:
Brian Osman8363be12018-05-29 13:38:07 -0400238 SkBitmap fBitmap;
239 SkScalar fLeft;
240 SkScalar fTop;
241 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000242
243 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000244};
245
Brian Osman78a76482018-05-18 16:59:13 -0400246class SkDrawBitmapLatticeCommand : public SkDrawCommand {
247public:
248 SkDrawBitmapLatticeCommand(const SkBitmap& bitmap, const SkCanvas::Lattice& lattice,
249 const SkRect& dst, const SkPaint* paint);
250 void execute(SkCanvas* canvas) const override;
251 bool render(SkCanvas* canvas) const override;
252 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osman78a76482018-05-18 16:59:13 -0400253
254private:
255 SkBitmap fBitmap;
256 SkCanvas::Lattice fLattice;
257 SkRect fDst;
258 SkTLazy<SkPaint> fPaint;
259
260 typedef SkDrawCommand INHERITED;
261};
262
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000263class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000264public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000265 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000266 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700267 void execute(SkCanvas* canvas) const override;
268 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800269 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800270
chudy@google.com902ebe52012-06-29 14:21:22 +0000271private:
Brian Osman8363be12018-05-29 13:38:07 -0400272 SkBitmap fBitmap;
273 SkIRect fCenter;
274 SkRect fDst;
275 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000276
277 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000278};
279
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000280class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000281public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000282 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000283 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700284 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700285 void execute(SkCanvas* canvas) const override;
286 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800287 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000288
chudy@google.com902ebe52012-06-29 14:21:22 +0000289private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000290 SkBitmap fBitmap;
Brian Osman8363be12018-05-29 13:38:07 -0400291 SkTLazy<SkRect> fSrc;
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000292 SkRect fDst;
Brian Osman8363be12018-05-29 13:38:07 -0400293 SkTLazy<SkPaint> fPaint;
reeda5517e22015-07-14 10:54:12 -0700294 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000295
296 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000297};
298
fmalita651c9202015-07-22 10:23:01 -0700299class SkDrawImageCommand : public SkDrawCommand {
300public:
301 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
302 void execute(SkCanvas* canvas) const override;
303 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800304 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800305
fmalita651c9202015-07-22 10:23:01 -0700306private:
Hal Canary1b612a82016-11-03 16:26:13 -0400307 sk_sp<const SkImage> fImage;
308 SkScalar fLeft;
309 SkScalar fTop;
310 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700311
312 typedef SkDrawCommand INHERITED;
313};
314
Stan Ilievac42aeb2017-01-12 16:20:50 -0500315class SkDrawImageLatticeCommand : public SkDrawCommand {
316public:
317 SkDrawImageLatticeCommand(const SkImage* image, const SkCanvas::Lattice& lattice,
318 const SkRect& dst, const SkPaint* paint);
319 void execute(SkCanvas* canvas) const override;
320 bool render(SkCanvas* canvas) const override;
321 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
322
323private:
324 sk_sp<const SkImage> fImage;
325 SkCanvas::Lattice fLattice;
326 SkRect fDst;
327 SkTLazy<SkPaint> fPaint;
328
329 typedef SkDrawCommand INHERITED;
330};
331
Brian Osmanc25e2692018-03-12 10:57:28 -0400332class SkDrawImageNineCommand : public SkDrawCommand {
333public:
334 SkDrawImageNineCommand(const SkImage* image, const SkIRect& center,
335 const SkRect& dst, const SkPaint* paint);
336 void execute(SkCanvas* canvas) const override;
337 bool render(SkCanvas* canvas) const override;
338 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400339
340private:
341 sk_sp<const SkImage> fImage;
342 SkIRect fCenter;
343 SkRect fDst;
Brian Osman8363be12018-05-29 13:38:07 -0400344 SkTLazy<SkPaint> fPaint;
Brian Osmanc25e2692018-03-12 10:57:28 -0400345
346 typedef SkDrawCommand INHERITED;
347};
348
fmalita651c9202015-07-22 10:23:01 -0700349class SkDrawImageRectCommand : public SkDrawCommand {
350public:
351 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
352 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
353 void execute(SkCanvas* canvas) const override;
354 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800355 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800356
fmalita651c9202015-07-22 10:23:01 -0700357private:
Hal Canary1b612a82016-11-03 16:26:13 -0400358 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700359 SkTLazy<SkRect> fSrc;
360 SkRect fDst;
361 SkTLazy<SkPaint> fPaint;
362 SkCanvas::SrcRectConstraint fConstraint;
363
364 typedef SkDrawCommand INHERITED;
365};
366
Brian Salomond7065e72018-10-12 11:42:02 -0400367class SkDrawImageSetCommand : public SkDrawCommand {
368public:
369 SkDrawImageSetCommand(const SkCanvas::ImageSetEntry[], int count, float alpha, SkFilterQuality,
370 SkBlendMode);
371 void execute(SkCanvas* canvas) const override;
372
373private:
374 SkAutoTArray<SkCanvas::ImageSetEntry> fSet;
375 int fCount;
376 float fAlpha;
377 SkFilterQuality fFilterQuality;
378 SkBlendMode fMode;
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;
ethannicholas50a8dd02016-02-10 05:40:46 -0800389
robertphillips@google.com67baba42013-01-02 20:20:31 +0000390private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000391 SkRect fOval;
392 SkPaint fPaint;
393
394 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000395};
396
bsalomonac3aa242016-08-19 11:25:19 -0700397class SkDrawArcCommand : public SkDrawCommand {
398public:
399 SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
400 const SkPaint& paint);
401 void execute(SkCanvas* canvas) const override;
402 bool render(SkCanvas* canvas) const override;
403 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
bsalomonac3aa242016-08-19 11:25:19 -0700404
405private:
406 SkRect fOval;
407 SkScalar fStartAngle;
408 SkScalar fSweepAngle;
409 bool fUseCenter;
410 SkPaint fPaint;
411
412 typedef SkDrawCommand INHERITED;
413};
414
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000415class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000416public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000417 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700418 void execute(SkCanvas* canvas) const override;
419 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800420 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800421
chudy@google.com902ebe52012-06-29 14:21:22 +0000422private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000423 SkPaint fPaint;
424
425 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000426};
427
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000428class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000429public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000430 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700431 void execute(SkCanvas* canvas) const override;
432 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800433 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000434
chudy@google.com902ebe52012-06-29 14:21:22 +0000435private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000436 SkPath fPath;
437 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000438
439 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000440};
441
fmalita160ebb22015-04-01 20:58:37 -0700442class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000443public:
fmalita160ebb22015-04-01 20:58:37 -0700444 SkBeginDrawPictureCommand(const SkPicture* picture,
445 const SkMatrix* matrix,
446 const SkPaint* paint);
447
mtklein36352bf2015-03-25 18:17:31 -0700448 void execute(SkCanvas* canvas) const override;
449 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000450
chudy@google.com902ebe52012-06-29 14:21:22 +0000451private:
Hal Canary1b612a82016-11-03 16:26:13 -0400452 sk_sp<const SkPicture> fPicture;
453 SkTLazy<SkMatrix> fMatrix;
454 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700455
456 typedef SkDrawCommand INHERITED;
457};
458
459class SkEndDrawPictureCommand : public SkDrawCommand {
460public:
461 SkEndDrawPictureCommand(bool restore);
462
463 void execute(SkCanvas* canvas) const override;
464
465private:
466 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000467
468 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000469};
470
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000471class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000472public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000473 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000474 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700475 void execute(SkCanvas* canvas) const override;
476 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800477 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800478
chudy@google.com902ebe52012-06-29 14:21:22 +0000479private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000480 SkCanvas::PointMode fMode;
Brian Osman8363be12018-05-29 13:38:07 -0400481 SkTDArray<SkPoint> fPts;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000482 SkPaint fPaint;
483
484 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000485};
486
Brian Osmanc25e2692018-03-12 10:57:28 -0400487class SkDrawRegionCommand : public SkDrawCommand {
488public:
489 SkDrawRegionCommand(const SkRegion& region, const SkPaint& paint);
490 void execute(SkCanvas* canvas) const override;
491 bool render(SkCanvas* canvas) const override;
492 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400493
494private:
495 SkRegion fRegion;
496 SkPaint fPaint;
497
498 typedef SkDrawCommand INHERITED;
499};
500
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000501class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000502public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000503 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000504 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700505 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800506 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800507
chudy@google.com902ebe52012-06-29 14:21:22 +0000508private:
Brian Osman65197ff2018-05-29 14:25:39 -0400509 sk_sp<SkData> fText;
510 SkScalar fX;
511 SkScalar fY;
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 SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000518public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000519 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
520 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;
526 SkTDArray<SkPoint> fPos;
527 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000528
529 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000530};
531
reed45561a02016-07-07 12:47:17 -0700532class SkDrawTextRSXformCommand : public SkDrawCommand {
533public:
534 SkDrawTextRSXformCommand(const void* text, size_t byteLength, const SkRSXform[],
535 const SkRect*, const SkPaint& paint);
reed45561a02016-07-07 12:47:17 -0700536 void execute(SkCanvas* canvas) const override;
537 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
reed45561a02016-07-07 12:47:17 -0700538
539private:
Brian Osman65197ff2018-05-29 14:25:39 -0400540 sk_sp<SkData> fText;
541 SkTDArray<SkRSXform> fXform;
542 SkTLazy<SkRect> fCull;
543 SkPaint fPaint;
reed45561a02016-07-07 12:47:17 -0700544
545 typedef SkDrawCommand INHERITED;
546};
547
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000548class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000549public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000550 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
551 SkScalar constY, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700552 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800553 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800554
chudy@google.com902ebe52012-06-29 14:21:22 +0000555private:
Brian Osman65197ff2018-05-29 14:25:39 -0400556 sk_sp<SkData> fText;
557 SkTDArray<SkScalar> fXpos;
558 SkScalar fConstY;
559 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000560
561 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000562};
563
fmalitab7425172014-08-26 07:56:44 -0700564class SkDrawTextBlobCommand : public SkDrawCommand {
565public:
fmalita37283c22016-09-13 10:00:23 -0700566 SkDrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700567
mtklein36352bf2015-03-25 18:17:31 -0700568 void execute(SkCanvas* canvas) const override;
569 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800570 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
fmalitab7425172014-08-26 07:56:44 -0700571
572private:
fmalita37283c22016-09-13 10:00:23 -0700573 sk_sp<SkTextBlob> fBlob;
574 SkScalar fXPos;
575 SkScalar fYPos;
576 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700577
578 typedef SkDrawCommand INHERITED;
579};
580
robertphillips9bafc302015-02-13 11:13:00 -0800581class SkDrawPatchCommand : public SkDrawCommand {
582public:
583 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
Mike Reed7d954ad2016-10-28 15:42:34 -0400584 const SkPoint texCoords[4], SkBlendMode bmode,
robertphillips9bafc302015-02-13 11:13:00 -0800585 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700586 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800587 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800588
589private:
590 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800591 SkColor* fColorsPtr;
592 SkColor fColors[4];
593 SkPoint* fTexCoordsPtr;
594 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400595 SkBlendMode fBlendMode;
robertphillips9bafc302015-02-13 11:13:00 -0800596 SkPaint fPaint;
597
598 typedef SkDrawCommand INHERITED;
599};
600
601
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000602class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000603public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000604 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700605 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800606 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000607
chudy@google.com902ebe52012-06-29 14:21:22 +0000608private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000609 SkRect fRect;
610 SkPaint fPaint;
611
612 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000613};
614
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000615class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000616public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000617 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700618 void execute(SkCanvas* canvas) const override;
619 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800620 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800621
robertphillips@google.com67baba42013-01-02 20:20:31 +0000622private:
623 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000624 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000625
626 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000627};
628
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000629class SkDrawDRRectCommand : public SkDrawCommand {
630public:
631 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
632 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700633 void execute(SkCanvas* canvas) const override;
634 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800635 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800636
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000637private:
638 SkRRect fOuter;
639 SkRRect fInner;
640 SkPaint fPaint;
641
642 typedef SkDrawCommand INHERITED;
643};
644
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000645class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000646public:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400647 SkDrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
648
mtklein36352bf2015-03-25 18:17:31 -0700649 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800650
chudy@google.com902ebe52012-06-29 14:21:22 +0000651private:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400652 sk_sp<SkVertices> fVertices;
653 SkBlendMode fBlendMode;
654 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000655
656 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000657};
658
Brian Osman616f1cb2018-05-29 11:23:35 -0400659class SkDrawAtlasCommand : public SkDrawCommand {
660public:
661 SkDrawAtlasCommand(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int,
662 SkBlendMode, const SkRect*, const SkPaint*);
663
664 void execute(SkCanvas* canvas) const override;
665
666private:
667 sk_sp<const SkImage> fImage;
668 SkTDArray<SkRSXform> fXform;
669 SkTDArray<SkRect> fTex;
670 SkTDArray<SkColor> fColors;
671 SkBlendMode fBlendMode;
672 SkTLazy<SkRect> fCull;
673 SkTLazy<SkPaint> fPaint;
674
675 typedef SkDrawCommand INHERITED;
676};
677
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000678class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000679public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400680 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700681 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800682
chudy@google.com902ebe52012-06-29 14:21:22 +0000683private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000684 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000685};
686
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000687class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000688public:
reed4960eee2015-12-18 07:09:18 -0800689 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
mtklein36352bf2015-03-25 18:17:31 -0700690 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800691 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000692
chudy@google.com902ebe52012-06-29 14:21:22 +0000693private:
Brian Osman8363be12018-05-29 13:38:07 -0400694 SkTLazy<SkRect> fBounds;
695 SkTLazy<SkPaint> fPaint;
696 sk_sp<const SkImageFilter> fBackdrop;
697 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000698
699 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000700};
701
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000702class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000703public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000704 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700705 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800706 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800707
chudy@google.com902ebe52012-06-29 14:21:22 +0000708private:
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000709 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000710
711 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000712};
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400713
714class SkDrawShadowCommand : public SkDrawCommand {
715public:
716 SkDrawShadowCommand(const SkPath& path, const SkDrawShadowRec& rec);
717 void execute(SkCanvas* canvas) const override;
718 bool render(SkCanvas* canvas) const override;
719 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400720
721private:
722 SkPath fPath;
723 SkDrawShadowRec fShadowRec;
724
725 typedef SkDrawCommand INHERITED;
726};
vjiaoblacke6f5d562016-08-25 06:30:23 -0700727
Brian Osmanc7611082018-05-29 14:55:50 -0400728class SkDrawDrawableCommand : public SkDrawCommand {
729public:
730 SkDrawDrawableCommand(SkDrawable*, const SkMatrix*);
731 void execute(SkCanvas* canvas) const override;
732
733private:
734 sk_sp<SkDrawable> fDrawable;
735 SkTLazy<SkMatrix> fMatrix;
736
737 typedef SkDrawCommand INHERITED;
738};
739#endif