blob: 1062897b7b23f258689a40ffb5acd528285faa53 [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,
robertphillips9bafc302015-02-13 11:13:00 -080037 kConcat_OpType,
reed97660cc2016-06-28 18:54:19 -070038 kDrawAnnotation_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080039 kDrawBitmap_OpType,
Brian Osman78a76482018-05-18 16:59:13 -040040 kDrawBitmapLattice_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080041 kDrawBitmapNine_OpType,
42 kDrawBitmapRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080043 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070044 kDrawImage_OpType,
Stan Ilievac42aeb2017-01-12 16:20:50 -050045 kDrawImageLattice_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040046 kDrawImageNine_OpType,
fmalita651c9202015-07-22 10:23:01 -070047 kDrawImageRect_OpType,
Nathaniel Nifong20b177a2019-12-12 11:05:10 -050048 kDrawImageRectLayer_OpType, // unique to DebugCanvas
robertphillips9bafc302015-02-13 11:13:00 -080049 kDrawOval_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040050 kDrawArc_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080051 kDrawPaint_OpType,
52 kDrawPatch_OpType,
53 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080054 kDrawPoints_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080055 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 kDrawTextBlob_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080060 kDrawVertices_OpType,
Brian Osman616f1cb2018-05-29 11:23:35 -040061 kDrawAtlas_OpType,
Brian Osmanc7611082018-05-29 14:55:50 -040062 kDrawDrawable_OpType,
Michael Ludwig390f0cc2019-03-19 09:16:38 -040063 kDrawEdgeAAQuad_OpType,
64 kDrawEdgeAAImageSet_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
Brian Osmand9ea8162018-08-08 17:03:39 -040076 static void WritePNG(SkBitmap bitmap, SkWStream& out);
ethannicholasf67531f2016-03-21 10:19:39 -070077
Mike Klein8f4e2242019-03-20 11:59:00 -050078 DrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000079
Mike Klein8f4e2242019-03-20 11:59:00 -050080 virtual ~DrawCommand() {}
chudy@google.com902ebe52012-06-29 14:21:22 +000081
Mike Klein8f4e2242019-03-20 11:59:00 -050082 bool isVisible() const { return fVisible; }
chudy@google.com0b5bbb02012-07-31 19:55:32 +000083
Mike Klein8f4e2242019-03-20 11:59:00 -050084 void setVisible(bool toggle) { fVisible = toggle; }
chudy@google.com902ebe52012-06-29 14:21:22 +000085
fmalita8c89c522014-11-08 16:18:56 -080086 virtual void execute(SkCanvas*) const = 0;
chudy@google.com902ebe52012-06-29 14:21:22 +000087
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000088 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +000089
Brian Osmand8a90f92019-01-28 13:41:19 -050090 virtual void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -080091
robertphillips9bafc302015-02-13 11:13:00 -080092 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +000093
joshualittbd724132016-03-03 11:39:38 -080094 // Helper methods for converting things to JSON
Brian Osmand8a90f92019-01-28 13:41:19 -050095 static void MakeJsonColor(SkJSONWriter&, const SkColor color);
96 static void MakeJsonColor4f(SkJSONWriter&, const SkColor4f& color);
97 static void MakeJsonPoint(SkJSONWriter&, const SkPoint& point);
98 static void MakeJsonPoint(SkJSONWriter&, SkScalar x, SkScalar y);
99 static void MakeJsonPoint3(SkJSONWriter&, const SkPoint3& point);
100 static void MakeJsonRect(SkJSONWriter&, const SkRect& rect);
101 static void MakeJsonIRect(SkJSONWriter&, const SkIRect&);
102 static void MakeJsonMatrix(SkJSONWriter&, const SkMatrix&);
103 static void MakeJsonPath(SkJSONWriter&, const SkPath& path);
104 static void MakeJsonRegion(SkJSONWriter&, const SkRegion& region);
105 static void MakeJsonPaint(SkJSONWriter&, const SkPaint& paint, UrlDataManager& urlDataManager);
106 static void MakeJsonLattice(SkJSONWriter&, const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700107
Mike Klein8f4e2242019-03-20 11:59:00 -0500108 static void flatten(const SkFlattenable* flattenable,
109 SkJSONWriter& writer,
110 UrlDataManager& urlDataManager);
111 static bool flatten(const SkImage& image, SkJSONWriter& writer, UrlDataManager& urlDataManager);
112 static bool flatten(const SkBitmap& bitmap,
113 SkJSONWriter& writer,
brianosmanfad98562016-05-04 11:06:28 -0700114 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800115
chudy@google.com902ebe52012-06-29 14:21:22 +0000116private:
robertphillips9bafc302015-02-13 11:13:00 -0800117 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000118 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000119};
120
Mike Klein17428132019-03-20 13:02:32 -0500121class RestoreCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000122public:
Mike Klein17428132019-03-20 13:02:32 -0500123 RestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700124 void execute(SkCanvas* canvas) const override;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000125
126private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500127 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000128};
129
Mike Klein17428132019-03-20 13:02:32 -0500130class ClearCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000131public:
Mike Klein17428132019-03-20 13:02:32 -0500132 ClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700133 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500134 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800135
chudy@google.com902ebe52012-06-29 14:21:22 +0000136private:
137 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000138
Mike Klein8f4e2242019-03-20 11:59:00 -0500139 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000140};
141
Mike Klein17428132019-03-20 13:02:32 -0500142class ClipPathCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000143public:
Mike Klein17428132019-03-20 13:02:32 -0500144 ClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700145 void execute(SkCanvas* canvas) const override;
146 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500147 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800148
chudy@google.com902ebe52012-06-29 14:21:22 +0000149private:
Mike Reedc1f77742016-12-09 09:00:50 -0500150 SkPath fPath;
151 SkClipOp fOp;
152 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000153
Mike Klein8f4e2242019-03-20 11:59:00 -0500154 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000155};
156
Mike Klein17428132019-03-20 13:02:32 -0500157class ClipRegionCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000158public:
Mike Klein17428132019-03-20 13:02:32 -0500159 ClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700160 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500161 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800162
chudy@google.com902ebe52012-06-29 14:21:22 +0000163private:
Mike Reedc1f77742016-12-09 09:00:50 -0500164 SkRegion fRegion;
165 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000166
Mike Klein8f4e2242019-03-20 11:59:00 -0500167 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000168};
169
Mike Klein17428132019-03-20 13:02:32 -0500170class ClipRectCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000171public:
Mike Klein17428132019-03-20 13:02:32 -0500172 ClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700173 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500174 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000175
chudy@google.com902ebe52012-06-29 14:21:22 +0000176private:
Mike Reedc1f77742016-12-09 09:00:50 -0500177 SkRect fRect;
178 SkClipOp fOp;
179 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000180
Mike Klein8f4e2242019-03-20 11:59:00 -0500181 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000182};
183
Mike Klein17428132019-03-20 13:02:32 -0500184class ClipRRectCommand : public DrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000185public:
Mike Klein17428132019-03-20 13:02:32 -0500186 ClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700187 void execute(SkCanvas* canvas) const override;
188 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500189 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000190
robertphillips@google.com67baba42013-01-02 20:20:31 +0000191private:
Mike Reedc1f77742016-12-09 09:00:50 -0500192 SkRRect fRRect;
193 SkClipOp fOp;
194 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000195
Mike Klein8f4e2242019-03-20 11:59:00 -0500196 typedef DrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000197};
198
Mike Klein17428132019-03-20 13:02:32 -0500199class ConcatCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000200public:
Mike Klein17428132019-03-20 13:02:32 -0500201 ConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700202 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500203 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800204
chudy@google.com902ebe52012-06-29 14:21:22 +0000205private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000206 SkMatrix fMatrix;
207
Mike Klein8f4e2242019-03-20 11:59:00 -0500208 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000209};
210
Mike Klein17428132019-03-20 13:02:32 -0500211class DrawAnnotationCommand : public DrawCommand {
reed97660cc2016-06-28 18:54:19 -0700212public:
Mike Klein17428132019-03-20 13:02:32 -0500213 DrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
reed97660cc2016-06-28 18:54:19 -0700214 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500215 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
reed97660cc2016-06-28 18:54:19 -0700216
217private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500218 SkRect fRect;
219 SkString fKey;
220 sk_sp<SkData> fValue;
reed97660cc2016-06-28 18:54:19 -0700221
Mike Klein8f4e2242019-03-20 11:59:00 -0500222 typedef DrawCommand INHERITED;
reed97660cc2016-06-28 18:54:19 -0700223};
224
Mike Klein17428132019-03-20 13:02:32 -0500225class DrawBitmapCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000226public:
Mike Klein17428132019-03-20 13:02:32 -0500227 DrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700228 void execute(SkCanvas* canvas) const override;
229 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500230 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800231
chudy@google.com902ebe52012-06-29 14:21:22 +0000232private:
Brian Osman8363be12018-05-29 13:38:07 -0400233 SkBitmap fBitmap;
234 SkScalar fLeft;
235 SkScalar fTop;
236 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000237
Mike Klein8f4e2242019-03-20 11:59:00 -0500238 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000239};
240
Mike Klein17428132019-03-20 13:02:32 -0500241class DrawBitmapLatticeCommand : public DrawCommand {
Brian Osman78a76482018-05-18 16:59:13 -0400242public:
Mike Klein17428132019-03-20 13:02:32 -0500243 DrawBitmapLatticeCommand(const SkBitmap& bitmap,
244 const SkCanvas::Lattice& lattice,
245 const SkRect& dst,
246 const SkPaint* paint);
Brian Osman78a76482018-05-18 16:59:13 -0400247 void execute(SkCanvas* canvas) const override;
248 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500249 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Brian Osman78a76482018-05-18 16:59:13 -0400250
251private:
252 SkBitmap fBitmap;
253 SkCanvas::Lattice fLattice;
254 SkRect fDst;
255 SkTLazy<SkPaint> fPaint;
256
Mike Klein8f4e2242019-03-20 11:59:00 -0500257 typedef DrawCommand INHERITED;
Brian Osman78a76482018-05-18 16:59:13 -0400258};
259
Mike Klein17428132019-03-20 13:02:32 -0500260class DrawBitmapNineCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000261public:
Mike Klein17428132019-03-20 13:02:32 -0500262 DrawBitmapNineCommand(const SkBitmap& bitmap,
263 const SkIRect& center,
264 const SkRect& dst,
265 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700266 void execute(SkCanvas* canvas) const override;
267 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500268 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800269
chudy@google.com902ebe52012-06-29 14:21:22 +0000270private:
Brian Osman8363be12018-05-29 13:38:07 -0400271 SkBitmap fBitmap;
272 SkIRect fCenter;
273 SkRect fDst;
274 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000275
Mike Klein8f4e2242019-03-20 11:59:00 -0500276 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000277};
278
Mike Klein17428132019-03-20 13:02:32 -0500279class DrawBitmapRectCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000280public:
Mike Klein17428132019-03-20 13:02:32 -0500281 DrawBitmapRectCommand(const SkBitmap& bitmap,
282 const SkRect* src,
283 const SkRect& dst,
284 const SkPaint* paint,
285 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700286 void execute(SkCanvas* canvas) const override;
287 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500288 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000289
chudy@google.com902ebe52012-06-29 14:21:22 +0000290private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500291 SkBitmap fBitmap;
292 SkTLazy<SkRect> fSrc;
293 SkRect fDst;
294 SkTLazy<SkPaint> fPaint;
295 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000296
Mike Klein8f4e2242019-03-20 11:59:00 -0500297 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000298};
299
Mike Klein17428132019-03-20 13:02:32 -0500300class DrawImageCommand : public DrawCommand {
fmalita651c9202015-07-22 10:23:01 -0700301public:
Mike Klein17428132019-03-20 13:02:32 -0500302 DrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
fmalita651c9202015-07-22 10:23:01 -0700303 void execute(SkCanvas* canvas) const override;
304 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500305 void toJSON(SkJSONWriter& writer, 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
Mike Klein8f4e2242019-03-20 11:59:00 -0500313 typedef DrawCommand INHERITED;
fmalita651c9202015-07-22 10:23:01 -0700314};
315
Mike Klein17428132019-03-20 13:02:32 -0500316class DrawImageLatticeCommand : public DrawCommand {
Stan Ilievac42aeb2017-01-12 16:20:50 -0500317public:
Mike Klein17428132019-03-20 13:02:32 -0500318 DrawImageLatticeCommand(const SkImage* image,
319 const SkCanvas::Lattice& lattice,
320 const SkRect& dst,
321 const SkPaint* paint);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500322 void execute(SkCanvas* canvas) const override;
323 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500324 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Stan Ilievac42aeb2017-01-12 16:20:50 -0500325
326private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500327 sk_sp<const SkImage> fImage;
328 SkCanvas::Lattice fLattice;
329 SkRect fDst;
330 SkTLazy<SkPaint> fPaint;
Stan Ilievac42aeb2017-01-12 16:20:50 -0500331
Mike Klein8f4e2242019-03-20 11:59:00 -0500332 typedef DrawCommand INHERITED;
Stan Ilievac42aeb2017-01-12 16:20:50 -0500333};
334
Mike Klein17428132019-03-20 13:02:32 -0500335class DrawImageNineCommand : public DrawCommand {
Brian Osmanc25e2692018-03-12 10:57:28 -0400336public:
Mike Klein17428132019-03-20 13:02:32 -0500337 DrawImageNineCommand(const SkImage* image,
338 const SkIRect& center,
339 const SkRect& dst,
340 const SkPaint* paint);
Brian Osmanc25e2692018-03-12 10:57:28 -0400341 void execute(SkCanvas* canvas) const override;
342 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500343 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400344
345private:
346 sk_sp<const SkImage> fImage;
347 SkIRect fCenter;
348 SkRect fDst;
Brian Osman8363be12018-05-29 13:38:07 -0400349 SkTLazy<SkPaint> fPaint;
Brian Osmanc25e2692018-03-12 10:57:28 -0400350
Mike Klein8f4e2242019-03-20 11:59:00 -0500351 typedef DrawCommand INHERITED;
Brian Osmanc25e2692018-03-12 10:57:28 -0400352};
353
Mike Klein17428132019-03-20 13:02:32 -0500354class DrawImageRectCommand : public DrawCommand {
fmalita651c9202015-07-22 10:23:01 -0700355public:
Mike Klein17428132019-03-20 13:02:32 -0500356 DrawImageRectCommand(const SkImage* image,
357 const SkRect* src,
358 const SkRect& dst,
359 const SkPaint* paint,
360 SkCanvas::SrcRectConstraint constraint);
fmalita651c9202015-07-22 10:23:01 -0700361 void execute(SkCanvas* canvas) const override;
362 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500363 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800364
fmalita651c9202015-07-22 10:23:01 -0700365private:
Hal Canary1b612a82016-11-03 16:26:13 -0400366 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700367 SkTLazy<SkRect> fSrc;
368 SkRect fDst;
369 SkTLazy<SkPaint> fPaint;
370 SkCanvas::SrcRectConstraint fConstraint;
371
Mike Klein8f4e2242019-03-20 11:59:00 -0500372 typedef DrawCommand INHERITED;
fmalita651c9202015-07-22 10:23:01 -0700373};
374
Nathaniel Nifong20b177a2019-12-12 11:05:10 -0500375// Command for resolving the deferred SkImage representing an android layer
376// Functions like DrawImageRect except it uses the saved UrlDataManager to resolve the image
377// at the time execute() is called.
378class DrawImageRectLayerCommand : public DrawCommand {
379public:
380 DrawImageRectLayerCommand(DebugLayerManager* layerManager,
381 const int nodeId,
382 const int frame,
383 const SkRect* src,
384 const SkRect& dst,
385 const SkPaint* paint,
386 SkCanvas::SrcRectConstraint constraint);
387 void execute(SkCanvas* canvas) const override;
388 bool render(SkCanvas* canvas) const override;
389 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
390
391private:
392 DebugLayerManager* fLayerManager;
393 int fNodeId;
394 int fFrame;
395 SkTLazy<SkRect> fSrc;
396 SkRect fDst;
397 SkTLazy<SkPaint> fPaint;
398 SkCanvas::SrcRectConstraint fConstraint;
399
400 typedef DrawCommand INHERITED;
401};
402
Mike Klein17428132019-03-20 13:02:32 -0500403class DrawOvalCommand : public DrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000404public:
Mike Klein17428132019-03-20 13:02:32 -0500405 DrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700406 void execute(SkCanvas* canvas) const override;
407 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500408 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800409
robertphillips@google.com67baba42013-01-02 20:20:31 +0000410private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000411 SkRect fOval;
412 SkPaint fPaint;
413
Mike Klein8f4e2242019-03-20 11:59:00 -0500414 typedef DrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000415};
416
Mike Klein17428132019-03-20 13:02:32 -0500417class DrawArcCommand : public DrawCommand {
bsalomonac3aa242016-08-19 11:25:19 -0700418public:
Mike Klein17428132019-03-20 13:02:32 -0500419 DrawArcCommand(const SkRect& oval,
420 SkScalar startAngle,
421 SkScalar sweepAngle,
422 bool useCenter,
423 const SkPaint& paint);
bsalomonac3aa242016-08-19 11:25:19 -0700424 void execute(SkCanvas* canvas) const override;
425 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500426 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
bsalomonac3aa242016-08-19 11:25:19 -0700427
428private:
429 SkRect fOval;
430 SkScalar fStartAngle;
431 SkScalar fSweepAngle;
432 bool fUseCenter;
433 SkPaint fPaint;
434
Mike Klein8f4e2242019-03-20 11:59:00 -0500435 typedef DrawCommand INHERITED;
bsalomonac3aa242016-08-19 11:25:19 -0700436};
437
Mike Klein17428132019-03-20 13:02:32 -0500438class DrawPaintCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000439public:
Mike Klein17428132019-03-20 13:02:32 -0500440 DrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700441 void execute(SkCanvas* canvas) const override;
442 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500443 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800444
chudy@google.com902ebe52012-06-29 14:21:22 +0000445private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000446 SkPaint fPaint;
447
Mike Klein8f4e2242019-03-20 11:59:00 -0500448 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000449};
450
Mike Reedd5674082019-04-19 15:00:47 -0400451class DrawBehindCommand : public DrawCommand {
452public:
453 DrawBehindCommand(const SkPaint& paint);
454 void execute(SkCanvas* canvas) const override;
455 bool render(SkCanvas* canvas) const override;
456 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
457
458private:
459 SkPaint fPaint;
460
461 typedef DrawCommand INHERITED;
462};
463
Mike Klein17428132019-03-20 13:02:32 -0500464class DrawPathCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000465public:
Mike Klein17428132019-03-20 13:02:32 -0500466 DrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700467 void execute(SkCanvas* canvas) const override;
468 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500469 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000470
chudy@google.com902ebe52012-06-29 14:21:22 +0000471private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500472 SkPath fPath;
473 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000474
Mike Klein8f4e2242019-03-20 11:59:00 -0500475 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000476};
477
Mike Klein17428132019-03-20 13:02:32 -0500478class BeginDrawPictureCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000479public:
Mike Klein17428132019-03-20 13:02:32 -0500480 BeginDrawPictureCommand(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint);
fmalita160ebb22015-04-01 20:58:37 -0700481
mtklein36352bf2015-03-25 18:17:31 -0700482 void execute(SkCanvas* canvas) const override;
483 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000484
chudy@google.com902ebe52012-06-29 14:21:22 +0000485private:
Hal Canary1b612a82016-11-03 16:26:13 -0400486 sk_sp<const SkPicture> fPicture;
487 SkTLazy<SkMatrix> fMatrix;
488 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700489
Mike Klein8f4e2242019-03-20 11:59:00 -0500490 typedef DrawCommand INHERITED;
fmalita160ebb22015-04-01 20:58:37 -0700491};
492
Mike Klein17428132019-03-20 13:02:32 -0500493class EndDrawPictureCommand : public DrawCommand {
fmalita160ebb22015-04-01 20:58:37 -0700494public:
Mike Klein17428132019-03-20 13:02:32 -0500495 EndDrawPictureCommand(bool restore);
fmalita160ebb22015-04-01 20:58:37 -0700496
497 void execute(SkCanvas* canvas) const override;
498
499private:
500 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000501
Mike Klein8f4e2242019-03-20 11:59:00 -0500502 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000503};
504
Mike Klein17428132019-03-20 13:02:32 -0500505class DrawPointsCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000506public:
Mike Klein17428132019-03-20 13:02:32 -0500507 DrawPointsCommand(SkCanvas::PointMode mode,
508 size_t count,
509 const SkPoint pts[],
510 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700511 void execute(SkCanvas* canvas) const override;
512 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500513 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800514
chudy@google.com902ebe52012-06-29 14:21:22 +0000515private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000516 SkCanvas::PointMode fMode;
Brian Osman8363be12018-05-29 13:38:07 -0400517 SkTDArray<SkPoint> fPts;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000518 SkPaint fPaint;
519
Mike Klein8f4e2242019-03-20 11:59:00 -0500520 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000521};
522
Mike Klein17428132019-03-20 13:02:32 -0500523class DrawRegionCommand : public DrawCommand {
Brian Osmanc25e2692018-03-12 10:57:28 -0400524public:
Mike Klein17428132019-03-20 13:02:32 -0500525 DrawRegionCommand(const SkRegion& region, const SkPaint& paint);
Brian Osmanc25e2692018-03-12 10:57:28 -0400526 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;
Brian Osmanc25e2692018-03-12 10:57:28 -0400529
530private:
531 SkRegion fRegion;
532 SkPaint fPaint;
533
Mike Klein8f4e2242019-03-20 11:59:00 -0500534 typedef DrawCommand INHERITED;
Brian Osmanc25e2692018-03-12 10:57:28 -0400535};
536
Mike Klein17428132019-03-20 13:02:32 -0500537class DrawTextBlobCommand : public DrawCommand {
fmalitab7425172014-08-26 07:56:44 -0700538public:
Mike Klein17428132019-03-20 13:02:32 -0500539 DrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700540
mtklein36352bf2015-03-25 18:17:31 -0700541 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;
fmalitab7425172014-08-26 07:56:44 -0700544
545private:
fmalita37283c22016-09-13 10:00:23 -0700546 sk_sp<SkTextBlob> fBlob;
547 SkScalar fXPos;
548 SkScalar fYPos;
549 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700550
Mike Klein8f4e2242019-03-20 11:59:00 -0500551 typedef DrawCommand INHERITED;
fmalitab7425172014-08-26 07:56:44 -0700552};
553
Mike Klein17428132019-03-20 13:02:32 -0500554class DrawPatchCommand : public DrawCommand {
robertphillips9bafc302015-02-13 11:13:00 -0800555public:
Mike Klein17428132019-03-20 13:02:32 -0500556 DrawPatchCommand(const SkPoint cubics[12],
557 const SkColor colors[4],
558 const SkPoint texCoords[4],
559 SkBlendMode bmode,
560 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700561 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500562 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800563
564private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500565 SkPoint fCubics[12];
566 SkColor* fColorsPtr;
567 SkColor fColors[4];
568 SkPoint* fTexCoordsPtr;
569 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400570 SkBlendMode fBlendMode;
Mike Klein8f4e2242019-03-20 11:59:00 -0500571 SkPaint fPaint;
robertphillips9bafc302015-02-13 11:13:00 -0800572
Mike Klein8f4e2242019-03-20 11:59:00 -0500573 typedef DrawCommand INHERITED;
robertphillips9bafc302015-02-13 11:13:00 -0800574};
575
Mike Klein17428132019-03-20 13:02:32 -0500576class DrawRectCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000577public:
Mike Klein17428132019-03-20 13:02:32 -0500578 DrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700579 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500580 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000581
chudy@google.com902ebe52012-06-29 14:21:22 +0000582private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000583 SkRect fRect;
584 SkPaint fPaint;
585
Mike Klein8f4e2242019-03-20 11:59:00 -0500586 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000587};
588
Mike Klein17428132019-03-20 13:02:32 -0500589class DrawRRectCommand : public DrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000590public:
Mike Klein17428132019-03-20 13:02:32 -0500591 DrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700592 void execute(SkCanvas* canvas) const override;
593 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500594 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800595
robertphillips@google.com67baba42013-01-02 20:20:31 +0000596private:
597 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000598 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000599
Mike Klein8f4e2242019-03-20 11:59:00 -0500600 typedef DrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000601};
602
Mike Klein17428132019-03-20 13:02:32 -0500603class DrawDRRectCommand : public DrawCommand {
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000604public:
Mike Klein17428132019-03-20 13:02:32 -0500605 DrawDRRectCommand(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700606 void execute(SkCanvas* canvas) const override;
607 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500608 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800609
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000610private:
611 SkRRect fOuter;
612 SkRRect fInner;
613 SkPaint fPaint;
614
Mike Klein8f4e2242019-03-20 11:59:00 -0500615 typedef DrawCommand INHERITED;
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000616};
617
Mike Klein17428132019-03-20 13:02:32 -0500618class DrawVerticesCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000619public:
Mike Klein17428132019-03-20 13:02:32 -0500620 DrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
Mike Reedfed9cfd2017-03-17 12:09:04 -0400621
mtklein36352bf2015-03-25 18:17:31 -0700622 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800623
chudy@google.com902ebe52012-06-29 14:21:22 +0000624private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500625 sk_sp<SkVertices> fVertices;
626 SkBlendMode fBlendMode;
627 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000628
Mike Klein8f4e2242019-03-20 11:59:00 -0500629 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000630};
631
Mike Klein17428132019-03-20 13:02:32 -0500632class DrawAtlasCommand : public DrawCommand {
Brian Osman616f1cb2018-05-29 11:23:35 -0400633public:
Mike Klein17428132019-03-20 13:02:32 -0500634 DrawAtlasCommand(const SkImage*,
635 const SkRSXform[],
636 const SkRect[],
637 const SkColor[],
638 int,
639 SkBlendMode,
640 const SkRect*,
641 const SkPaint*);
Brian Osman616f1cb2018-05-29 11:23:35 -0400642
643 void execute(SkCanvas* canvas) const override;
644
645private:
646 sk_sp<const SkImage> fImage;
647 SkTDArray<SkRSXform> fXform;
648 SkTDArray<SkRect> fTex;
649 SkTDArray<SkColor> fColors;
650 SkBlendMode fBlendMode;
651 SkTLazy<SkRect> fCull;
652 SkTLazy<SkPaint> fPaint;
653
Mike Klein8f4e2242019-03-20 11:59:00 -0500654 typedef DrawCommand INHERITED;
Brian Osman616f1cb2018-05-29 11:23:35 -0400655};
656
Mike Klein17428132019-03-20 13:02:32 -0500657class SaveCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000658public:
Mike Klein17428132019-03-20 13:02:32 -0500659 SaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700660 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800661
chudy@google.com902ebe52012-06-29 14:21:22 +0000662private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500663 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000664};
665
Mike Klein17428132019-03-20 13:02:32 -0500666class SaveLayerCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000667public:
Mike Klein17428132019-03-20 13:02:32 -0500668 SaveLayerCommand(const SkCanvas::SaveLayerRec&);
mtklein36352bf2015-03-25 18:17:31 -0700669 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500670 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000671
chudy@google.com902ebe52012-06-29 14:21:22 +0000672private:
Brian Osman8363be12018-05-29 13:38:07 -0400673 SkTLazy<SkRect> fBounds;
674 SkTLazy<SkPaint> fPaint;
675 sk_sp<const SkImageFilter> fBackdrop;
676 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000677
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 SetMatrixCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000682public:
Mike Klein17428132019-03-20 13:02:32 -0500683 SetMatrixCommand(const SkMatrix& matrix);
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;
ethannicholas50a8dd02016-02-10 05:40:46 -0800686
chudy@google.com902ebe52012-06-29 14:21:22 +0000687private:
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000688 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000689
Mike Klein8f4e2242019-03-20 11:59:00 -0500690 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000691};
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400692
Mike Klein17428132019-03-20 13:02:32 -0500693class DrawShadowCommand : public DrawCommand {
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400694public:
Mike Klein17428132019-03-20 13:02:32 -0500695 DrawShadowCommand(const SkPath& path, const SkDrawShadowRec& rec);
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400696 void execute(SkCanvas* canvas) const override;
697 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500698 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400699
700private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500701 SkPath fPath;
702 SkDrawShadowRec fShadowRec;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400703
Mike Klein8f4e2242019-03-20 11:59:00 -0500704 typedef DrawCommand INHERITED;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400705};
vjiaoblacke6f5d562016-08-25 06:30:23 -0700706
Mike Klein17428132019-03-20 13:02:32 -0500707class DrawDrawableCommand : public DrawCommand {
Brian Osmanc7611082018-05-29 14:55:50 -0400708public:
Mike Klein17428132019-03-20 13:02:32 -0500709 DrawDrawableCommand(SkDrawable*, const SkMatrix*);
Brian Osmanc7611082018-05-29 14:55:50 -0400710 void execute(SkCanvas* canvas) const override;
711
712private:
713 sk_sp<SkDrawable> fDrawable;
714 SkTLazy<SkMatrix> fMatrix;
715
Mike Klein8f4e2242019-03-20 11:59:00 -0500716 typedef DrawCommand INHERITED;
Brian Osmanc7611082018-05-29 14:55:50 -0400717};
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400718
Mike Klein17428132019-03-20 13:02:32 -0500719class DrawEdgeAAQuadCommand : public DrawCommand {
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400720public:
Mike Klein17428132019-03-20 13:02:32 -0500721 DrawEdgeAAQuadCommand(const SkRect& rect,
722 const SkPoint clip[4],
723 SkCanvas::QuadAAFlags aa,
Michael Ludwiga595f862019-08-27 15:25:49 -0400724 const SkColor4f& color,
Mike Klein17428132019-03-20 13:02:32 -0500725 SkBlendMode mode);
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400726 void execute(SkCanvas* canvas) const override;
727
728private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500729 SkRect fRect;
730 SkPoint fClip[4];
731 int fHasClip;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400732 SkCanvas::QuadAAFlags fAA;
Michael Ludwiga595f862019-08-27 15:25:49 -0400733 SkColor4f fColor;
Mike Klein8f4e2242019-03-20 11:59:00 -0500734 SkBlendMode fMode;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400735
Mike Klein8f4e2242019-03-20 11:59:00 -0500736 typedef DrawCommand INHERITED;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400737};
738
Mike Klein17428132019-03-20 13:02:32 -0500739class DrawEdgeAAImageSetCommand : public DrawCommand {
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400740public:
Mike Klein17428132019-03-20 13:02:32 -0500741 DrawEdgeAAImageSetCommand(const SkCanvas::ImageSetEntry[],
742 int count,
743 const SkPoint[],
744 const SkMatrix[],
745 const SkPaint*,
746 SkCanvas::SrcRectConstraint);
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400747 void execute(SkCanvas* canvas) const override;
748
749private:
750 SkAutoTArray<SkCanvas::ImageSetEntry> fSet;
Mike Klein8f4e2242019-03-20 11:59:00 -0500751 int fCount;
752 SkAutoTArray<SkPoint> fDstClips;
753 SkAutoTArray<SkMatrix> fPreViewMatrices;
754 SkTLazy<SkPaint> fPaint;
755 SkCanvas::SrcRectConstraint fConstraint;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400756
Mike Klein8f4e2242019-03-20 11:59:00 -0500757 typedef DrawCommand INHERITED;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400758};
Brian Osmanc7611082018-05-29 14:55:50 -0400759#endif