blob: d6cf0719efe1a1e2b6ad79e0510fd57a2dfb89c8 [file] [log] [blame]
chudy@google.com902ebe52012-06-29 14:21:22 +00001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SKDRAWCOMMAND_H_
9#define SKDRAWCOMMAND_H_
10
Florin Malitaab244f02017-05-03 19:16:58 +000011#include "SkBitmap.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000012#include "SkCanvas.h"
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -040013#include "SkDrawShadowInfo.h"
Mike Reed086a4272017-07-18 10:53:11 -040014#include "SkFlattenable.h"
Brian Osmand8a90f92019-01-28 13:41:19 -050015#include "SkJSONWriter.h"
bungemand3ebb482015-08-05 13:57:49 -070016#include "SkPath.h"
17#include "SkRRect.h"
reed45561a02016-07-07 12:47:17 -070018#include "SkRSXform.h"
Mike Klein8f4e2242019-03-20 11:59:00 -050019#include "SkRegion.h"
robertphillips@google.com0a4805e2013-05-29 13:24:23 +000020#include "SkString.h"
bungemand3ebb482015-08-05 13:57:49 -070021#include "SkTDArray.h"
Mike Klein8f4e2242019-03-20 11:59:00 -050022#include "SkTLazy.h"
Mike Reedfed9cfd2017-03-17 12:09:04 -040023#include "SkVertices.h"
ethannicholasf62a8b72016-02-11 10:35:21 -080024#include "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 Klein8f4e2242019-03-20 11:59:00 -0500118class SkRestoreCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000119public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000120 SkRestoreCommand();
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 Klein8f4e2242019-03-20 11:59:00 -0500127class SkClearCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000128public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000129 SkClearCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500139class SkClipPathCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000140public:
Mike Reedc1f77742016-12-09 09:00:50 -0500141 SkClipPathCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500154class SkClipRegionCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000155public:
Mike Reedc1f77742016-12-09 09:00:50 -0500156 SkClipRegionCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500167class SkClipRectCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000168public:
Mike Reedc1f77742016-12-09 09:00:50 -0500169 SkClipRectCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500181class SkClipRRectCommand : public DrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000182public:
Mike Reedc1f77742016-12-09 09:00:50 -0500183 SkClipRRectCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500196class SkConcatCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000197public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000198 SkConcatCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500208class SkDrawAnnotationCommand : public DrawCommand {
reed97660cc2016-06-28 18:54:19 -0700209public:
210 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
211 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 Klein8f4e2242019-03-20 11:59:00 -0500222class SkDrawBitmapCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000223public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500224 SkDrawBitmapCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500238class SkDrawBitmapLatticeCommand : public DrawCommand {
Brian Osman78a76482018-05-18 16:59:13 -0400239public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500240 SkDrawBitmapLatticeCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500257class SkDrawBitmapNineCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000258public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500259 SkDrawBitmapNineCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500276class SkDrawBitmapRectCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000277public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500278 SkDrawBitmapRectCommand(const SkBitmap& bitmap,
279 const SkRect* src,
280 const SkRect& dst,
281 const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700282 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 Klein8f4e2242019-03-20 11:59:00 -0500297class SkDrawImageCommand : public DrawCommand {
fmalita651c9202015-07-22 10:23:01 -0700298public:
299 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
300 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 Klein8f4e2242019-03-20 11:59:00 -0500313class SkDrawImageLatticeCommand : public DrawCommand {
Stan Ilievac42aeb2017-01-12 16:20:50 -0500314public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500315 SkDrawImageLatticeCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500332class SkDrawImageNineCommand : public DrawCommand {
Brian Osmanc25e2692018-03-12 10:57:28 -0400333public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500334 SkDrawImageNineCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500351class SkDrawImageRectCommand : public DrawCommand {
fmalita651c9202015-07-22 10:23:01 -0700352public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500353 SkDrawImageRectCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500372class SkDrawOvalCommand : public DrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000373public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000374 SkDrawOvalCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500386class SkDrawArcCommand : public DrawCommand {
bsalomonac3aa242016-08-19 11:25:19 -0700387public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500388 SkDrawArcCommand(const SkRect& oval,
389 SkScalar startAngle,
390 SkScalar sweepAngle,
391 bool useCenter,
bsalomonac3aa242016-08-19 11:25:19 -0700392 const SkPaint& paint);
393 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 Klein8f4e2242019-03-20 11:59:00 -0500407class SkDrawPaintCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000408public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000409 SkDrawPaintCommand(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 Klein8f4e2242019-03-20 11:59:00 -0500420class SkDrawPathCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000421public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000422 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700423 void execute(SkCanvas* canvas) const override;
424 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500425 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000426
chudy@google.com902ebe52012-06-29 14:21:22 +0000427private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500428 SkPath fPath;
429 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000430
Mike Klein8f4e2242019-03-20 11:59:00 -0500431 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000432};
433
Mike Klein8f4e2242019-03-20 11:59:00 -0500434class SkBeginDrawPictureCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000435public:
fmalita160ebb22015-04-01 20:58:37 -0700436 SkBeginDrawPictureCommand(const SkPicture* picture,
Mike Klein8f4e2242019-03-20 11:59:00 -0500437 const SkMatrix* matrix,
438 const SkPaint* paint);
fmalita160ebb22015-04-01 20:58:37 -0700439
mtklein36352bf2015-03-25 18:17:31 -0700440 void execute(SkCanvas* canvas) const override;
441 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000442
chudy@google.com902ebe52012-06-29 14:21:22 +0000443private:
Hal Canary1b612a82016-11-03 16:26:13 -0400444 sk_sp<const SkPicture> fPicture;
445 SkTLazy<SkMatrix> fMatrix;
446 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700447
Mike Klein8f4e2242019-03-20 11:59:00 -0500448 typedef DrawCommand INHERITED;
fmalita160ebb22015-04-01 20:58:37 -0700449};
450
Mike Klein8f4e2242019-03-20 11:59:00 -0500451class SkEndDrawPictureCommand : public DrawCommand {
fmalita160ebb22015-04-01 20:58:37 -0700452public:
453 SkEndDrawPictureCommand(bool restore);
454
455 void execute(SkCanvas* canvas) const override;
456
457private:
458 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000459
Mike Klein8f4e2242019-03-20 11:59:00 -0500460 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000461};
462
Mike Klein8f4e2242019-03-20 11:59:00 -0500463class SkDrawPointsCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000464public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500465 SkDrawPointsCommand(SkCanvas::PointMode mode,
466 size_t count,
467 const SkPoint pts[],
468 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700469 void execute(SkCanvas* canvas) const override;
470 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500471 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800472
chudy@google.com902ebe52012-06-29 14:21:22 +0000473private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000474 SkCanvas::PointMode fMode;
Brian Osman8363be12018-05-29 13:38:07 -0400475 SkTDArray<SkPoint> fPts;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000476 SkPaint fPaint;
477
Mike Klein8f4e2242019-03-20 11:59:00 -0500478 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000479};
480
Mike Klein8f4e2242019-03-20 11:59:00 -0500481class SkDrawRegionCommand : public DrawCommand {
Brian Osmanc25e2692018-03-12 10:57:28 -0400482public:
483 SkDrawRegionCommand(const SkRegion& region, const SkPaint& paint);
484 void execute(SkCanvas* canvas) const override;
485 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500486 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400487
488private:
489 SkRegion fRegion;
490 SkPaint fPaint;
491
Mike Klein8f4e2242019-03-20 11:59:00 -0500492 typedef DrawCommand INHERITED;
Brian Osmanc25e2692018-03-12 10:57:28 -0400493};
494
Mike Klein8f4e2242019-03-20 11:59:00 -0500495class SkDrawTextBlobCommand : public DrawCommand {
fmalitab7425172014-08-26 07:56:44 -0700496public:
fmalita37283c22016-09-13 10:00:23 -0700497 SkDrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700498
mtklein36352bf2015-03-25 18:17:31 -0700499 void execute(SkCanvas* canvas) const override;
500 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500501 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
fmalitab7425172014-08-26 07:56:44 -0700502
503private:
fmalita37283c22016-09-13 10:00:23 -0700504 sk_sp<SkTextBlob> fBlob;
505 SkScalar fXPos;
506 SkScalar fYPos;
507 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700508
Mike Klein8f4e2242019-03-20 11:59:00 -0500509 typedef DrawCommand INHERITED;
fmalitab7425172014-08-26 07:56:44 -0700510};
511
Mike Klein8f4e2242019-03-20 11:59:00 -0500512class SkDrawPatchCommand : public DrawCommand {
robertphillips9bafc302015-02-13 11:13:00 -0800513public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500514 SkDrawPatchCommand(const SkPoint cubics[12],
515 const SkColor colors[4],
516 const SkPoint texCoords[4],
517 SkBlendMode bmode,
robertphillips9bafc302015-02-13 11:13:00 -0800518 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700519 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500520 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800521
522private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500523 SkPoint fCubics[12];
524 SkColor* fColorsPtr;
525 SkColor fColors[4];
526 SkPoint* fTexCoordsPtr;
527 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400528 SkBlendMode fBlendMode;
Mike Klein8f4e2242019-03-20 11:59:00 -0500529 SkPaint fPaint;
robertphillips9bafc302015-02-13 11:13:00 -0800530
Mike Klein8f4e2242019-03-20 11:59:00 -0500531 typedef DrawCommand INHERITED;
robertphillips9bafc302015-02-13 11:13:00 -0800532};
533
Mike Klein8f4e2242019-03-20 11:59:00 -0500534class SkDrawRectCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000535public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000536 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700537 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500538 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000539
chudy@google.com902ebe52012-06-29 14:21:22 +0000540private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000541 SkRect fRect;
542 SkPaint fPaint;
543
Mike Klein8f4e2242019-03-20 11:59:00 -0500544 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000545};
546
Mike Klein8f4e2242019-03-20 11:59:00 -0500547class SkDrawRRectCommand : public DrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000548public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000549 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700550 void execute(SkCanvas* canvas) const override;
551 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500552 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800553
robertphillips@google.com67baba42013-01-02 20:20:31 +0000554private:
555 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000556 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000557
Mike Klein8f4e2242019-03-20 11:59:00 -0500558 typedef DrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000559};
560
Mike Klein8f4e2242019-03-20 11:59:00 -0500561class SkDrawDRRectCommand : public DrawCommand {
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000562public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500563 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700564 void execute(SkCanvas* canvas) const override;
565 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500566 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800567
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000568private:
569 SkRRect fOuter;
570 SkRRect fInner;
571 SkPaint fPaint;
572
Mike Klein8f4e2242019-03-20 11:59:00 -0500573 typedef DrawCommand INHERITED;
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000574};
575
Mike Klein8f4e2242019-03-20 11:59:00 -0500576class SkDrawVerticesCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000577public:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400578 SkDrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
579
mtklein36352bf2015-03-25 18:17:31 -0700580 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800581
chudy@google.com902ebe52012-06-29 14:21:22 +0000582private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500583 sk_sp<SkVertices> fVertices;
584 SkBlendMode fBlendMode;
585 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000586
Mike Klein8f4e2242019-03-20 11:59:00 -0500587 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000588};
589
Mike Klein8f4e2242019-03-20 11:59:00 -0500590class SkDrawAtlasCommand : public DrawCommand {
Brian Osman616f1cb2018-05-29 11:23:35 -0400591public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500592 SkDrawAtlasCommand(const SkImage*,
593 const SkRSXform[],
594 const SkRect[],
595 const SkColor[],
596 int,
597 SkBlendMode,
598 const SkRect*,
599 const SkPaint*);
Brian Osman616f1cb2018-05-29 11:23:35 -0400600
601 void execute(SkCanvas* canvas) const override;
602
603private:
604 sk_sp<const SkImage> fImage;
605 SkTDArray<SkRSXform> fXform;
606 SkTDArray<SkRect> fTex;
607 SkTDArray<SkColor> fColors;
608 SkBlendMode fBlendMode;
609 SkTLazy<SkRect> fCull;
610 SkTLazy<SkPaint> fPaint;
611
Mike Klein8f4e2242019-03-20 11:59:00 -0500612 typedef DrawCommand INHERITED;
Brian Osman616f1cb2018-05-29 11:23:35 -0400613};
614
Mike Klein8f4e2242019-03-20 11:59:00 -0500615class SkSaveCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000616public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400617 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700618 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800619
chudy@google.com902ebe52012-06-29 14:21:22 +0000620private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500621 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000622};
623
Mike Klein8f4e2242019-03-20 11:59:00 -0500624class SkSaveLayerCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000625public:
reed4960eee2015-12-18 07:09:18 -0800626 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
mtklein36352bf2015-03-25 18:17:31 -0700627 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500628 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000629
chudy@google.com902ebe52012-06-29 14:21:22 +0000630private:
Brian Osman8363be12018-05-29 13:38:07 -0400631 SkTLazy<SkRect> fBounds;
632 SkTLazy<SkPaint> fPaint;
633 sk_sp<const SkImageFilter> fBackdrop;
634 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000635
Mike Klein8f4e2242019-03-20 11:59:00 -0500636 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000637};
638
Mike Klein8f4e2242019-03-20 11:59:00 -0500639class SkSetMatrixCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000640public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000641 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700642 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500643 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800644
chudy@google.com902ebe52012-06-29 14:21:22 +0000645private:
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000646 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000647
Mike Klein8f4e2242019-03-20 11:59:00 -0500648 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000649};
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400650
Mike Klein8f4e2242019-03-20 11:59:00 -0500651class SkDrawShadowCommand : public DrawCommand {
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400652public:
653 SkDrawShadowCommand(const SkPath& path, const SkDrawShadowRec& rec);
654 void execute(SkCanvas* canvas) const override;
655 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500656 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400657
658private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500659 SkPath fPath;
660 SkDrawShadowRec fShadowRec;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400661
Mike Klein8f4e2242019-03-20 11:59:00 -0500662 typedef DrawCommand INHERITED;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400663};
vjiaoblacke6f5d562016-08-25 06:30:23 -0700664
Mike Klein8f4e2242019-03-20 11:59:00 -0500665class SkDrawDrawableCommand : public DrawCommand {
Brian Osmanc7611082018-05-29 14:55:50 -0400666public:
667 SkDrawDrawableCommand(SkDrawable*, const SkMatrix*);
668 void execute(SkCanvas* canvas) const override;
669
670private:
671 sk_sp<SkDrawable> fDrawable;
672 SkTLazy<SkMatrix> fMatrix;
673
Mike Klein8f4e2242019-03-20 11:59:00 -0500674 typedef DrawCommand INHERITED;
Brian Osmanc7611082018-05-29 14:55:50 -0400675};
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400676
Mike Klein8f4e2242019-03-20 11:59:00 -0500677class SkDrawEdgeAAQuadCommand : public DrawCommand {
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400678public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500679 SkDrawEdgeAAQuadCommand(const SkRect& rect,
680 const SkPoint clip[4],
681 SkCanvas::QuadAAFlags aa,
682 SkColor color,
683 SkBlendMode mode);
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400684 void execute(SkCanvas* canvas) const override;
685
686private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500687 SkRect fRect;
688 SkPoint fClip[4];
689 int fHasClip;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400690 SkCanvas::QuadAAFlags fAA;
Mike Klein8f4e2242019-03-20 11:59:00 -0500691 SkColor fColor;
692 SkBlendMode fMode;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400693
Mike Klein8f4e2242019-03-20 11:59:00 -0500694 typedef DrawCommand INHERITED;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400695};
696
Mike Klein8f4e2242019-03-20 11:59:00 -0500697class SkDrawEdgeAAImageSetCommand : public DrawCommand {
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400698public:
Mike Klein8f4e2242019-03-20 11:59:00 -0500699 SkDrawEdgeAAImageSetCommand(const SkCanvas::ImageSetEntry[],
700 int count,
701 const SkPoint[],
702 const SkMatrix[],
703 const SkPaint*,
704 SkCanvas::SrcRectConstraint);
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400705 void execute(SkCanvas* canvas) const override;
706
707private:
708 SkAutoTArray<SkCanvas::ImageSetEntry> fSet;
Mike Klein8f4e2242019-03-20 11:59:00 -0500709 int fCount;
710 SkAutoTArray<SkPoint> fDstClips;
711 SkAutoTArray<SkMatrix> fPreViewMatrices;
712 SkTLazy<SkPaint> fPaint;
713 SkCanvas::SrcRectConstraint fConstraint;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400714
Mike Klein8f4e2242019-03-20 11:59:00 -0500715 typedef DrawCommand INHERITED;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400716};
Brian Osmanc7611082018-05-29 14:55:50 -0400717#endif