blob: a9add5c6bf30d77bfe7695b50aa55a6ebddce864 [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
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "include/core/SkBitmap.h"
12#include "include/core/SkCanvas.h"
13#include "include/core/SkFlattenable.h"
14#include "include/core/SkPath.h"
15#include "include/core/SkRRect.h"
16#include "include/core/SkRSXform.h"
17#include "include/core/SkRegion.h"
18#include "include/core/SkString.h"
19#include "include/core/SkVertices.h"
20#include "include/private/SkTDArray.h"
21#include "src/core/SkDrawShadowInfo.h"
22#include "src/core/SkTLazy.h"
23#include "src/utils/SkJSONWriter.h"
24#include "tools/UrlDataManager.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000025
Nathaniel Nifong20b177a2019-12-12 11:05:10 -050026class DebugLayerManager;
27
Mike Klein8f4e2242019-03-20 11:59:00 -050028class DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000029public:
robertphillips9bafc302015-02-13 11:13:00 -080030 enum OpType {
fmalita160ebb22015-04-01 20:58:37 -070031 kBeginDrawPicture_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040032 kClear_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080033 kClipPath_OpType,
34 kClipRegion_OpType,
35 kClipRect_OpType,
36 kClipRRect_OpType,
Mike Reed121c2af2020-03-10 14:02:56 -040037 kClipShader_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080038 kConcat_OpType,
reed97660cc2016-06-28 18:54:19 -070039 kDrawAnnotation_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080040 kDrawBitmap_OpType,
Brian Osman78a76482018-05-18 16:59:13 -040041 kDrawBitmapLattice_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080042 kDrawBitmapNine_OpType,
43 kDrawBitmapRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080044 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070045 kDrawImage_OpType,
Stan Ilievac42aeb2017-01-12 16:20:50 -050046 kDrawImageLattice_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040047 kDrawImageNine_OpType,
fmalita651c9202015-07-22 10:23:01 -070048 kDrawImageRect_OpType,
Nathaniel Nifong20b177a2019-12-12 11:05:10 -050049 kDrawImageRectLayer_OpType, // unique to DebugCanvas
robertphillips9bafc302015-02-13 11:13:00 -080050 kDrawOval_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040051 kDrawArc_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080052 kDrawPaint_OpType,
53 kDrawPatch_OpType,
54 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080055 kDrawPoints_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080056 kDrawRect_OpType,
57 kDrawRRect_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040058 kDrawRegion_OpType,
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -040059 kDrawShadow_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080060 kDrawTextBlob_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080061 kDrawVertices_OpType,
Brian Osman616f1cb2018-05-29 11:23:35 -040062 kDrawAtlas_OpType,
Brian Osmanc7611082018-05-29 14:55:50 -040063 kDrawDrawable_OpType,
Michael Ludwig390f0cc2019-03-19 09:16:38 -040064 kDrawEdgeAAQuad_OpType,
65 kDrawEdgeAAImageSet_OpType,
fmalita160ebb22015-04-01 20:58:37 -070066 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080067 kRestore_OpType,
68 kSave_OpType,
69 kSaveLayer_OpType,
70 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080071
Jim Van Verth343fe492017-05-02 16:49:24 -040072 kLast_OpType = kSetMatrix_OpType
robertphillips9bafc302015-02-13 11:13:00 -080073 };
74
75 static const int kOpTypeCount = kLast_OpType + 1;
76
Brian Osmand9ea8162018-08-08 17:03:39 -040077 static void WritePNG(SkBitmap bitmap, SkWStream& out);
ethannicholasf67531f2016-03-21 10:19:39 -070078
Mike Klein8f4e2242019-03-20 11:59:00 -050079 DrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000080
Mike Klein8f4e2242019-03-20 11:59:00 -050081 virtual ~DrawCommand() {}
chudy@google.com902ebe52012-06-29 14:21:22 +000082
Mike Klein8f4e2242019-03-20 11:59:00 -050083 bool isVisible() const { return fVisible; }
chudy@google.com0b5bbb02012-07-31 19:55:32 +000084
Mike Klein8f4e2242019-03-20 11:59:00 -050085 void setVisible(bool toggle) { fVisible = toggle; }
chudy@google.com902ebe52012-06-29 14:21:22 +000086
fmalita8c89c522014-11-08 16:18:56 -080087 virtual void execute(SkCanvas*) const = 0;
chudy@google.com902ebe52012-06-29 14:21:22 +000088
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000089 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +000090
Brian Osmand8a90f92019-01-28 13:41:19 -050091 virtual void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -080092
robertphillips9bafc302015-02-13 11:13:00 -080093 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +000094
joshualittbd724132016-03-03 11:39:38 -080095 // Helper methods for converting things to JSON
Brian Osmand8a90f92019-01-28 13:41:19 -050096 static void MakeJsonColor(SkJSONWriter&, const SkColor color);
97 static void MakeJsonColor4f(SkJSONWriter&, const SkColor4f& color);
98 static void MakeJsonPoint(SkJSONWriter&, const SkPoint& point);
99 static void MakeJsonPoint(SkJSONWriter&, SkScalar x, SkScalar y);
100 static void MakeJsonPoint3(SkJSONWriter&, const SkPoint3& point);
101 static void MakeJsonRect(SkJSONWriter&, const SkRect& rect);
102 static void MakeJsonIRect(SkJSONWriter&, const SkIRect&);
103 static void MakeJsonMatrix(SkJSONWriter&, const SkMatrix&);
104 static void MakeJsonPath(SkJSONWriter&, const SkPath& path);
105 static void MakeJsonRegion(SkJSONWriter&, const SkRegion& region);
106 static void MakeJsonPaint(SkJSONWriter&, const SkPaint& paint, UrlDataManager& urlDataManager);
107 static void MakeJsonLattice(SkJSONWriter&, const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700108
Mike Klein8f4e2242019-03-20 11:59:00 -0500109 static void flatten(const SkFlattenable* flattenable,
110 SkJSONWriter& writer,
111 UrlDataManager& urlDataManager);
112 static bool flatten(const SkImage& image, SkJSONWriter& writer, UrlDataManager& urlDataManager);
113 static bool flatten(const SkBitmap& bitmap,
114 SkJSONWriter& writer,
brianosmanfad98562016-05-04 11:06:28 -0700115 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800116
chudy@google.com902ebe52012-06-29 14:21:22 +0000117private:
robertphillips9bafc302015-02-13 11:13:00 -0800118 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000119 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000120};
121
Mike Klein17428132019-03-20 13:02:32 -0500122class RestoreCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000123public:
Mike Klein17428132019-03-20 13:02:32 -0500124 RestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700125 void execute(SkCanvas* canvas) const override;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000126
127private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500128 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000129};
130
Mike Klein17428132019-03-20 13:02:32 -0500131class ClearCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000132public:
Mike Klein17428132019-03-20 13:02:32 -0500133 ClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700134 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500135 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800136
chudy@google.com902ebe52012-06-29 14:21:22 +0000137private:
138 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000139
Mike Klein8f4e2242019-03-20 11:59:00 -0500140 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000141};
142
Mike Klein17428132019-03-20 13:02:32 -0500143class ClipPathCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000144public:
Mike Klein17428132019-03-20 13:02:32 -0500145 ClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700146 void execute(SkCanvas* canvas) const override;
147 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500148 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800149
chudy@google.com902ebe52012-06-29 14:21:22 +0000150private:
Mike Reedc1f77742016-12-09 09:00:50 -0500151 SkPath fPath;
152 SkClipOp fOp;
153 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000154
Mike Klein8f4e2242019-03-20 11:59:00 -0500155 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000156};
157
Mike Klein17428132019-03-20 13:02:32 -0500158class ClipRegionCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000159public:
Mike Klein17428132019-03-20 13:02:32 -0500160 ClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700161 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500162 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800163
chudy@google.com902ebe52012-06-29 14:21:22 +0000164private:
Mike Reedc1f77742016-12-09 09:00:50 -0500165 SkRegion fRegion;
166 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000167
Mike Klein8f4e2242019-03-20 11:59:00 -0500168 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000169};
170
Mike Klein17428132019-03-20 13:02:32 -0500171class ClipRectCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000172public:
Mike Klein17428132019-03-20 13:02:32 -0500173 ClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700174 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500175 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000176
chudy@google.com902ebe52012-06-29 14:21:22 +0000177private:
Mike Reedc1f77742016-12-09 09:00:50 -0500178 SkRect fRect;
179 SkClipOp fOp;
180 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000181
Mike Klein8f4e2242019-03-20 11:59:00 -0500182 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000183};
184
Mike Klein17428132019-03-20 13:02:32 -0500185class ClipRRectCommand : public DrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000186public:
Mike Klein17428132019-03-20 13:02:32 -0500187 ClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700188 void execute(SkCanvas* canvas) const override;
189 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500190 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000191
robertphillips@google.com67baba42013-01-02 20:20:31 +0000192private:
Mike Reedc1f77742016-12-09 09:00:50 -0500193 SkRRect fRRect;
194 SkClipOp fOp;
195 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000196
Mike Klein8f4e2242019-03-20 11:59:00 -0500197 typedef DrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000198};
199
Mike Reed121c2af2020-03-10 14:02:56 -0400200class ClipShaderCommand : public DrawCommand {
201public:
202 ClipShaderCommand(sk_sp<SkShader>, SkClipOp);
203 void execute(SkCanvas* canvas) const override;
204 bool render(SkCanvas* canvas) const override;
205 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
206
207private:
208 sk_sp<SkShader> fShader;
209 SkClipOp fOp;
210
211 typedef DrawCommand INHERITED;
212};
213
Mike Klein17428132019-03-20 13:02:32 -0500214class ConcatCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000215public:
Mike Klein17428132019-03-20 13:02:32 -0500216 ConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700217 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500218 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800219
chudy@google.com902ebe52012-06-29 14:21:22 +0000220private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000221 SkMatrix fMatrix;
222
Mike Klein8f4e2242019-03-20 11:59:00 -0500223 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000224};
225
Mike Klein17428132019-03-20 13:02:32 -0500226class DrawAnnotationCommand : public DrawCommand {
reed97660cc2016-06-28 18:54:19 -0700227public:
Mike Klein17428132019-03-20 13:02:32 -0500228 DrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
reed97660cc2016-06-28 18:54:19 -0700229 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500230 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
reed97660cc2016-06-28 18:54:19 -0700231
232private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500233 SkRect fRect;
234 SkString fKey;
235 sk_sp<SkData> fValue;
reed97660cc2016-06-28 18:54:19 -0700236
Mike Klein8f4e2242019-03-20 11:59:00 -0500237 typedef DrawCommand INHERITED;
reed97660cc2016-06-28 18:54:19 -0700238};
239
Mike Klein17428132019-03-20 13:02:32 -0500240class DrawBitmapCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000241public:
Mike Klein17428132019-03-20 13:02:32 -0500242 DrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700243 void execute(SkCanvas* canvas) const override;
244 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500245 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800246
chudy@google.com902ebe52012-06-29 14:21:22 +0000247private:
Brian Osman8363be12018-05-29 13:38:07 -0400248 SkBitmap fBitmap;
249 SkScalar fLeft;
250 SkScalar fTop;
251 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000252
Mike Klein8f4e2242019-03-20 11:59:00 -0500253 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000254};
255
Mike Klein17428132019-03-20 13:02:32 -0500256class DrawBitmapLatticeCommand : public DrawCommand {
Brian Osman78a76482018-05-18 16:59:13 -0400257public:
Mike Klein17428132019-03-20 13:02:32 -0500258 DrawBitmapLatticeCommand(const SkBitmap& bitmap,
259 const SkCanvas::Lattice& lattice,
260 const SkRect& dst,
261 const SkPaint* paint);
Brian Osman78a76482018-05-18 16:59:13 -0400262 void execute(SkCanvas* canvas) const override;
263 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500264 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Brian Osman78a76482018-05-18 16:59:13 -0400265
266private:
267 SkBitmap fBitmap;
268 SkCanvas::Lattice fLattice;
269 SkRect fDst;
270 SkTLazy<SkPaint> fPaint;
271
Mike Klein8f4e2242019-03-20 11:59:00 -0500272 typedef DrawCommand INHERITED;
Brian Osman78a76482018-05-18 16:59:13 -0400273};
274
Mike Klein17428132019-03-20 13:02:32 -0500275class DrawBitmapNineCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000276public:
Mike Klein17428132019-03-20 13:02:32 -0500277 DrawBitmapNineCommand(const SkBitmap& bitmap,
278 const SkIRect& center,
279 const SkRect& dst,
280 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700281 void execute(SkCanvas* canvas) const override;
282 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500283 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800284
chudy@google.com902ebe52012-06-29 14:21:22 +0000285private:
Brian Osman8363be12018-05-29 13:38:07 -0400286 SkBitmap fBitmap;
287 SkIRect fCenter;
288 SkRect fDst;
289 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000290
Mike Klein8f4e2242019-03-20 11:59:00 -0500291 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000292};
293
Mike Klein17428132019-03-20 13:02:32 -0500294class DrawBitmapRectCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000295public:
Mike Klein17428132019-03-20 13:02:32 -0500296 DrawBitmapRectCommand(const SkBitmap& bitmap,
297 const SkRect* src,
298 const SkRect& dst,
299 const SkPaint* paint,
300 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700301 void execute(SkCanvas* canvas) const override;
302 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500303 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000304
chudy@google.com902ebe52012-06-29 14:21:22 +0000305private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500306 SkBitmap fBitmap;
307 SkTLazy<SkRect> fSrc;
308 SkRect fDst;
309 SkTLazy<SkPaint> fPaint;
310 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000311
Mike Klein8f4e2242019-03-20 11:59:00 -0500312 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000313};
314
Mike Klein17428132019-03-20 13:02:32 -0500315class DrawImageCommand : public DrawCommand {
fmalita651c9202015-07-22 10:23:01 -0700316public:
Mike Klein17428132019-03-20 13:02:32 -0500317 DrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
fmalita651c9202015-07-22 10:23:01 -0700318 void execute(SkCanvas* canvas) const override;
319 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500320 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800321
fmalita651c9202015-07-22 10:23:01 -0700322private:
Hal Canary1b612a82016-11-03 16:26:13 -0400323 sk_sp<const SkImage> fImage;
324 SkScalar fLeft;
325 SkScalar fTop;
326 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700327
Mike Klein8f4e2242019-03-20 11:59:00 -0500328 typedef DrawCommand INHERITED;
fmalita651c9202015-07-22 10:23:01 -0700329};
330
Mike Klein17428132019-03-20 13:02:32 -0500331class DrawImageLatticeCommand : public DrawCommand {
Stan Ilievac42aeb2017-01-12 16:20:50 -0500332public:
Mike Klein17428132019-03-20 13:02:32 -0500333 DrawImageLatticeCommand(const SkImage* image,
334 const SkCanvas::Lattice& lattice,
335 const SkRect& dst,
336 const SkPaint* paint);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500337 void execute(SkCanvas* canvas) const override;
338 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500339 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Stan Ilievac42aeb2017-01-12 16:20:50 -0500340
341private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500342 sk_sp<const SkImage> fImage;
343 SkCanvas::Lattice fLattice;
344 SkRect fDst;
345 SkTLazy<SkPaint> fPaint;
Stan Ilievac42aeb2017-01-12 16:20:50 -0500346
Mike Klein8f4e2242019-03-20 11:59:00 -0500347 typedef DrawCommand INHERITED;
Stan Ilievac42aeb2017-01-12 16:20:50 -0500348};
349
Mike Klein17428132019-03-20 13:02:32 -0500350class DrawImageNineCommand : public DrawCommand {
Brian Osmanc25e2692018-03-12 10:57:28 -0400351public:
Mike Klein17428132019-03-20 13:02:32 -0500352 DrawImageNineCommand(const SkImage* image,
353 const SkIRect& center,
354 const SkRect& dst,
355 const SkPaint* paint);
Brian Osmanc25e2692018-03-12 10:57:28 -0400356 void execute(SkCanvas* canvas) const override;
357 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500358 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400359
360private:
361 sk_sp<const SkImage> fImage;
362 SkIRect fCenter;
363 SkRect fDst;
Brian Osman8363be12018-05-29 13:38:07 -0400364 SkTLazy<SkPaint> fPaint;
Brian Osmanc25e2692018-03-12 10:57:28 -0400365
Mike Klein8f4e2242019-03-20 11:59:00 -0500366 typedef DrawCommand INHERITED;
Brian Osmanc25e2692018-03-12 10:57:28 -0400367};
368
Mike Klein17428132019-03-20 13:02:32 -0500369class DrawImageRectCommand : public DrawCommand {
fmalita651c9202015-07-22 10:23:01 -0700370public:
Mike Klein17428132019-03-20 13:02:32 -0500371 DrawImageRectCommand(const SkImage* image,
372 const SkRect* src,
373 const SkRect& dst,
374 const SkPaint* paint,
375 SkCanvas::SrcRectConstraint constraint);
fmalita651c9202015-07-22 10:23:01 -0700376 void execute(SkCanvas* canvas) const override;
377 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500378 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800379
fmalita651c9202015-07-22 10:23:01 -0700380private:
Hal Canary1b612a82016-11-03 16:26:13 -0400381 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700382 SkTLazy<SkRect> fSrc;
383 SkRect fDst;
384 SkTLazy<SkPaint> fPaint;
385 SkCanvas::SrcRectConstraint fConstraint;
386
Mike Klein8f4e2242019-03-20 11:59:00 -0500387 typedef DrawCommand INHERITED;
fmalita651c9202015-07-22 10:23:01 -0700388};
389
Nathaniel Nifong20b177a2019-12-12 11:05:10 -0500390// Command for resolving the deferred SkImage representing an android layer
391// Functions like DrawImageRect except it uses the saved UrlDataManager to resolve the image
392// at the time execute() is called.
393class DrawImageRectLayerCommand : public DrawCommand {
394public:
395 DrawImageRectLayerCommand(DebugLayerManager* layerManager,
396 const int nodeId,
397 const int frame,
398 const SkRect* src,
399 const SkRect& dst,
400 const SkPaint* paint,
401 SkCanvas::SrcRectConstraint constraint);
402 void execute(SkCanvas* canvas) const override;
403 bool render(SkCanvas* canvas) const override;
404 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
405
406private:
407 DebugLayerManager* fLayerManager;
408 int fNodeId;
409 int fFrame;
410 SkTLazy<SkRect> fSrc;
411 SkRect fDst;
412 SkTLazy<SkPaint> fPaint;
413 SkCanvas::SrcRectConstraint fConstraint;
414
415 typedef DrawCommand INHERITED;
416};
417
Mike Klein17428132019-03-20 13:02:32 -0500418class DrawOvalCommand : public DrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000419public:
Mike Klein17428132019-03-20 13:02:32 -0500420 DrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700421 void execute(SkCanvas* canvas) const override;
422 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500423 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800424
robertphillips@google.com67baba42013-01-02 20:20:31 +0000425private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000426 SkRect fOval;
427 SkPaint fPaint;
428
Mike Klein8f4e2242019-03-20 11:59:00 -0500429 typedef DrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000430};
431
Mike Klein17428132019-03-20 13:02:32 -0500432class DrawArcCommand : public DrawCommand {
bsalomonac3aa242016-08-19 11:25:19 -0700433public:
Mike Klein17428132019-03-20 13:02:32 -0500434 DrawArcCommand(const SkRect& oval,
435 SkScalar startAngle,
436 SkScalar sweepAngle,
437 bool useCenter,
438 const SkPaint& paint);
bsalomonac3aa242016-08-19 11:25:19 -0700439 void execute(SkCanvas* canvas) const override;
440 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500441 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
bsalomonac3aa242016-08-19 11:25:19 -0700442
443private:
444 SkRect fOval;
445 SkScalar fStartAngle;
446 SkScalar fSweepAngle;
447 bool fUseCenter;
448 SkPaint fPaint;
449
Mike Klein8f4e2242019-03-20 11:59:00 -0500450 typedef DrawCommand INHERITED;
bsalomonac3aa242016-08-19 11:25:19 -0700451};
452
Mike Klein17428132019-03-20 13:02:32 -0500453class DrawPaintCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000454public:
Mike Klein17428132019-03-20 13:02:32 -0500455 DrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700456 void execute(SkCanvas* canvas) const override;
457 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500458 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800459
chudy@google.com902ebe52012-06-29 14:21:22 +0000460private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000461 SkPaint fPaint;
462
Mike Klein8f4e2242019-03-20 11:59:00 -0500463 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000464};
465
Mike Reedd5674082019-04-19 15:00:47 -0400466class DrawBehindCommand : public DrawCommand {
467public:
468 DrawBehindCommand(const SkPaint& paint);
469 void execute(SkCanvas* canvas) const override;
470 bool render(SkCanvas* canvas) const override;
471 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
472
473private:
474 SkPaint fPaint;
475
476 typedef DrawCommand INHERITED;
477};
478
Mike Klein17428132019-03-20 13:02:32 -0500479class DrawPathCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000480public:
Mike Klein17428132019-03-20 13:02:32 -0500481 DrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700482 void execute(SkCanvas* canvas) const override;
483 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500484 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000485
chudy@google.com902ebe52012-06-29 14:21:22 +0000486private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500487 SkPath fPath;
488 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000489
Mike Klein8f4e2242019-03-20 11:59:00 -0500490 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000491};
492
Mike Klein17428132019-03-20 13:02:32 -0500493class BeginDrawPictureCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000494public:
Mike Klein17428132019-03-20 13:02:32 -0500495 BeginDrawPictureCommand(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint);
fmalita160ebb22015-04-01 20:58:37 -0700496
mtklein36352bf2015-03-25 18:17:31 -0700497 void execute(SkCanvas* canvas) const override;
498 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000499
chudy@google.com902ebe52012-06-29 14:21:22 +0000500private:
Hal Canary1b612a82016-11-03 16:26:13 -0400501 sk_sp<const SkPicture> fPicture;
502 SkTLazy<SkMatrix> fMatrix;
503 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700504
Mike Klein8f4e2242019-03-20 11:59:00 -0500505 typedef DrawCommand INHERITED;
fmalita160ebb22015-04-01 20:58:37 -0700506};
507
Mike Klein17428132019-03-20 13:02:32 -0500508class EndDrawPictureCommand : public DrawCommand {
fmalita160ebb22015-04-01 20:58:37 -0700509public:
Mike Klein17428132019-03-20 13:02:32 -0500510 EndDrawPictureCommand(bool restore);
fmalita160ebb22015-04-01 20:58:37 -0700511
512 void execute(SkCanvas* canvas) const override;
513
514private:
515 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000516
Mike Klein8f4e2242019-03-20 11:59:00 -0500517 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000518};
519
Mike Klein17428132019-03-20 13:02:32 -0500520class DrawPointsCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000521public:
Mike Klein17428132019-03-20 13:02:32 -0500522 DrawPointsCommand(SkCanvas::PointMode mode,
523 size_t count,
524 const SkPoint pts[],
525 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700526 void execute(SkCanvas* canvas) const override;
527 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500528 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800529
chudy@google.com902ebe52012-06-29 14:21:22 +0000530private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000531 SkCanvas::PointMode fMode;
Brian Osman8363be12018-05-29 13:38:07 -0400532 SkTDArray<SkPoint> fPts;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000533 SkPaint fPaint;
534
Mike Klein8f4e2242019-03-20 11:59:00 -0500535 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000536};
537
Mike Klein17428132019-03-20 13:02:32 -0500538class DrawRegionCommand : public DrawCommand {
Brian Osmanc25e2692018-03-12 10:57:28 -0400539public:
Mike Klein17428132019-03-20 13:02:32 -0500540 DrawRegionCommand(const SkRegion& region, const SkPaint& paint);
Brian Osmanc25e2692018-03-12 10:57:28 -0400541 void execute(SkCanvas* canvas) const override;
542 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500543 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400544
545private:
546 SkRegion fRegion;
547 SkPaint fPaint;
548
Mike Klein8f4e2242019-03-20 11:59:00 -0500549 typedef DrawCommand INHERITED;
Brian Osmanc25e2692018-03-12 10:57:28 -0400550};
551
Mike Klein17428132019-03-20 13:02:32 -0500552class DrawTextBlobCommand : public DrawCommand {
fmalitab7425172014-08-26 07:56:44 -0700553public:
Mike Klein17428132019-03-20 13:02:32 -0500554 DrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700555
mtklein36352bf2015-03-25 18:17:31 -0700556 void execute(SkCanvas* canvas) const override;
557 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500558 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
fmalitab7425172014-08-26 07:56:44 -0700559
560private:
fmalita37283c22016-09-13 10:00:23 -0700561 sk_sp<SkTextBlob> fBlob;
562 SkScalar fXPos;
563 SkScalar fYPos;
564 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700565
Mike Klein8f4e2242019-03-20 11:59:00 -0500566 typedef DrawCommand INHERITED;
fmalitab7425172014-08-26 07:56:44 -0700567};
568
Mike Klein17428132019-03-20 13:02:32 -0500569class DrawPatchCommand : public DrawCommand {
robertphillips9bafc302015-02-13 11:13:00 -0800570public:
Mike Klein17428132019-03-20 13:02:32 -0500571 DrawPatchCommand(const SkPoint cubics[12],
572 const SkColor colors[4],
573 const SkPoint texCoords[4],
574 SkBlendMode bmode,
575 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700576 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500577 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800578
579private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500580 SkPoint fCubics[12];
581 SkColor* fColorsPtr;
582 SkColor fColors[4];
583 SkPoint* fTexCoordsPtr;
584 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400585 SkBlendMode fBlendMode;
Mike Klein8f4e2242019-03-20 11:59:00 -0500586 SkPaint fPaint;
robertphillips9bafc302015-02-13 11:13:00 -0800587
Mike Klein8f4e2242019-03-20 11:59:00 -0500588 typedef DrawCommand INHERITED;
robertphillips9bafc302015-02-13 11:13:00 -0800589};
590
Mike Klein17428132019-03-20 13:02:32 -0500591class DrawRectCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000592public:
Mike Klein17428132019-03-20 13:02:32 -0500593 DrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700594 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500595 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000596
chudy@google.com902ebe52012-06-29 14:21:22 +0000597private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000598 SkRect fRect;
599 SkPaint fPaint;
600
Mike Klein8f4e2242019-03-20 11:59:00 -0500601 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000602};
603
Mike Klein17428132019-03-20 13:02:32 -0500604class DrawRRectCommand : public DrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000605public:
Mike Klein17428132019-03-20 13:02:32 -0500606 DrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700607 void execute(SkCanvas* canvas) const override;
608 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500609 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800610
robertphillips@google.com67baba42013-01-02 20:20:31 +0000611private:
612 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000613 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000614
Mike Klein8f4e2242019-03-20 11:59:00 -0500615 typedef DrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000616};
617
Mike Klein17428132019-03-20 13:02:32 -0500618class DrawDRRectCommand : public DrawCommand {
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000619public:
Mike Klein17428132019-03-20 13:02:32 -0500620 DrawDRRectCommand(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700621 void execute(SkCanvas* canvas) const override;
622 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500623 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800624
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000625private:
626 SkRRect fOuter;
627 SkRRect fInner;
628 SkPaint fPaint;
629
Mike Klein8f4e2242019-03-20 11:59:00 -0500630 typedef DrawCommand INHERITED;
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000631};
632
Mike Klein17428132019-03-20 13:02:32 -0500633class DrawVerticesCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000634public:
Mike Klein17428132019-03-20 13:02:32 -0500635 DrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
Mike Reedfed9cfd2017-03-17 12:09:04 -0400636
mtklein36352bf2015-03-25 18:17:31 -0700637 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800638
chudy@google.com902ebe52012-06-29 14:21:22 +0000639private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500640 sk_sp<SkVertices> fVertices;
641 SkBlendMode fBlendMode;
642 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000643
Mike Klein8f4e2242019-03-20 11:59:00 -0500644 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000645};
646
Mike Klein17428132019-03-20 13:02:32 -0500647class DrawAtlasCommand : public DrawCommand {
Brian Osman616f1cb2018-05-29 11:23:35 -0400648public:
Mike Klein17428132019-03-20 13:02:32 -0500649 DrawAtlasCommand(const SkImage*,
650 const SkRSXform[],
651 const SkRect[],
652 const SkColor[],
653 int,
654 SkBlendMode,
655 const SkRect*,
656 const SkPaint*);
Brian Osman616f1cb2018-05-29 11:23:35 -0400657
658 void execute(SkCanvas* canvas) const override;
659
660private:
661 sk_sp<const SkImage> fImage;
662 SkTDArray<SkRSXform> fXform;
663 SkTDArray<SkRect> fTex;
664 SkTDArray<SkColor> fColors;
665 SkBlendMode fBlendMode;
666 SkTLazy<SkRect> fCull;
667 SkTLazy<SkPaint> fPaint;
668
Mike Klein8f4e2242019-03-20 11:59:00 -0500669 typedef DrawCommand INHERITED;
Brian Osman616f1cb2018-05-29 11:23:35 -0400670};
671
Mike Klein17428132019-03-20 13:02:32 -0500672class SaveCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000673public:
Mike Klein17428132019-03-20 13:02:32 -0500674 SaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700675 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800676
chudy@google.com902ebe52012-06-29 14:21:22 +0000677private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500678 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000679};
680
Mike Klein17428132019-03-20 13:02:32 -0500681class SaveLayerCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000682public:
Mike Klein17428132019-03-20 13:02:32 -0500683 SaveLayerCommand(const SkCanvas::SaveLayerRec&);
mtklein36352bf2015-03-25 18:17:31 -0700684 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500685 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000686
chudy@google.com902ebe52012-06-29 14:21:22 +0000687private:
Brian Osman8363be12018-05-29 13:38:07 -0400688 SkTLazy<SkRect> fBounds;
689 SkTLazy<SkPaint> fPaint;
690 sk_sp<const SkImageFilter> fBackdrop;
691 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000692
Mike Klein8f4e2242019-03-20 11:59:00 -0500693 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000694};
695
Mike Klein17428132019-03-20 13:02:32 -0500696class SetMatrixCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000697public:
Mike Klein17428132019-03-20 13:02:32 -0500698 SetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700699 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500700 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800701
chudy@google.com902ebe52012-06-29 14:21:22 +0000702private:
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000703 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000704
Mike Klein8f4e2242019-03-20 11:59:00 -0500705 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000706};
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400707
Mike Klein17428132019-03-20 13:02:32 -0500708class DrawShadowCommand : public DrawCommand {
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400709public:
Mike Klein17428132019-03-20 13:02:32 -0500710 DrawShadowCommand(const SkPath& path, const SkDrawShadowRec& rec);
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400711 void execute(SkCanvas* canvas) const override;
712 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500713 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400714
715private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500716 SkPath fPath;
717 SkDrawShadowRec fShadowRec;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400718
Mike Klein8f4e2242019-03-20 11:59:00 -0500719 typedef DrawCommand INHERITED;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400720};
vjiaoblacke6f5d562016-08-25 06:30:23 -0700721
Mike Klein17428132019-03-20 13:02:32 -0500722class DrawDrawableCommand : public DrawCommand {
Brian Osmanc7611082018-05-29 14:55:50 -0400723public:
Mike Klein17428132019-03-20 13:02:32 -0500724 DrawDrawableCommand(SkDrawable*, const SkMatrix*);
Brian Osmanc7611082018-05-29 14:55:50 -0400725 void execute(SkCanvas* canvas) const override;
726
727private:
728 sk_sp<SkDrawable> fDrawable;
729 SkTLazy<SkMatrix> fMatrix;
730
Mike Klein8f4e2242019-03-20 11:59:00 -0500731 typedef DrawCommand INHERITED;
Brian Osmanc7611082018-05-29 14:55:50 -0400732};
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400733
Mike Klein17428132019-03-20 13:02:32 -0500734class DrawEdgeAAQuadCommand : public DrawCommand {
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400735public:
Mike Klein17428132019-03-20 13:02:32 -0500736 DrawEdgeAAQuadCommand(const SkRect& rect,
737 const SkPoint clip[4],
738 SkCanvas::QuadAAFlags aa,
Michael Ludwiga595f862019-08-27 15:25:49 -0400739 const SkColor4f& color,
Mike Klein17428132019-03-20 13:02:32 -0500740 SkBlendMode mode);
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400741 void execute(SkCanvas* canvas) const override;
742
743private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500744 SkRect fRect;
745 SkPoint fClip[4];
746 int fHasClip;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400747 SkCanvas::QuadAAFlags fAA;
Michael Ludwiga595f862019-08-27 15:25:49 -0400748 SkColor4f fColor;
Mike Klein8f4e2242019-03-20 11:59:00 -0500749 SkBlendMode fMode;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400750
Mike Klein8f4e2242019-03-20 11:59:00 -0500751 typedef DrawCommand INHERITED;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400752};
753
Mike Klein17428132019-03-20 13:02:32 -0500754class DrawEdgeAAImageSetCommand : public DrawCommand {
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400755public:
Mike Klein17428132019-03-20 13:02:32 -0500756 DrawEdgeAAImageSetCommand(const SkCanvas::ImageSetEntry[],
757 int count,
758 const SkPoint[],
759 const SkMatrix[],
760 const SkPaint*,
761 SkCanvas::SrcRectConstraint);
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400762 void execute(SkCanvas* canvas) const override;
763
764private:
765 SkAutoTArray<SkCanvas::ImageSetEntry> fSet;
Mike Klein8f4e2242019-03-20 11:59:00 -0500766 int fCount;
767 SkAutoTArray<SkPoint> fDstClips;
768 SkAutoTArray<SkMatrix> fPreViewMatrices;
769 SkTLazy<SkPaint> fPaint;
770 SkCanvas::SrcRectConstraint fConstraint;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400771
Mike Klein8f4e2242019-03-20 11:59:00 -0500772 typedef DrawCommand INHERITED;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400773};
Brian Osmanc7611082018-05-29 14:55:50 -0400774#endif