blob: a6ca3414f26125c272438d0a576d6a2ca671b794 [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"
bungemand3ebb482015-08-05 13:57:49 -070015#include "SkTLazy.h"
16#include "SkPath.h"
Mike Reed267be7f2017-02-13 09:32:54 -050017#include "SkRegion.h"
bungemand3ebb482015-08-05 13:57:49 -070018#include "SkRRect.h"
reed45561a02016-07-07 12:47:17 -070019#include "SkRSXform.h"
robertphillips@google.com0a4805e2013-05-29 13:24:23 +000020#include "SkString.h"
bungemand3ebb482015-08-05 13:57:49 -070021#include "SkTDArray.h"
Mike Reedfed9cfd2017-03-17 12:09:04 -040022#include "SkVertices.h"
ethannicholas50a8dd02016-02-10 05:40:46 -080023#include "SkJSONCPP.h"
ethannicholasf62a8b72016-02-11 10:35:21 -080024#include "UrlDataManager.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000025
Mike Klein0f61faa2016-10-11 16:26:57 -040026class SkDrawCommand {
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,
Brian Salomond7065e72018-10-12 11:42:02 -040046 kDrawImageSet_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080047 kDrawOval_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040048 kDrawArc_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080049 kDrawPaint_OpType,
50 kDrawPatch_OpType,
51 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080052 kDrawPoints_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080053 kDrawRect_OpType,
Michael Ludwig75451902019-01-23 11:14:29 -050054 kDrawEdgeAARect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080055 kDrawRRect_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040056 kDrawRegion_OpType,
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -040057 kDrawShadow_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080058 kDrawTextBlob_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080059 kDrawVertices_OpType,
Brian Osman616f1cb2018-05-29 11:23:35 -040060 kDrawAtlas_OpType,
Brian Osmanc7611082018-05-29 14:55:50 -040061 kDrawDrawable_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
robertphillips9bafc302015-02-13 11:13:00 -080075 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000076
Brian Osman255735e2018-04-06 14:51:42 -040077 virtual ~SkDrawCommand() {}
chudy@google.com902ebe52012-06-29 14:21:22 +000078
chudy@google.com0b5bbb02012-07-31 19:55:32 +000079 bool isVisible() const {
80 return fVisible;
81 }
82
83 void setVisible(bool toggle) {
84 fVisible = toggle;
85 }
chudy@google.com902ebe52012-06-29 14:21:22 +000086
fmalita8c89c522014-11-08 16:18:56 -080087 virtual void execute(SkCanvas*) const = 0;
chudy@google.com902ebe52012-06-29 14:21:22 +000088
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000089 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +000090
ethannicholasf62a8b72016-02-11 10:35:21 -080091 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -080092
robertphillips9bafc302015-02-13 11:13:00 -080093 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +000094
joshualittbd724132016-03-03 11:39:38 -080095 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -070096 static Json::Value MakeJsonColor(const SkColor color);
brianosman97bbf822016-09-25 13:15:58 -070097 static Json::Value MakeJsonColor4f(const SkColor4f& color);
brianosmanfad98562016-05-04 11:06:28 -070098 static Json::Value MakeJsonPoint(const SkPoint& point);
99 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400100 static Json::Value MakeJsonPoint3(const SkPoint3& point);
brianosmanfad98562016-05-04 11:06:28 -0700101 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800102 static Json::Value MakeJsonIRect(const SkIRect&);
103 static Json::Value MakeJsonMatrix(const SkMatrix&);
vjiaoblacke5de1302016-07-13 14:05:28 -0700104 static Json::Value MakeJsonScalar(SkScalar);
brianosmanfad98562016-05-04 11:06:28 -0700105 static Json::Value MakeJsonPath(const SkPath& path);
106 static Json::Value MakeJsonRegion(const SkRegion& region);
107 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500108 static Json::Value MakeJsonLattice(const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700109
110 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
111 UrlDataManager& urlDataManager);
112 static bool flatten(const SkImage& image, Json::Value* target,
113 UrlDataManager& urlDataManager);
114 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
115 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800116
chudy@google.com902ebe52012-06-29 14:21:22 +0000117private:
robertphillips9bafc302015-02-13 11:13:00 -0800118 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000119 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000120};
121
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000122class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000123public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000124 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700125 void execute(SkCanvas* canvas) const override;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000126
127private:
128 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000129};
130
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000131class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000132public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000133 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700134 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800135 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800136
chudy@google.com902ebe52012-06-29 14:21:22 +0000137private:
138 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000139
140 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000141};
142
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000143class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000144public:
Mike Reedc1f77742016-12-09 09:00:50 -0500145 SkClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700146 void execute(SkCanvas* canvas) const override;
147 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800148 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800149
chudy@google.com902ebe52012-06-29 14:21:22 +0000150private:
Mike Reedc1f77742016-12-09 09:00:50 -0500151 SkPath fPath;
152 SkClipOp fOp;
153 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000154
155 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000156};
157
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000158class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000159public:
Mike Reedc1f77742016-12-09 09:00:50 -0500160 SkClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700161 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800162 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800163
chudy@google.com902ebe52012-06-29 14:21:22 +0000164private:
Mike Reedc1f77742016-12-09 09:00:50 -0500165 SkRegion fRegion;
166 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000167
168 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000169};
170
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000171class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000172public:
Mike Reedc1f77742016-12-09 09:00:50 -0500173 SkClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700174 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800175 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000176
chudy@google.com902ebe52012-06-29 14:21:22 +0000177private:
Mike Reedc1f77742016-12-09 09:00:50 -0500178 SkRect fRect;
179 SkClipOp fOp;
180 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000181
182 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000183};
184
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000185class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000186public:
Mike Reedc1f77742016-12-09 09:00:50 -0500187 SkClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700188 void execute(SkCanvas* canvas) const override;
189 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800190 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000191
robertphillips@google.com67baba42013-01-02 20:20:31 +0000192private:
Mike Reedc1f77742016-12-09 09:00:50 -0500193 SkRRect fRRect;
194 SkClipOp fOp;
195 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000196
197 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000198};
199
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000200class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000201public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000202 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700203 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800204 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800205
chudy@google.com902ebe52012-06-29 14:21:22 +0000206private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000207 SkMatrix fMatrix;
208
209 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000210};
211
reed97660cc2016-06-28 18:54:19 -0700212class SkDrawAnnotationCommand : public SkDrawCommand {
213public:
214 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
215 void execute(SkCanvas* canvas) const override;
216 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
reed97660cc2016-06-28 18:54:19 -0700217
218private:
219 SkRect fRect;
220 SkString fKey;
221 sk_sp<SkData> fValue;
222
223 typedef SkDrawCommand INHERITED;
224};
225
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000226class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000227public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000228 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000229 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700230 void execute(SkCanvas* canvas) const override;
231 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800232 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800233
chudy@google.com902ebe52012-06-29 14:21:22 +0000234private:
Brian Osman8363be12018-05-29 13:38:07 -0400235 SkBitmap fBitmap;
236 SkScalar fLeft;
237 SkScalar fTop;
238 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000239
240 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000241};
242
Brian Osman78a76482018-05-18 16:59:13 -0400243class SkDrawBitmapLatticeCommand : public SkDrawCommand {
244public:
245 SkDrawBitmapLatticeCommand(const SkBitmap& bitmap, const SkCanvas::Lattice& lattice,
246 const SkRect& dst, const SkPaint* paint);
247 void execute(SkCanvas* canvas) const override;
248 bool render(SkCanvas* canvas) const override;
249 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osman78a76482018-05-18 16:59:13 -0400250
251private:
252 SkBitmap fBitmap;
253 SkCanvas::Lattice fLattice;
254 SkRect fDst;
255 SkTLazy<SkPaint> fPaint;
256
257 typedef SkDrawCommand INHERITED;
258};
259
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000260class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000261public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000262 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000263 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700264 void execute(SkCanvas* canvas) const override;
265 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800266 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800267
chudy@google.com902ebe52012-06-29 14:21:22 +0000268private:
Brian Osman8363be12018-05-29 13:38:07 -0400269 SkBitmap fBitmap;
270 SkIRect fCenter;
271 SkRect fDst;
272 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000273
274 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000275};
276
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000277class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000278public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000279 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000280 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700281 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700282 void execute(SkCanvas* canvas) const override;
283 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800284 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000285
chudy@google.com902ebe52012-06-29 14:21:22 +0000286private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000287 SkBitmap fBitmap;
Brian Osman8363be12018-05-29 13:38:07 -0400288 SkTLazy<SkRect> fSrc;
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000289 SkRect fDst;
Brian Osman8363be12018-05-29 13:38:07 -0400290 SkTLazy<SkPaint> fPaint;
reeda5517e22015-07-14 10:54:12 -0700291 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000292
293 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000294};
295
fmalita651c9202015-07-22 10:23:01 -0700296class SkDrawImageCommand : public SkDrawCommand {
297public:
298 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
299 void execute(SkCanvas* canvas) const override;
300 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800301 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800302
fmalita651c9202015-07-22 10:23:01 -0700303private:
Hal Canary1b612a82016-11-03 16:26:13 -0400304 sk_sp<const SkImage> fImage;
305 SkScalar fLeft;
306 SkScalar fTop;
307 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700308
309 typedef SkDrawCommand INHERITED;
310};
311
Stan Ilievac42aeb2017-01-12 16:20:50 -0500312class SkDrawImageLatticeCommand : public SkDrawCommand {
313public:
314 SkDrawImageLatticeCommand(const SkImage* image, const SkCanvas::Lattice& lattice,
315 const SkRect& dst, const SkPaint* paint);
316 void execute(SkCanvas* canvas) const override;
317 bool render(SkCanvas* canvas) const override;
318 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
319
320private:
321 sk_sp<const SkImage> fImage;
322 SkCanvas::Lattice fLattice;
323 SkRect fDst;
324 SkTLazy<SkPaint> fPaint;
325
326 typedef SkDrawCommand INHERITED;
327};
328
Brian Osmanc25e2692018-03-12 10:57:28 -0400329class SkDrawImageNineCommand : public SkDrawCommand {
330public:
331 SkDrawImageNineCommand(const SkImage* image, const SkIRect& center,
332 const SkRect& dst, const SkPaint* paint);
333 void execute(SkCanvas* canvas) const override;
334 bool render(SkCanvas* canvas) const override;
335 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400336
337private:
338 sk_sp<const SkImage> fImage;
339 SkIRect fCenter;
340 SkRect fDst;
Brian Osman8363be12018-05-29 13:38:07 -0400341 SkTLazy<SkPaint> fPaint;
Brian Osmanc25e2692018-03-12 10:57:28 -0400342
343 typedef SkDrawCommand INHERITED;
344};
345
fmalita651c9202015-07-22 10:23:01 -0700346class SkDrawImageRectCommand : public SkDrawCommand {
347public:
348 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
349 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
350 void execute(SkCanvas* canvas) const override;
351 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800352 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800353
fmalita651c9202015-07-22 10:23:01 -0700354private:
Hal Canary1b612a82016-11-03 16:26:13 -0400355 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700356 SkTLazy<SkRect> fSrc;
357 SkRect fDst;
358 SkTLazy<SkPaint> fPaint;
359 SkCanvas::SrcRectConstraint fConstraint;
360
361 typedef SkDrawCommand INHERITED;
362};
363
Brian Salomond7065e72018-10-12 11:42:02 -0400364class SkDrawImageSetCommand : public SkDrawCommand {
365public:
Brian Salomond003d222018-11-26 13:25:05 -0500366 SkDrawImageSetCommand(const SkCanvas::ImageSetEntry[], int count, SkFilterQuality, SkBlendMode);
Brian Salomond7065e72018-10-12 11:42:02 -0400367 void execute(SkCanvas* canvas) const override;
368
369private:
370 SkAutoTArray<SkCanvas::ImageSetEntry> fSet;
371 int fCount;
Brian Salomond7065e72018-10-12 11:42:02 -0400372 SkFilterQuality fFilterQuality;
373 SkBlendMode fMode;
374
375 typedef SkDrawCommand INHERITED;
376};
377
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000378class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000379public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000380 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700381 void execute(SkCanvas* canvas) const override;
382 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800383 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800384
robertphillips@google.com67baba42013-01-02 20:20:31 +0000385private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000386 SkRect fOval;
387 SkPaint fPaint;
388
389 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000390};
391
bsalomonac3aa242016-08-19 11:25:19 -0700392class SkDrawArcCommand : public SkDrawCommand {
393public:
394 SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
395 const SkPaint& paint);
396 void execute(SkCanvas* canvas) const override;
397 bool render(SkCanvas* canvas) const override;
398 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
bsalomonac3aa242016-08-19 11:25:19 -0700399
400private:
401 SkRect fOval;
402 SkScalar fStartAngle;
403 SkScalar fSweepAngle;
404 bool fUseCenter;
405 SkPaint fPaint;
406
407 typedef SkDrawCommand INHERITED;
408};
409
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000410class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000411public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000412 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700413 void execute(SkCanvas* canvas) const override;
414 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800415 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800416
chudy@google.com902ebe52012-06-29 14:21:22 +0000417private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000418 SkPaint fPaint;
419
420 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000421};
422
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000423class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000424public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000425 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700426 void execute(SkCanvas* canvas) const override;
427 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800428 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000429
chudy@google.com902ebe52012-06-29 14:21:22 +0000430private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000431 SkPath fPath;
432 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000433
434 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000435};
436
fmalita160ebb22015-04-01 20:58:37 -0700437class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000438public:
fmalita160ebb22015-04-01 20:58:37 -0700439 SkBeginDrawPictureCommand(const SkPicture* picture,
440 const SkMatrix* matrix,
441 const SkPaint* paint);
442
mtklein36352bf2015-03-25 18:17:31 -0700443 void execute(SkCanvas* canvas) const override;
444 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000445
chudy@google.com902ebe52012-06-29 14:21:22 +0000446private:
Hal Canary1b612a82016-11-03 16:26:13 -0400447 sk_sp<const SkPicture> fPicture;
448 SkTLazy<SkMatrix> fMatrix;
449 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700450
451 typedef SkDrawCommand INHERITED;
452};
453
454class SkEndDrawPictureCommand : public SkDrawCommand {
455public:
456 SkEndDrawPictureCommand(bool restore);
457
458 void execute(SkCanvas* canvas) const override;
459
460private:
461 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000462
463 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000464};
465
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000466class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000467public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000468 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000469 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700470 void execute(SkCanvas* canvas) const override;
471 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800472 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800473
chudy@google.com902ebe52012-06-29 14:21:22 +0000474private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000475 SkCanvas::PointMode fMode;
Brian Osman8363be12018-05-29 13:38:07 -0400476 SkTDArray<SkPoint> fPts;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000477 SkPaint fPaint;
478
479 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000480};
481
Brian Osmanc25e2692018-03-12 10:57:28 -0400482class SkDrawRegionCommand : public SkDrawCommand {
483public:
484 SkDrawRegionCommand(const SkRegion& region, const SkPaint& paint);
485 void execute(SkCanvas* canvas) const override;
486 bool render(SkCanvas* canvas) const override;
487 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400488
489private:
490 SkRegion fRegion;
491 SkPaint fPaint;
492
493 typedef SkDrawCommand INHERITED;
494};
495
fmalitab7425172014-08-26 07:56:44 -0700496class SkDrawTextBlobCommand : public SkDrawCommand {
497public:
fmalita37283c22016-09-13 10:00:23 -0700498 SkDrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700499
mtklein36352bf2015-03-25 18:17:31 -0700500 void execute(SkCanvas* canvas) const override;
501 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800502 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
fmalitab7425172014-08-26 07:56:44 -0700503
504private:
fmalita37283c22016-09-13 10:00:23 -0700505 sk_sp<SkTextBlob> fBlob;
506 SkScalar fXPos;
507 SkScalar fYPos;
508 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700509
510 typedef SkDrawCommand INHERITED;
511};
512
robertphillips9bafc302015-02-13 11:13:00 -0800513class SkDrawPatchCommand : public SkDrawCommand {
514public:
515 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
Mike Reed7d954ad2016-10-28 15:42:34 -0400516 const SkPoint texCoords[4], SkBlendMode bmode,
robertphillips9bafc302015-02-13 11:13:00 -0800517 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700518 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800519 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800520
521private:
522 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800523 SkColor* fColorsPtr;
524 SkColor fColors[4];
525 SkPoint* fTexCoordsPtr;
526 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400527 SkBlendMode fBlendMode;
robertphillips9bafc302015-02-13 11:13:00 -0800528 SkPaint fPaint;
529
530 typedef SkDrawCommand INHERITED;
531};
532
533
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000534class SkDrawRectCommand : public SkDrawCommand {
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;
ethannicholasf62a8b72016-02-11 10:35:21 -0800538 Json::Value toJSON(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
544 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000545};
546
Michael Ludwig75451902019-01-23 11:14:29 -0500547class SkDrawEdgeAARectCommand : public SkDrawCommand {
548public:
549 SkDrawEdgeAARectCommand(const SkRect& rect, SkCanvas::QuadAAFlags aa, SkColor color,
550 SkBlendMode mode);
551 void execute(SkCanvas* canvas) const override;
552
553private:
554 SkRect fRect;
555 SkCanvas::QuadAAFlags fAA;
556 SkColor fColor;
557 SkBlendMode fMode;
558
559 typedef SkDrawCommand INHERITED;
560};
561
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000562class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000563public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000564 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700565 void execute(SkCanvas* canvas) const override;
566 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800567 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800568
robertphillips@google.com67baba42013-01-02 20:20:31 +0000569private:
570 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000571 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000572
573 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000574};
575
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000576class SkDrawDRRectCommand : public SkDrawCommand {
577public:
578 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
579 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700580 void execute(SkCanvas* canvas) const override;
581 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800582 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800583
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000584private:
585 SkRRect fOuter;
586 SkRRect fInner;
587 SkPaint fPaint;
588
589 typedef SkDrawCommand INHERITED;
590};
591
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000592class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000593public:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400594 SkDrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
595
mtklein36352bf2015-03-25 18:17:31 -0700596 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800597
chudy@google.com902ebe52012-06-29 14:21:22 +0000598private:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400599 sk_sp<SkVertices> fVertices;
600 SkBlendMode fBlendMode;
601 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000602
603 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000604};
605
Brian Osman616f1cb2018-05-29 11:23:35 -0400606class SkDrawAtlasCommand : public SkDrawCommand {
607public:
608 SkDrawAtlasCommand(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int,
609 SkBlendMode, const SkRect*, const SkPaint*);
610
611 void execute(SkCanvas* canvas) const override;
612
613private:
614 sk_sp<const SkImage> fImage;
615 SkTDArray<SkRSXform> fXform;
616 SkTDArray<SkRect> fTex;
617 SkTDArray<SkColor> fColors;
618 SkBlendMode fBlendMode;
619 SkTLazy<SkRect> fCull;
620 SkTLazy<SkPaint> fPaint;
621
622 typedef SkDrawCommand INHERITED;
623};
624
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000625class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000626public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400627 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700628 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800629
chudy@google.com902ebe52012-06-29 14:21:22 +0000630private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000631 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000632};
633
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000634class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000635public:
reed4960eee2015-12-18 07:09:18 -0800636 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
mtklein36352bf2015-03-25 18:17:31 -0700637 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800638 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000639
chudy@google.com902ebe52012-06-29 14:21:22 +0000640private:
Brian Osman8363be12018-05-29 13:38:07 -0400641 SkTLazy<SkRect> fBounds;
642 SkTLazy<SkPaint> fPaint;
643 sk_sp<const SkImageFilter> fBackdrop;
644 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000645
646 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000647};
648
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000649class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000650public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000651 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700652 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800653 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800654
chudy@google.com902ebe52012-06-29 14:21:22 +0000655private:
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000656 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000657
658 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000659};
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400660
661class SkDrawShadowCommand : public SkDrawCommand {
662public:
663 SkDrawShadowCommand(const SkPath& path, const SkDrawShadowRec& rec);
664 void execute(SkCanvas* canvas) const override;
665 bool render(SkCanvas* canvas) const override;
666 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400667
668private:
669 SkPath fPath;
670 SkDrawShadowRec fShadowRec;
671
672 typedef SkDrawCommand INHERITED;
673};
vjiaoblacke6f5d562016-08-25 06:30:23 -0700674
Brian Osmanc7611082018-05-29 14:55:50 -0400675class SkDrawDrawableCommand : public SkDrawCommand {
676public:
677 SkDrawDrawableCommand(SkDrawable*, const SkMatrix*);
678 void execute(SkCanvas* canvas) const override;
679
680private:
681 sk_sp<SkDrawable> fDrawable;
682 SkTLazy<SkMatrix> fMatrix;
683
684 typedef SkDrawCommand INHERITED;
685};
686#endif