blob: 30030d497e27cf75a1150289410d600e650b18af [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 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 Klein17428132019-03-20 13:02:32 -0500420class DrawPathCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000421public:
Mike Klein17428132019-03-20 13:02:32 -0500422 DrawPathCommand(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 Klein17428132019-03-20 13:02:32 -0500434class BeginDrawPictureCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000435public:
Mike Klein17428132019-03-20 13:02:32 -0500436 BeginDrawPictureCommand(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint);
fmalita160ebb22015-04-01 20:58:37 -0700437
mtklein36352bf2015-03-25 18:17:31 -0700438 void execute(SkCanvas* canvas) const override;
439 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000440
chudy@google.com902ebe52012-06-29 14:21:22 +0000441private:
Hal Canary1b612a82016-11-03 16:26:13 -0400442 sk_sp<const SkPicture> fPicture;
443 SkTLazy<SkMatrix> fMatrix;
444 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700445
Mike Klein8f4e2242019-03-20 11:59:00 -0500446 typedef DrawCommand INHERITED;
fmalita160ebb22015-04-01 20:58:37 -0700447};
448
Mike Klein17428132019-03-20 13:02:32 -0500449class EndDrawPictureCommand : public DrawCommand {
fmalita160ebb22015-04-01 20:58:37 -0700450public:
Mike Klein17428132019-03-20 13:02:32 -0500451 EndDrawPictureCommand(bool restore);
fmalita160ebb22015-04-01 20:58:37 -0700452
453 void execute(SkCanvas* canvas) const override;
454
455private:
456 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000457
Mike Klein8f4e2242019-03-20 11:59:00 -0500458 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000459};
460
Mike Klein17428132019-03-20 13:02:32 -0500461class DrawPointsCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000462public:
Mike Klein17428132019-03-20 13:02:32 -0500463 DrawPointsCommand(SkCanvas::PointMode mode,
464 size_t count,
465 const SkPoint pts[],
466 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;
ethannicholas50a8dd02016-02-10 05:40:46 -0800470
chudy@google.com902ebe52012-06-29 14:21:22 +0000471private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000472 SkCanvas::PointMode fMode;
Brian Osman8363be12018-05-29 13:38:07 -0400473 SkTDArray<SkPoint> fPts;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000474 SkPaint fPaint;
475
Mike Klein8f4e2242019-03-20 11:59:00 -0500476 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000477};
478
Mike Klein17428132019-03-20 13:02:32 -0500479class DrawRegionCommand : public DrawCommand {
Brian Osmanc25e2692018-03-12 10:57:28 -0400480public:
Mike Klein17428132019-03-20 13:02:32 -0500481 DrawRegionCommand(const SkRegion& region, const SkPaint& paint);
Brian Osmanc25e2692018-03-12 10:57:28 -0400482 void execute(SkCanvas* canvas) const override;
483 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500484 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400485
486private:
487 SkRegion fRegion;
488 SkPaint fPaint;
489
Mike Klein8f4e2242019-03-20 11:59:00 -0500490 typedef DrawCommand INHERITED;
Brian Osmanc25e2692018-03-12 10:57:28 -0400491};
492
Mike Klein17428132019-03-20 13:02:32 -0500493class DrawTextBlobCommand : public DrawCommand {
fmalitab7425172014-08-26 07:56:44 -0700494public:
Mike Klein17428132019-03-20 13:02:32 -0500495 DrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700496
mtklein36352bf2015-03-25 18:17:31 -0700497 void execute(SkCanvas* canvas) const override;
498 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500499 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
fmalitab7425172014-08-26 07:56:44 -0700500
501private:
fmalita37283c22016-09-13 10:00:23 -0700502 sk_sp<SkTextBlob> fBlob;
503 SkScalar fXPos;
504 SkScalar fYPos;
505 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700506
Mike Klein8f4e2242019-03-20 11:59:00 -0500507 typedef DrawCommand INHERITED;
fmalitab7425172014-08-26 07:56:44 -0700508};
509
Mike Klein17428132019-03-20 13:02:32 -0500510class DrawPatchCommand : public DrawCommand {
robertphillips9bafc302015-02-13 11:13:00 -0800511public:
Mike Klein17428132019-03-20 13:02:32 -0500512 DrawPatchCommand(const SkPoint cubics[12],
513 const SkColor colors[4],
514 const SkPoint texCoords[4],
515 SkBlendMode bmode,
516 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700517 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500518 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800519
520private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500521 SkPoint fCubics[12];
522 SkColor* fColorsPtr;
523 SkColor fColors[4];
524 SkPoint* fTexCoordsPtr;
525 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400526 SkBlendMode fBlendMode;
Mike Klein8f4e2242019-03-20 11:59:00 -0500527 SkPaint fPaint;
robertphillips9bafc302015-02-13 11:13:00 -0800528
Mike Klein8f4e2242019-03-20 11:59:00 -0500529 typedef DrawCommand INHERITED;
robertphillips9bafc302015-02-13 11:13:00 -0800530};
531
Mike Klein17428132019-03-20 13:02:32 -0500532class DrawRectCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000533public:
Mike Klein17428132019-03-20 13:02:32 -0500534 DrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700535 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500536 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000537
chudy@google.com902ebe52012-06-29 14:21:22 +0000538private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000539 SkRect fRect;
540 SkPaint fPaint;
541
Mike Klein8f4e2242019-03-20 11:59:00 -0500542 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000543};
544
Mike Klein17428132019-03-20 13:02:32 -0500545class DrawRRectCommand : public DrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000546public:
Mike Klein17428132019-03-20 13:02:32 -0500547 DrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700548 void execute(SkCanvas* canvas) const override;
549 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500550 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800551
robertphillips@google.com67baba42013-01-02 20:20:31 +0000552private:
553 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000554 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000555
Mike Klein8f4e2242019-03-20 11:59:00 -0500556 typedef DrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000557};
558
Mike Klein17428132019-03-20 13:02:32 -0500559class DrawDRRectCommand : public DrawCommand {
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000560public:
Mike Klein17428132019-03-20 13:02:32 -0500561 DrawDRRectCommand(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700562 void execute(SkCanvas* canvas) const override;
563 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500564 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800565
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000566private:
567 SkRRect fOuter;
568 SkRRect fInner;
569 SkPaint fPaint;
570
Mike Klein8f4e2242019-03-20 11:59:00 -0500571 typedef DrawCommand INHERITED;
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000572};
573
Mike Klein17428132019-03-20 13:02:32 -0500574class DrawVerticesCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000575public:
Mike Klein17428132019-03-20 13:02:32 -0500576 DrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
Mike Reedfed9cfd2017-03-17 12:09:04 -0400577
mtklein36352bf2015-03-25 18:17:31 -0700578 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800579
chudy@google.com902ebe52012-06-29 14:21:22 +0000580private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500581 sk_sp<SkVertices> fVertices;
582 SkBlendMode fBlendMode;
583 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000584
Mike Klein8f4e2242019-03-20 11:59:00 -0500585 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000586};
587
Mike Klein17428132019-03-20 13:02:32 -0500588class DrawAtlasCommand : public DrawCommand {
Brian Osman616f1cb2018-05-29 11:23:35 -0400589public:
Mike Klein17428132019-03-20 13:02:32 -0500590 DrawAtlasCommand(const SkImage*,
591 const SkRSXform[],
592 const SkRect[],
593 const SkColor[],
594 int,
595 SkBlendMode,
596 const SkRect*,
597 const SkPaint*);
Brian Osman616f1cb2018-05-29 11:23:35 -0400598
599 void execute(SkCanvas* canvas) const override;
600
601private:
602 sk_sp<const SkImage> fImage;
603 SkTDArray<SkRSXform> fXform;
604 SkTDArray<SkRect> fTex;
605 SkTDArray<SkColor> fColors;
606 SkBlendMode fBlendMode;
607 SkTLazy<SkRect> fCull;
608 SkTLazy<SkPaint> fPaint;
609
Mike Klein8f4e2242019-03-20 11:59:00 -0500610 typedef DrawCommand INHERITED;
Brian Osman616f1cb2018-05-29 11:23:35 -0400611};
612
Mike Klein17428132019-03-20 13:02:32 -0500613class SaveCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000614public:
Mike Klein17428132019-03-20 13:02:32 -0500615 SaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700616 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800617
chudy@google.com902ebe52012-06-29 14:21:22 +0000618private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500619 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000620};
621
Mike Klein17428132019-03-20 13:02:32 -0500622class SaveLayerCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000623public:
Mike Klein17428132019-03-20 13:02:32 -0500624 SaveLayerCommand(const SkCanvas::SaveLayerRec&);
mtklein36352bf2015-03-25 18:17:31 -0700625 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500626 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000627
chudy@google.com902ebe52012-06-29 14:21:22 +0000628private:
Brian Osman8363be12018-05-29 13:38:07 -0400629 SkTLazy<SkRect> fBounds;
630 SkTLazy<SkPaint> fPaint;
631 sk_sp<const SkImageFilter> fBackdrop;
632 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000633
Mike Klein8f4e2242019-03-20 11:59:00 -0500634 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000635};
636
Mike Klein17428132019-03-20 13:02:32 -0500637class SetMatrixCommand : public DrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000638public:
Mike Klein17428132019-03-20 13:02:32 -0500639 SetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700640 void execute(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500641 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800642
chudy@google.com902ebe52012-06-29 14:21:22 +0000643private:
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000644 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000645
Mike Klein8f4e2242019-03-20 11:59:00 -0500646 typedef DrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000647};
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400648
Mike Klein17428132019-03-20 13:02:32 -0500649class DrawShadowCommand : public DrawCommand {
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400650public:
Mike Klein17428132019-03-20 13:02:32 -0500651 DrawShadowCommand(const SkPath& path, const SkDrawShadowRec& rec);
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400652 void execute(SkCanvas* canvas) const override;
653 bool render(SkCanvas* canvas) const override;
Brian Osmand8a90f92019-01-28 13:41:19 -0500654 void toJSON(SkJSONWriter& writer, UrlDataManager& urlDataManager) const override;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400655
656private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500657 SkPath fPath;
658 SkDrawShadowRec fShadowRec;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400659
Mike Klein8f4e2242019-03-20 11:59:00 -0500660 typedef DrawCommand INHERITED;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400661};
vjiaoblacke6f5d562016-08-25 06:30:23 -0700662
Mike Klein17428132019-03-20 13:02:32 -0500663class DrawDrawableCommand : public DrawCommand {
Brian Osmanc7611082018-05-29 14:55:50 -0400664public:
Mike Klein17428132019-03-20 13:02:32 -0500665 DrawDrawableCommand(SkDrawable*, const SkMatrix*);
Brian Osmanc7611082018-05-29 14:55:50 -0400666 void execute(SkCanvas* canvas) const override;
667
668private:
669 sk_sp<SkDrawable> fDrawable;
670 SkTLazy<SkMatrix> fMatrix;
671
Mike Klein8f4e2242019-03-20 11:59:00 -0500672 typedef DrawCommand INHERITED;
Brian Osmanc7611082018-05-29 14:55:50 -0400673};
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400674
Mike Klein17428132019-03-20 13:02:32 -0500675class DrawEdgeAAQuadCommand : public DrawCommand {
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400676public:
Mike Klein17428132019-03-20 13:02:32 -0500677 DrawEdgeAAQuadCommand(const SkRect& rect,
678 const SkPoint clip[4],
679 SkCanvas::QuadAAFlags aa,
680 SkColor color,
681 SkBlendMode mode);
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400682 void execute(SkCanvas* canvas) const override;
683
684private:
Mike Klein8f4e2242019-03-20 11:59:00 -0500685 SkRect fRect;
686 SkPoint fClip[4];
687 int fHasClip;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400688 SkCanvas::QuadAAFlags fAA;
Mike Klein8f4e2242019-03-20 11:59:00 -0500689 SkColor fColor;
690 SkBlendMode fMode;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400691
Mike Klein8f4e2242019-03-20 11:59:00 -0500692 typedef DrawCommand INHERITED;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400693};
694
Mike Klein17428132019-03-20 13:02:32 -0500695class DrawEdgeAAImageSetCommand : public DrawCommand {
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400696public:
Mike Klein17428132019-03-20 13:02:32 -0500697 DrawEdgeAAImageSetCommand(const SkCanvas::ImageSetEntry[],
698 int count,
699 const SkPoint[],
700 const SkMatrix[],
701 const SkPaint*,
702 SkCanvas::SrcRectConstraint);
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400703 void execute(SkCanvas* canvas) const override;
704
705private:
706 SkAutoTArray<SkCanvas::ImageSetEntry> fSet;
Mike Klein8f4e2242019-03-20 11:59:00 -0500707 int fCount;
708 SkAutoTArray<SkPoint> fDstClips;
709 SkAutoTArray<SkMatrix> fPreViewMatrices;
710 SkTLazy<SkPaint> fPaint;
711 SkCanvas::SrcRectConstraint fConstraint;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400712
Mike Klein8f4e2242019-03-20 11:59:00 -0500713 typedef DrawCommand INHERITED;
Michael Ludwig390f0cc2019-03-19 09:16:38 -0400714};
Brian Osmanc7611082018-05-29 14:55:50 -0400715#endif