blob: 1ba48097c209196cae526653bfbc6a3af3fe3744 [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
Mike Klein8f4e2242019-03-20 11:59:00 -050026class DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000027public:
robertphillips9bafc302015-02-13 11:13:00 -080028 enum OpType {
fmalita160ebb22015-04-01 20:58:37 -070029 kBeginDrawPicture_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040030 kClear_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080031 kClipPath_OpType,
32 kClipRegion_OpType,
33 kClipRect_OpType,
34 kClipRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080035 kConcat_OpType,
reed97660cc2016-06-28 18:54:19 -070036 kDrawAnnotation_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080037 kDrawBitmap_OpType,
Brian Osman78a76482018-05-18 16:59:13 -040038 kDrawBitmapLattice_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080039 kDrawBitmapNine_OpType,
40 kDrawBitmapRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080041 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070042 kDrawImage_OpType,
Stan Ilievac42aeb2017-01-12 16:20:50 -050043 kDrawImageLattice_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040044 kDrawImageNine_OpType,
fmalita651c9202015-07-22 10:23:01 -070045 kDrawImageRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080046 kDrawOval_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040047 kDrawArc_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080048 kDrawPaint_OpType,
49 kDrawPatch_OpType,
50 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080051 kDrawPoints_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080052 kDrawRect_OpType,
53 kDrawRRect_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040054 kDrawRegion_OpType,
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -040055 kDrawShadow_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080056 kDrawTextBlob_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080057 kDrawVertices_OpType,
Brian Osman616f1cb2018-05-29 11:23:35 -040058 kDrawAtlas_OpType,
Brian Osmanc7611082018-05-29 14:55:50 -040059 kDrawDrawable_OpType,
Michael Ludwig390f0cc2019-03-19 09:16:38 -040060 kDrawEdgeAAQuad_OpType,
61 kDrawEdgeAAImageSet_OpType,
fmalita160ebb22015-04-01 20:58:37 -070062 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080063 kRestore_OpType,
64 kSave_OpType,
65 kSaveLayer_OpType,
66 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080067
Jim Van Verth343fe492017-05-02 16:49:24 -040068 kLast_OpType = kSetMatrix_OpType
robertphillips9bafc302015-02-13 11:13:00 -080069 };
70
71 static const int kOpTypeCount = kLast_OpType + 1;
72
Brian Osmand9ea8162018-08-08 17:03:39 -040073 static void WritePNG(SkBitmap bitmap, SkWStream& out);
ethannicholasf67531f2016-03-21 10:19:39 -070074
Mike Klein8f4e2242019-03-20 11:59:00 -050075 DrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000076
Mike Klein8f4e2242019-03-20 11:59:00 -050077 virtual ~DrawCommand() {}
chudy@google.com902ebe52012-06-29 14:21:22 +000078
Mike Klein8f4e2242019-03-20 11:59:00 -050079 bool isVisible() const { return fVisible; }
chudy@google.com0b5bbb02012-07-31 19:55:32 +000080
Mike Klein8f4e2242019-03-20 11:59:00 -050081 void setVisible(bool toggle) { fVisible = toggle; }
chudy@google.com902ebe52012-06-29 14:21:22 +000082
fmalita8c89c522014-11-08 16:18:56 -080083 virtual void execute(SkCanvas*) const = 0;
chudy@google.com902ebe52012-06-29 14:21:22 +000084
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000085 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +000086
Brian Osmand8a90f92019-01-28 13:41:19 -050087 virtual void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -080088
robertphillips9bafc302015-02-13 11:13:00 -080089 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +000090
joshualittbd724132016-03-03 11:39:38 -080091 // Helper methods for converting things to JSON
Brian Osmand8a90f92019-01-28 13:41:19 -050092 static void MakeJsonColor(SkJSONWriter&, const SkColor color);
93 static void MakeJsonColor4f(SkJSONWriter&, const SkColor4f& color);
94 static void MakeJsonPoint(SkJSONWriter&, const SkPoint& point);
95 static void MakeJsonPoint(SkJSONWriter&, SkScalar x, SkScalar y);
96 static void MakeJsonPoint3(SkJSONWriter&, const SkPoint3& point);
97 static void MakeJsonRect(SkJSONWriter&, const SkRect& rect);
98 static void MakeJsonIRect(SkJSONWriter&, const SkIRect&);
99 static void MakeJsonMatrix(SkJSONWriter&, const SkMatrix&);
100 static void MakeJsonPath(SkJSONWriter&, const SkPath& path);
101 static void MakeJsonRegion(SkJSONWriter&, const SkRegion& region);
102 static void MakeJsonPaint(SkJSONWriter&, const SkPaint& paint, UrlDataManager& urlDataManager);
103 static void MakeJsonLattice(SkJSONWriter&, const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700104
Mike Klein8f4e2242019-03-20 11:59:00 -0500105 static void flatten(const SkFlattenable* flattenable,
106 SkJSONWriter& writer,
107 UrlDataManager& urlDataManager);
108 static bool flatten(const SkImage& image, SkJSONWriter& writer, UrlDataManager& urlDataManager);
109 static bool flatten(const SkBitmap& bitmap,
110 SkJSONWriter& writer,
brianosmanfad98562016-05-04 11:06:28 -0700111 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800112
chudy@google.com902ebe52012-06-29 14:21:22 +0000113private:
robertphillips9bafc302015-02-13 11:13:00 -0800114 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000115 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000116};
117
Mike Klein17428132019-03-20 13:02:32 -0500118class RestoreCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000119public:
Mike Klein17428132019-03-20 13:02:32 -0500120 RestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700121 void execute(SkCanvas* canvas) const override;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000122
123private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500124 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000125};
126
Mike Klein17428132019-03-20 13:02:32 -0500127class ClearCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000128public:
Mike Klein17428132019-03-20 13:02:32 -0500129 ClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700130 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500131 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800132
chudy@google.com902ebe52012-06-29 14:21:22 +0000133private:
134 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000135
Mike Klein8f4e2242019-03-20 11:59:00 -0500136 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000137};
138
Mike Klein17428132019-03-20 13:02:32 -0500139class ClipPathCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000140public:
Mike Klein17428132019-03-20 13:02:32 -0500141 ClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700142 void execute(SkCanvas* canvas) const override;
143 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500144 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800145
chudy@google.com902ebe52012-06-29 14:21:22 +0000146private:
Mike Reedc1f77742016-12-09 09:00:50 -0500147 SkPath fPath;
148 SkClipOp fOp;
149 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000150
Mike Klein8f4e2242019-03-20 11:59:00 -0500151 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000152};
153
Mike Klein17428132019-03-20 13:02:32 -0500154class ClipRegionCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000155public:
Mike Klein17428132019-03-20 13:02:32 -0500156 ClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700157 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500158 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800159
chudy@google.com902ebe52012-06-29 14:21:22 +0000160private:
Mike Reedc1f77742016-12-09 09:00:50 -0500161 SkRegion fRegion;
162 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000163
Mike Klein8f4e2242019-03-20 11:59:00 -0500164 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000165};
166
Mike Klein17428132019-03-20 13:02:32 -0500167class ClipRectCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000168public:
Mike Klein17428132019-03-20 13:02:32 -0500169 ClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700170 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500171 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000172
chudy@google.com902ebe52012-06-29 14:21:22 +0000173private:
Mike Reedc1f77742016-12-09 09:00:50 -0500174 SkRect fRect;
175 SkClipOp fOp;
176 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000177
Mike Klein8f4e2242019-03-20 11:59:00 -0500178 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000179};
180
Mike Klein17428132019-03-20 13:02:32 -0500181class ClipRRectCommand : public DrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000182public:
Mike Klein17428132019-03-20 13:02:32 -0500183 ClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700184 void execute(SkCanvas* canvas) const override;
185 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500186 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000187
robertphillips@google.com67baba42013-01-02 20:20:31 +0000188private:
Mike Reedc1f77742016-12-09 09:00:50 -0500189 SkRRect fRRect;
190 SkClipOp fOp;
191 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000192
Mike Klein8f4e2242019-03-20 11:59:00 -0500193 typedef DrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000194};
195
Mike Klein17428132019-03-20 13:02:32 -0500196class ConcatCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000197public:
Mike Klein17428132019-03-20 13:02:32 -0500198 ConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700199 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500200 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800201
chudy@google.com902ebe52012-06-29 14:21:22 +0000202private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000203 SkMatrix fMatrix;
204
Mike Klein8f4e2242019-03-20 11:59:00 -0500205 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000206};
207
Mike Klein17428132019-03-20 13:02:32 -0500208class DrawAnnotationCommand : public DrawCommand {
reed97660cc2016-06-28 18:54:19 -0700209public:
Mike Klein17428132019-03-20 13:02:32 -0500210 DrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
reed97660cc2016-06-28 18:54:19 -0700211 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500212 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
reed97660cc2016-06-28 18:54:19 -0700213
214private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500215 SkRect fRect;
216 SkString fKey;
217 sk_sp<SkData> fValue;
reed97660cc2016-06-28 18:54:19 -0700218
Mike Klein8f4e2242019-03-20 11:59:00 -0500219 typedef DrawCommand INHERITED;
reed97660cc2016-06-28 18:54:19 -0700220};
221
Mike Klein17428132019-03-20 13:02:32 -0500222class DrawBitmapCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000223public:
Mike Klein17428132019-03-20 13:02:32 -0500224 DrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700225 void execute(SkCanvas* canvas) const override;
226 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500227 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800228
chudy@google.com902ebe52012-06-29 14:21:22 +0000229private:
Brian Osman8363be12018-05-29 13:38:07 -0400230 SkBitmap fBitmap;
231 SkScalar fLeft;
232 SkScalar fTop;
233 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000234
Mike Klein8f4e2242019-03-20 11:59:00 -0500235 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000236};
237
Mike Klein17428132019-03-20 13:02:32 -0500238class DrawBitmapLatticeCommand : public DrawCommand {
Brian Osman78a76482018-05-18 16:59:13 -0400239public:
Mike Klein17428132019-03-20 13:02:32 -0500240 DrawBitmapLatticeCommand(const SkBitmap& bitmap,
241 const SkCanvas::Lattice& lattice,
242 const SkRect& dst,
243 const SkPaint* paint);
Brian Osman78a76482018-05-18 16:59:13 -0400244 void execute(SkCanvas* canvas) const override;
245 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500246 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Brian Osman78a76482018-05-18 16:59:13 -0400247
248private:
249 SkBitmap fBitmap;
250 SkCanvas::Lattice fLattice;
251 SkRect fDst;
252 SkTLazy<SkPaint> fPaint;
253
Mike Klein8f4e2242019-03-20 11:59:00 -0500254 typedef DrawCommand INHERITED;
Brian Osman78a76482018-05-18 16:59:13 -0400255};
256
Mike Klein17428132019-03-20 13:02:32 -0500257class DrawBitmapNineCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000258public:
Mike Klein17428132019-03-20 13:02:32 -0500259 DrawBitmapNineCommand(const SkBitmap& bitmap,
260 const SkIRect& center,
261 const SkRect& dst,
262 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700263 void execute(SkCanvas* canvas) const override;
264 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500265 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800266
chudy@google.com902ebe52012-06-29 14:21:22 +0000267private:
Brian Osman8363be12018-05-29 13:38:07 -0400268 SkBitmap fBitmap;
269 SkIRect fCenter;
270 SkRect fDst;
271 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000272
Mike Klein8f4e2242019-03-20 11:59:00 -0500273 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000274};
275
Mike Klein17428132019-03-20 13:02:32 -0500276class DrawBitmapRectCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000277public:
Mike Klein17428132019-03-20 13:02:32 -0500278 DrawBitmapRectCommand(const SkBitmap& bitmap,
279 const SkRect* src,
280 const SkRect& dst,
281 const SkPaint* paint,
282 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700283 void execute(SkCanvas* canvas) const override;
284 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500285 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000286
chudy@google.com902ebe52012-06-29 14:21:22 +0000287private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500288 SkBitmap fBitmap;
289 SkTLazy<SkRect> fSrc;
290 SkRect fDst;
291 SkTLazy<SkPaint> fPaint;
292 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000293
Mike Klein8f4e2242019-03-20 11:59:00 -0500294 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000295};
296
Mike Klein17428132019-03-20 13:02:32 -0500297class DrawImageCommand : public DrawCommand {
fmalita651c9202015-07-22 10:23:01 -0700298public:
Mike Klein17428132019-03-20 13:02:32 -0500299 DrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
fmalita651c9202015-07-22 10:23:01 -0700300 void execute(SkCanvas* canvas) const override;
301 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500302 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800303
fmalita651c9202015-07-22 10:23:01 -0700304private:
Hal Canary1b612a82016-11-03 16:26:13 -0400305 sk_sp<const SkImage> fImage;
306 SkScalar fLeft;
307 SkScalar fTop;
308 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700309
Mike Klein8f4e2242019-03-20 11:59:00 -0500310 typedef DrawCommand INHERITED;
fmalita651c9202015-07-22 10:23:01 -0700311};
312
Mike Klein17428132019-03-20 13:02:32 -0500313class DrawImageLatticeCommand : public DrawCommand {
Stan Ilievac42aeb2017-01-12 16:20:50 -0500314public:
Mike Klein17428132019-03-20 13:02:32 -0500315 DrawImageLatticeCommand(const SkImage* image,
316 const SkCanvas::Lattice& lattice,
317 const SkRect& dst,
318 const SkPaint* paint);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500319 void execute(SkCanvas* canvas) const override;
320 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500321 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Stan Ilievac42aeb2017-01-12 16:20:50 -0500322
323private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500324 sk_sp<const SkImage> fImage;
325 SkCanvas::Lattice fLattice;
326 SkRect fDst;
327 SkTLazy<SkPaint> fPaint;
Stan Ilievac42aeb2017-01-12 16:20:50 -0500328
Mike Klein8f4e2242019-03-20 11:59:00 -0500329 typedef DrawCommand INHERITED;
Stan Ilievac42aeb2017-01-12 16:20:50 -0500330};
331
Mike Klein17428132019-03-20 13:02:32 -0500332class DrawImageNineCommand : public DrawCommand {
Brian Osmanc25e2692018-03-12 10:57:28 -0400333public:
Mike Klein17428132019-03-20 13:02:32 -0500334 DrawImageNineCommand(const SkImage* image,
335 const SkIRect& center,
336 const SkRect& dst,
337 const SkPaint* paint);
Brian Osmanc25e2692018-03-12 10:57:28 -0400338 void execute(SkCanvas* canvas) const override;
339 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500340 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400341
342private:
343 sk_sp<const SkImage> fImage;
344 SkIRect fCenter;
345 SkRect fDst;
Brian Osman8363be12018-05-29 13:38:07 -0400346 SkTLazy<SkPaint> fPaint;
Brian Osmanc25e2692018-03-12 10:57:28 -0400347
Mike Klein8f4e2242019-03-20 11:59:00 -0500348 typedef DrawCommand INHERITED;
Brian Osmanc25e2692018-03-12 10:57:28 -0400349};
350
Mike Klein17428132019-03-20 13:02:32 -0500351class DrawImageRectCommand : public DrawCommand {
fmalita651c9202015-07-22 10:23:01 -0700352public:
Mike Klein17428132019-03-20 13:02:32 -0500353 DrawImageRectCommand(const SkImage* image,
354 const SkRect* src,
355 const SkRect& dst,
356 const SkPaint* paint,
357 SkCanvas::SrcRectConstraint constraint);
fmalita651c9202015-07-22 10:23:01 -0700358 void execute(SkCanvas* canvas) const override;
359 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500360 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800361
fmalita651c9202015-07-22 10:23:01 -0700362private:
Hal Canary1b612a82016-11-03 16:26:13 -0400363 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700364 SkTLazy<SkRect> fSrc;
365 SkRect fDst;
366 SkTLazy<SkPaint> fPaint;
367 SkCanvas::SrcRectConstraint fConstraint;
368
Mike Klein8f4e2242019-03-20 11:59:00 -0500369 typedef DrawCommand INHERITED;
fmalita651c9202015-07-22 10:23:01 -0700370};
371
Mike Klein17428132019-03-20 13:02:32 -0500372class DrawOvalCommand : public DrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000373public:
Mike Klein17428132019-03-20 13:02:32 -0500374 DrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700375 void execute(SkCanvas* canvas) const override;
376 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500377 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800378
robertphillips@google.com67baba42013-01-02 20:20:31 +0000379private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000380 SkRect fOval;
381 SkPaint fPaint;
382
Mike Klein8f4e2242019-03-20 11:59:00 -0500383 typedef DrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000384};
385
Mike Klein17428132019-03-20 13:02:32 -0500386class DrawArcCommand : public DrawCommand {
bsalomonac3aa242016-08-19 11:25:19 -0700387public:
Mike Klein17428132019-03-20 13:02:32 -0500388 DrawArcCommand(const SkRect& oval,
389 SkScalar startAngle,
390 SkScalar sweepAngle,
391 bool useCenter,
392 const SkPaint& paint);
bsalomonac3aa242016-08-19 11:25:19 -0700393 void execute(SkCanvas* canvas) const override;
394 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500395 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
bsalomonac3aa242016-08-19 11:25:19 -0700396
397private:
398 SkRect fOval;
399 SkScalar fStartAngle;
400 SkScalar fSweepAngle;
401 bool fUseCenter;
402 SkPaint fPaint;
403
Mike Klein8f4e2242019-03-20 11:59:00 -0500404 typedef DrawCommand INHERITED;
bsalomonac3aa242016-08-19 11:25:19 -0700405};
406
Mike Klein17428132019-03-20 13:02:32 -0500407class DrawPaintCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000408public:
Mike Klein17428132019-03-20 13:02:32 -0500409 DrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700410 void execute(SkCanvas* canvas) const override;
411 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500412 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800413
chudy@google.com902ebe52012-06-29 14:21:22 +0000414private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000415 SkPaint fPaint;
416
Mike Klein8f4e2242019-03-20 11:59:00 -0500417 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000418};
419
Mike Reedd5674082019-04-19 15:00:47 -0400420class DrawBehindCommand : public DrawCommand {
421public:
422 DrawBehindCommand(const SkPaint& paint);
423 void execute(SkCanvas* canvas) const override;
424 bool render(SkCanvas* canvas) const override;
425 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
426
427private:
428 SkPaint fPaint;
429
430 typedef DrawCommand INHERITED;
431};
432
Mike Klein17428132019-03-20 13:02:32 -0500433class DrawPathCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000434public:
Mike Klein17428132019-03-20 13:02:32 -0500435 DrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700436 void execute(SkCanvas* canvas) const override;
437 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500438 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000439
chudy@google.com902ebe52012-06-29 14:21:22 +0000440private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500441 SkPath fPath;
442 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000443
Mike Klein8f4e2242019-03-20 11:59:00 -0500444 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000445};
446
Mike Klein17428132019-03-20 13:02:32 -0500447class BeginDrawPictureCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000448public:
Mike Klein17428132019-03-20 13:02:32 -0500449 BeginDrawPictureCommand(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint);
fmalita160ebb22015-04-01 20:58:37 -0700450
mtklein36352bf2015-03-25 18:17:31 -0700451 void execute(SkCanvas* canvas) const override;
452 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000453
chudy@google.com902ebe52012-06-29 14:21:22 +0000454private:
Hal Canary1b612a82016-11-03 16:26:13 -0400455 sk_sp<const SkPicture> fPicture;
456 SkTLazy<SkMatrix> fMatrix;
457 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700458
Mike Klein8f4e2242019-03-20 11:59:00 -0500459 typedef DrawCommand INHERITED;
fmalita160ebb22015-04-01 20:58:37 -0700460};
461
Mike Klein17428132019-03-20 13:02:32 -0500462class EndDrawPictureCommand : public DrawCommand {
fmalita160ebb22015-04-01 20:58:37 -0700463public:
Mike Klein17428132019-03-20 13:02:32 -0500464 EndDrawPictureCommand(bool restore);
fmalita160ebb22015-04-01 20:58:37 -0700465
466 void execute(SkCanvas* canvas) const override;
467
468private:
469 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000470
Mike Klein8f4e2242019-03-20 11:59:00 -0500471 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000472};
473
Mike Klein17428132019-03-20 13:02:32 -0500474class DrawPointsCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000475public:
Mike Klein17428132019-03-20 13:02:32 -0500476 DrawPointsCommand(SkCanvas::PointMode mode,
477 size_t count,
478 const SkPoint pts[],
479 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700480 void execute(SkCanvas* canvas) const override;
481 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500482 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800483
chudy@google.com902ebe52012-06-29 14:21:22 +0000484private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000485 SkCanvas::PointMode fMode;
Brian Osman8363be12018-05-29 13:38:07 -0400486 SkTDArray<SkPoint> fPts;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000487 SkPaint fPaint;
488
Mike Klein8f4e2242019-03-20 11:59:00 -0500489 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000490};
491
Mike Klein17428132019-03-20 13:02:32 -0500492class DrawRegionCommand : public DrawCommand {
Brian Osmanc25e2692018-03-12 10:57:28 -0400493public:
Mike Klein17428132019-03-20 13:02:32 -0500494 DrawRegionCommand(const SkRegion& region, const SkPaint& paint);
Brian Osmanc25e2692018-03-12 10:57:28 -0400495 void execute(SkCanvas* canvas) const override;
496 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500497 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400498
499private:
500 SkRegion fRegion;
501 SkPaint fPaint;
502
Mike Klein8f4e2242019-03-20 11:59:00 -0500503 typedef DrawCommand INHERITED;
Brian Osmanc25e2692018-03-12 10:57:28 -0400504};
505
Mike Klein17428132019-03-20 13:02:32 -0500506class DrawTextBlobCommand : public DrawCommand {
fmalitab7425172014-08-26 07:56:44 -0700507public:
Mike Klein17428132019-03-20 13:02:32 -0500508 DrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700509
mtklein36352bf2015-03-25 18:17:31 -0700510 void execute(SkCanvas* canvas) const override;
511 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500512 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
fmalitab7425172014-08-26 07:56:44 -0700513
514private:
fmalita37283c22016-09-13 10:00:23 -0700515 sk_sp<SkTextBlob> fBlob;
516 SkScalar fXPos;
517 SkScalar fYPos;
518 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700519
Mike Klein8f4e2242019-03-20 11:59:00 -0500520 typedef DrawCommand INHERITED;
fmalitab7425172014-08-26 07:56:44 -0700521};
522
Mike Klein17428132019-03-20 13:02:32 -0500523class DrawPatchCommand : public DrawCommand {
robertphillips9bafc302015-02-13 11:13:00 -0800524public:
Mike Klein17428132019-03-20 13:02:32 -0500525 DrawPatchCommand(const SkPoint cubics[12],
526 const SkColor colors[4],
527 const SkPoint texCoords[4],
528 SkBlendMode bmode,
529 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700530 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500531 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800532
533private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500534 SkPoint fCubics[12];
535 SkColor* fColorsPtr;
536 SkColor fColors[4];
537 SkPoint* fTexCoordsPtr;
538 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400539 SkBlendMode fBlendMode;
Mike Klein8f4e2242019-03-20 11:59:00 -0500540 SkPaint fPaint;
robertphillips9bafc302015-02-13 11:13:00 -0800541
Mike Klein8f4e2242019-03-20 11:59:00 -0500542 typedef DrawCommand INHERITED;
robertphillips9bafc302015-02-13 11:13:00 -0800543};
544
Mike Klein17428132019-03-20 13:02:32 -0500545class DrawRectCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000546public:
Mike Klein17428132019-03-20 13:02:32 -0500547 DrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700548 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500549 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000550
chudy@google.com902ebe52012-06-29 14:21:22 +0000551private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000552 SkRect fRect;
553 SkPaint fPaint;
554
Mike Klein8f4e2242019-03-20 11:59:00 -0500555 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000556};
557
Mike Klein17428132019-03-20 13:02:32 -0500558class DrawRRectCommand : public DrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000559public:
Mike Klein17428132019-03-20 13:02:32 -0500560 DrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700561 void execute(SkCanvas* canvas) const override;
562 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500563 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800564
robertphillips@google.com67baba42013-01-02 20:20:31 +0000565private:
566 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000567 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000568
Mike Klein8f4e2242019-03-20 11:59:00 -0500569 typedef DrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000570};
571
Mike Klein17428132019-03-20 13:02:32 -0500572class DrawDRRectCommand : public DrawCommand {
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000573public:
Mike Klein17428132019-03-20 13:02:32 -0500574 DrawDRRectCommand(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700575 void execute(SkCanvas* canvas) const override;
576 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500577 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800578
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000579private:
580 SkRRect fOuter;
581 SkRRect fInner;
582 SkPaint fPaint;
583
Mike Klein8f4e2242019-03-20 11:59:00 -0500584 typedef DrawCommand INHERITED;
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000585};
586
Mike Klein17428132019-03-20 13:02:32 -0500587class DrawVerticesCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000588public:
Mike Klein17428132019-03-20 13:02:32 -0500589 DrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
Mike Reedfed9cfd2017-03-17 12:09:04 -0400590
mtklein36352bf2015-03-25 18:17:31 -0700591 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800592
chudy@google.com902ebe52012-06-29 14:21:22 +0000593private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500594 sk_sp<SkVertices> fVertices;
595 SkBlendMode fBlendMode;
596 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000597
Mike Klein8f4e2242019-03-20 11:59:00 -0500598 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000599};
600
Mike Klein17428132019-03-20 13:02:32 -0500601class DrawAtlasCommand : public DrawCommand {
Brian Osman616f1cb2018-05-29 11:23:35 -0400602public:
Mike Klein17428132019-03-20 13:02:32 -0500603 DrawAtlasCommand(const SkImage*,
604 const SkRSXform[],
605 const SkRect[],
606 const SkColor[],
607 int,
608 SkBlendMode,
609 const SkRect*,
610 const SkPaint*);
Brian Osman616f1cb2018-05-29 11:23:35 -0400611
612 void execute(SkCanvas* canvas) const override;
613
614private:
615 sk_sp<const SkImage> fImage;
616 SkTDArray<SkRSXform> fXform;
617 SkTDArray<SkRect> fTex;
618 SkTDArray<SkColor> fColors;
619 SkBlendMode fBlendMode;
620 SkTLazy<SkRect> fCull;
621 SkTLazy<SkPaint> fPaint;
622
Mike Klein8f4e2242019-03-20 11:59:00 -0500623 typedef DrawCommand INHERITED;
Brian Osman616f1cb2018-05-29 11:23:35 -0400624};
625
Mike Klein17428132019-03-20 13:02:32 -0500626class SaveCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000627public:
Mike Klein17428132019-03-20 13:02:32 -0500628 SaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700629 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800630
chudy@google.com902ebe52012-06-29 14:21:22 +0000631private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500632 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000633};
634
Mike Klein17428132019-03-20 13:02:32 -0500635class SaveLayerCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000636public:
Mike Klein17428132019-03-20 13:02:32 -0500637 SaveLayerCommand(const SkCanvas::SaveLayerRec&);
mtklein36352bf2015-03-25 18:17:31 -0700638 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500639 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000640
chudy@google.com902ebe52012-06-29 14:21:22 +0000641private:
Brian Osman8363be12018-05-29 13:38:07 -0400642 SkTLazy<SkRect> fBounds;
643 SkTLazy<SkPaint> fPaint;
644 sk_sp<const SkImageFilter> fBackdrop;
645 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000646
Mike Klein8f4e2242019-03-20 11:59:00 -0500647 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000648};
649
Mike Klein17428132019-03-20 13:02:32 -0500650class SetMatrixCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000651public:
Mike Klein17428132019-03-20 13:02:32 -0500652 SetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700653 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500654 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800655
chudy@google.com902ebe52012-06-29 14:21:22 +0000656private:
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000657 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000658
Mike Klein8f4e2242019-03-20 11:59:00 -0500659 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000660};
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400661
Mike Klein17428132019-03-20 13:02:32 -0500662class DrawShadowCommand : public DrawCommand {
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400663public:
Mike Klein17428132019-03-20 13:02:32 -0500664 DrawShadowCommand(const SkPath& path, const SkDrawShadowRec& rec);
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400665 void execute(SkCanvas* canvas) const override;
666 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500667 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400668
669private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500670 SkPath fPath;
671 SkDrawShadowRec fShadowRec;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400672
Mike Klein8f4e2242019-03-20 11:59:00 -0500673 typedef DrawCommand INHERITED;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400674};
vjiaoblacke6f5d562016-08-25 06:30:23 -0700675
Mike Klein17428132019-03-20 13:02:32 -0500676class DrawDrawableCommand : public DrawCommand {
Brian Osmanc7611082018-05-29 14:55:50 -0400677public:
Mike Klein17428132019-03-20 13:02:32 -0500678 DrawDrawableCommand(SkDrawable*, const SkMatrix*);
Brian Osmanc7611082018-05-29 14:55:50 -0400679 void execute(SkCanvas* canvas) const override;
680
681private:
682 sk_sp<SkDrawable> fDrawable;
683 SkTLazy<SkMatrix> fMatrix;
684
Mike Klein8f4e2242019-03-20 11:59:00 -0500685 typedef DrawCommand INHERITED;
Brian Osmanc7611082018-05-29 14:55:50 -0400686};
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400687
Mike Klein17428132019-03-20 13:02:32 -0500688class DrawEdgeAAQuadCommand : public DrawCommand {
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400689public:
Mike Klein17428132019-03-20 13:02:32 -0500690 DrawEdgeAAQuadCommand(const SkRect& rect,
691 const SkPoint clip[4],
692 SkCanvas::QuadAAFlags aa,
693 SkColor color,
694 SkBlendMode mode);
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400695 void execute(SkCanvas* canvas) const override;
696
697private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500698 SkRect fRect;
699 SkPoint fClip[4];
700 int fHasClip;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400701 SkCanvas::QuadAAFlags fAA;
Mike Klein8f4e2242019-03-20 11:59:00 -0500702 SkColor fColor;
703 SkBlendMode fMode;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400704
Mike Klein8f4e2242019-03-20 11:59:00 -0500705 typedef DrawCommand INHERITED;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400706};
707
Mike Klein17428132019-03-20 13:02:32 -0500708class DrawEdgeAAImageSetCommand : public DrawCommand {
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400709public:
Mike Klein17428132019-03-20 13:02:32 -0500710 DrawEdgeAAImageSetCommand(const SkCanvas::ImageSetEntry[],
711 int count,
712 const SkPoint[],
713 const SkMatrix[],
714 const SkPaint*,
715 SkCanvas::SrcRectConstraint);
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400716 void execute(SkCanvas* canvas) const override;
717
718private:
719 SkAutoTArray<SkCanvas::ImageSetEntry> fSet;
Mike Klein8f4e2242019-03-20 11:59:00 -0500720 int fCount;
721 SkAutoTArray<SkPoint> fDstClips;
722 SkAutoTArray<SkMatrix> fPreViewMatrices;
723 SkTLazy<SkPaint> fPaint;
724 SkCanvas::SrcRectConstraint fConstraint;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400725
Mike Klein8f4e2242019-03-20 11:59:00 -0500726 typedef DrawCommand INHERITED;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400727};
Brian Osmanc7611082018-05-29 14:55:50 -0400728#endif