blob: 5a14c4fbff7e800827f062f8e90722870289d86b [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,
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,
52 kDrawPosText_OpType,
53 kDrawPosTextH_OpType,
54 kDrawRect_OpType,
55 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 kDrawText_OpType,
59 kDrawTextBlob_OpType,
60 kDrawTextOnPath_OpType,
reed45561a02016-07-07 12:47:17 -070061 kDrawTextRSXform_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080062 kDrawVertices_OpType,
Brian Osman616f1cb2018-05-29 11:23:35 -040063 kDrawAtlas_OpType,
fmalita160ebb22015-04-01 20:58:37 -070064 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080065 kRestore_OpType,
66 kSave_OpType,
67 kSaveLayer_OpType,
68 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080069
Jim Van Verth343fe492017-05-02 16:49:24 -040070 kLast_OpType = kSetMatrix_OpType
robertphillips9bafc302015-02-13 11:13:00 -080071 };
72
73 static const int kOpTypeCount = kLast_OpType + 1;
74
halcanarya73d76a2016-10-17 13:19:02 -070075 static void WritePNG(const uint8_t* rgba, unsigned width, unsigned height,
msaretta5cf4f42016-06-30 10:06:51 -070076 SkWStream& out, bool isOpaque);
ethannicholasf67531f2016-03-21 10:19:39 -070077
robertphillips9bafc302015-02-13 11:13:00 -080078 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000079
Brian Osman255735e2018-04-06 14:51:42 -040080 virtual ~SkDrawCommand() {}
chudy@google.com902ebe52012-06-29 14:21:22 +000081
chudy@google.com0b5bbb02012-07-31 19:55:32 +000082 bool isVisible() const {
83 return fVisible;
84 }
85
86 void setVisible(bool toggle) {
87 fVisible = toggle;
88 }
chudy@google.com902ebe52012-06-29 14:21:22 +000089
fmalita8c89c522014-11-08 16:18:56 -080090 virtual void execute(SkCanvas*) const = 0;
chudy@google.com902ebe52012-06-29 14:21:22 +000091
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000092 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +000093
ethannicholasf62a8b72016-02-11 10:35:21 -080094 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -080095
96 /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
97 * is the caller's responsibility to delete this object. This method may return null if an error
98 * occurs.
99 */
ethannicholasf62a8b72016-02-11 10:35:21 -0800100 static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800101
robertphillips9bafc302015-02-13 11:13:00 -0800102 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000103
joshualittbd724132016-03-03 11:39:38 -0800104 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -0700105 static Json::Value MakeJsonColor(const SkColor color);
brianosman97bbf822016-09-25 13:15:58 -0700106 static Json::Value MakeJsonColor4f(const SkColor4f& color);
brianosmanfad98562016-05-04 11:06:28 -0700107 static Json::Value MakeJsonPoint(const SkPoint& point);
108 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400109 static Json::Value MakeJsonPoint3(const SkPoint3& point);
brianosmanfad98562016-05-04 11:06:28 -0700110 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800111 static Json::Value MakeJsonIRect(const SkIRect&);
112 static Json::Value MakeJsonMatrix(const SkMatrix&);
vjiaoblacke5de1302016-07-13 14:05:28 -0700113 static Json::Value MakeJsonScalar(SkScalar);
brianosmanfad98562016-05-04 11:06:28 -0700114 static Json::Value MakeJsonPath(const SkPath& path);
115 static Json::Value MakeJsonRegion(const SkRegion& region);
116 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500117 static Json::Value MakeJsonLattice(const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700118
119 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
120 UrlDataManager& urlDataManager);
121 static bool flatten(const SkImage& image, Json::Value* target,
122 UrlDataManager& urlDataManager);
123 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
124 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800125
chudy@google.com902ebe52012-06-29 14:21:22 +0000126private:
robertphillips9bafc302015-02-13 11:13:00 -0800127 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000128 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000129};
130
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000131class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000132public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000133 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700134 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800135 static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000136
137private:
138 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000139};
140
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000141class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000142public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000143 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700144 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800145 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
146 static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800147
chudy@google.com902ebe52012-06-29 14:21:22 +0000148private:
149 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000150
151 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000152};
153
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000154class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000155public:
Mike Reedc1f77742016-12-09 09:00:50 -0500156 SkClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700157 void execute(SkCanvas* canvas) const override;
158 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800159 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
160 static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800161
chudy@google.com902ebe52012-06-29 14:21:22 +0000162private:
Mike Reedc1f77742016-12-09 09:00:50 -0500163 SkPath fPath;
164 SkClipOp fOp;
165 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000166
167 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000168};
169
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000170class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000171public:
Mike Reedc1f77742016-12-09 09:00:50 -0500172 SkClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700173 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800174 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
175 static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800176
chudy@google.com902ebe52012-06-29 14:21:22 +0000177private:
Mike Reedc1f77742016-12-09 09:00:50 -0500178 SkRegion fRegion;
179 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000180
181 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000182};
183
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000184class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000185public:
Mike Reedc1f77742016-12-09 09:00:50 -0500186 SkClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700187 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800188 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
189 static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000190
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000191 const SkRect& rect() const { return fRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500192 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000193 bool doAA() const { return fDoAA; }
194
chudy@google.com902ebe52012-06-29 14:21:22 +0000195private:
Mike Reedc1f77742016-12-09 09:00:50 -0500196 SkRect fRect;
197 SkClipOp fOp;
198 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000199
200 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000201};
202
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000203class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000204public:
Mike Reedc1f77742016-12-09 09:00:50 -0500205 SkClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700206 void execute(SkCanvas* canvas) const override;
207 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800208 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
209 static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000210
211 const SkRRect& rrect() const { return fRRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500212 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000213 bool doAA() const { return fDoAA; }
214
robertphillips@google.com67baba42013-01-02 20:20:31 +0000215private:
Mike Reedc1f77742016-12-09 09:00:50 -0500216 SkRRect fRRect;
217 SkClipOp fOp;
218 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000219
220 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000221};
222
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000223class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000224public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000225 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700226 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800227 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
228 static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800229
chudy@google.com902ebe52012-06-29 14:21:22 +0000230private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000231 SkMatrix fMatrix;
232
233 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000234};
235
reed97660cc2016-06-28 18:54:19 -0700236class SkDrawAnnotationCommand : public SkDrawCommand {
237public:
238 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
239 void execute(SkCanvas* canvas) const override;
240 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
241 static SkDrawAnnotationCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
242
243private:
244 SkRect fRect;
245 SkString fKey;
246 sk_sp<SkData> fValue;
247
248 typedef SkDrawCommand INHERITED;
249};
250
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000251class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000252public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000253 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000254 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700255 void execute(SkCanvas* canvas) const override;
256 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800257 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
258 static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800259
chudy@google.com902ebe52012-06-29 14:21:22 +0000260private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000261 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000262 SkScalar fLeft;
263 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000264 SkPaint fPaint;
265 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000266
267 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000268};
269
Brian Osman78a76482018-05-18 16:59:13 -0400270class SkDrawBitmapLatticeCommand : public SkDrawCommand {
271public:
272 SkDrawBitmapLatticeCommand(const SkBitmap& bitmap, const SkCanvas::Lattice& lattice,
273 const SkRect& dst, const SkPaint* paint);
274 void execute(SkCanvas* canvas) const override;
275 bool render(SkCanvas* canvas) const override;
276 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
277 static SkDrawBitmapLatticeCommand* fromJSON(Json::Value& command,
278 UrlDataManager& urlDataManager);
279
280private:
281 SkBitmap fBitmap;
282 SkCanvas::Lattice fLattice;
283 SkRect fDst;
284 SkTLazy<SkPaint> fPaint;
285
286 typedef SkDrawCommand INHERITED;
287};
288
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000289class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000290public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000291 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000292 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700293 void execute(SkCanvas* canvas) const override;
294 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800295 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
296 static SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800297
chudy@google.com902ebe52012-06-29 14:21:22 +0000298private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000299 SkBitmap fBitmap;
300 SkIRect fCenter;
301 SkRect fDst;
302 SkPaint fPaint;
303 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000304
305 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000306};
307
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000308class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000309public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000310 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000311 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700312 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700313 void execute(SkCanvas* canvas) const override;
314 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800315 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
316 static SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000317
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000318 const SkBitmap& bitmap() const { return fBitmap; }
319
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000320 // The non-const 'paint' method allows modification of this object's
321 // SkPaint. For this reason the ctor and setPaint method make a local copy.
322 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
323 // (since only an SkPaint* is passed into the ctor).
324 const SkPaint* paint() const { return fPaintPtr; }
325 SkPaint* paint() { return fPaintPtr; }
326
327 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
328
halcanary96fcdcc2015-08-27 07:41:13 -0700329 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000330 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000331
332 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000333 void setDstRect(const SkRect& dst) { fDst = dst; }
334
reeda5517e22015-07-14 10:54:12 -0700335 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
336 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000337
chudy@google.com902ebe52012-06-29 14:21:22 +0000338private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000339 SkBitmap fBitmap;
340 SkRect fSrc;
341 SkRect fDst;
342 SkPaint fPaint;
343 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700344 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000345
346 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000347};
348
fmalita651c9202015-07-22 10:23:01 -0700349class SkDrawImageCommand : public SkDrawCommand {
350public:
351 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
352 void execute(SkCanvas* canvas) const override;
353 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800354 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
355 static SkDrawImageCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800356
fmalita651c9202015-07-22 10:23:01 -0700357private:
Hal Canary1b612a82016-11-03 16:26:13 -0400358 sk_sp<const SkImage> fImage;
359 SkScalar fLeft;
360 SkScalar fTop;
361 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700362
363 typedef SkDrawCommand INHERITED;
364};
365
Stan Ilievac42aeb2017-01-12 16:20:50 -0500366class SkDrawImageLatticeCommand : public SkDrawCommand {
367public:
368 SkDrawImageLatticeCommand(const SkImage* image, const SkCanvas::Lattice& lattice,
369 const SkRect& dst, const SkPaint* paint);
370 void execute(SkCanvas* canvas) const override;
371 bool render(SkCanvas* canvas) const override;
372 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400373 static SkDrawImageLatticeCommand* fromJSON(Json::Value& command,
374 UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500375
376private:
377 sk_sp<const SkImage> fImage;
378 SkCanvas::Lattice fLattice;
379 SkRect fDst;
380 SkTLazy<SkPaint> fPaint;
381
382 typedef SkDrawCommand INHERITED;
383};
384
Brian Osmanc25e2692018-03-12 10:57:28 -0400385class SkDrawImageNineCommand : public SkDrawCommand {
386public:
387 SkDrawImageNineCommand(const SkImage* image, const SkIRect& center,
388 const SkRect& dst, const SkPaint* paint);
389 void execute(SkCanvas* canvas) const override;
390 bool render(SkCanvas* canvas) const override;
391 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
392 static SkDrawImageNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
393
394private:
395 sk_sp<const SkImage> fImage;
396 SkIRect fCenter;
397 SkRect fDst;
398 SkPaint fPaint;
399 SkPaint* fPaintPtr;
400
401 typedef SkDrawCommand INHERITED;
402};
403
fmalita651c9202015-07-22 10:23:01 -0700404class SkDrawImageRectCommand : public SkDrawCommand {
405public:
406 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
407 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
408 void execute(SkCanvas* canvas) const override;
409 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800410 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
411 static SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800412
fmalita651c9202015-07-22 10:23:01 -0700413private:
Hal Canary1b612a82016-11-03 16:26:13 -0400414 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700415 SkTLazy<SkRect> fSrc;
416 SkRect fDst;
417 SkTLazy<SkPaint> fPaint;
418 SkCanvas::SrcRectConstraint fConstraint;
419
420 typedef SkDrawCommand INHERITED;
421};
422
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000423class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000424public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000425 SkDrawOvalCommand(const SkRect& oval, 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;
429 static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800430
robertphillips@google.com67baba42013-01-02 20:20:31 +0000431private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000432 SkRect fOval;
433 SkPaint fPaint;
434
435 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000436};
437
bsalomonac3aa242016-08-19 11:25:19 -0700438class SkDrawArcCommand : public SkDrawCommand {
439public:
440 SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
441 const SkPaint& paint);
442 void execute(SkCanvas* canvas) const override;
443 bool render(SkCanvas* canvas) const override;
444 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
445 static SkDrawArcCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
446
447private:
448 SkRect fOval;
449 SkScalar fStartAngle;
450 SkScalar fSweepAngle;
451 bool fUseCenter;
452 SkPaint fPaint;
453
454 typedef SkDrawCommand INHERITED;
455};
456
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000457class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000458public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000459 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700460 void execute(SkCanvas* canvas) const override;
461 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800462 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
463 static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800464
chudy@google.com902ebe52012-06-29 14:21:22 +0000465private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000466 SkPaint fPaint;
467
468 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000469};
470
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000471class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000472public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000473 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700474 void execute(SkCanvas* canvas) const override;
475 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800476 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
477 static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000478
chudy@google.com902ebe52012-06-29 14:21:22 +0000479private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000480 SkPath fPath;
481 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000482
483 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000484};
485
fmalita160ebb22015-04-01 20:58:37 -0700486class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000487public:
fmalita160ebb22015-04-01 20:58:37 -0700488 SkBeginDrawPictureCommand(const SkPicture* picture,
489 const SkMatrix* matrix,
490 const SkPaint* paint);
491
mtklein36352bf2015-03-25 18:17:31 -0700492 void execute(SkCanvas* canvas) const override;
493 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000494
chudy@google.com902ebe52012-06-29 14:21:22 +0000495private:
Hal Canary1b612a82016-11-03 16:26:13 -0400496 sk_sp<const SkPicture> fPicture;
497 SkTLazy<SkMatrix> fMatrix;
498 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700499
500 typedef SkDrawCommand INHERITED;
501};
502
503class SkEndDrawPictureCommand : public SkDrawCommand {
504public:
505 SkEndDrawPictureCommand(bool restore);
506
507 void execute(SkCanvas* canvas) const override;
508
509private:
510 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000511
512 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000513};
514
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000515class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000516public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000517 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000518 const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400519 ~SkDrawPointsCommand() override { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700520 void execute(SkCanvas* canvas) const override;
521 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800522 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
523 static SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800524
chudy@google.com902ebe52012-06-29 14:21:22 +0000525private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000526 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000527 size_t fCount;
528 SkPoint* fPts;
529 SkPaint fPaint;
530
531 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000532};
533
Brian Osmanc25e2692018-03-12 10:57:28 -0400534class SkDrawRegionCommand : public SkDrawCommand {
535public:
536 SkDrawRegionCommand(const SkRegion& region, const SkPaint& paint);
537 void execute(SkCanvas* canvas) const override;
538 bool render(SkCanvas* canvas) const override;
539 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
540 static SkDrawRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
541
542private:
543 SkRegion fRegion;
544 SkPaint fPaint;
545
546 typedef SkDrawCommand INHERITED;
547};
548
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000549class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000550public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000551 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000552 const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400553 ~SkDrawTextCommand() override { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700554 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800555 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
556 static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800557
chudy@google.com902ebe52012-06-29 14:21:22 +0000558private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000559 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000560 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000561 SkScalar fX;
562 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000563 SkPaint fPaint;
564
565 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000566};
567
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000568class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000569public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000570 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
571 const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400572 ~SkDrawPosTextCommand() override { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700573 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800574 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
575 static SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800576
chudy@google.com902ebe52012-06-29 14:21:22 +0000577private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000578 char* fText;
579 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000580 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000581 SkPaint fPaint;
582
583 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000584};
585
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000586class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000587public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000588 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
589 const SkMatrix* matrix, const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400590 ~SkDrawTextOnPathCommand() override { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700591 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800592 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
593 static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800594
chudy@google.com902ebe52012-06-29 14:21:22 +0000595private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000596 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000597 size_t fByteLength;
598 SkPath fPath;
599 SkMatrix fMatrix;
600 SkPaint fPaint;
601
602 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000603};
604
reed45561a02016-07-07 12:47:17 -0700605class SkDrawTextRSXformCommand : public SkDrawCommand {
606public:
607 SkDrawTextRSXformCommand(const void* text, size_t byteLength, const SkRSXform[],
608 const SkRect*, const SkPaint& paint);
609 ~SkDrawTextRSXformCommand() override { delete[] fText; delete[] fXform; }
610 void execute(SkCanvas* canvas) const override;
611 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
612 static SkDrawTextRSXformCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
613
614private:
615 char* fText;
616 size_t fByteLength;
617 SkRSXform* fXform;
618 SkRect* fCull;
619 SkRect fCullStorage;
620 SkPaint fPaint;
621
622 typedef SkDrawCommand INHERITED;
623};
624
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000625class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000626public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000627 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
628 SkScalar constY, const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400629 ~SkDrawPosTextHCommand() override { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700630 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800631 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
632 static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800633
chudy@google.com902ebe52012-06-29 14:21:22 +0000634private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000635 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000636 char* fText;
637 size_t fByteLength;
638 SkScalar fConstY;
639 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000640
641 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000642};
643
fmalitab7425172014-08-26 07:56:44 -0700644class SkDrawTextBlobCommand : public SkDrawCommand {
645public:
fmalita37283c22016-09-13 10:00:23 -0700646 SkDrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700647
mtklein36352bf2015-03-25 18:17:31 -0700648 void execute(SkCanvas* canvas) const override;
649 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800650 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
651 static SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
fmalitab7425172014-08-26 07:56:44 -0700652
653private:
fmalita37283c22016-09-13 10:00:23 -0700654 sk_sp<SkTextBlob> fBlob;
655 SkScalar fXPos;
656 SkScalar fYPos;
657 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700658
659 typedef SkDrawCommand INHERITED;
660};
661
robertphillips9bafc302015-02-13 11:13:00 -0800662class SkDrawPatchCommand : public SkDrawCommand {
663public:
664 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
Mike Reed7d954ad2016-10-28 15:42:34 -0400665 const SkPoint texCoords[4], SkBlendMode bmode,
robertphillips9bafc302015-02-13 11:13:00 -0800666 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700667 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800668 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
669 static SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips9bafc302015-02-13 11:13:00 -0800670
671private:
672 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800673 SkColor* fColorsPtr;
674 SkColor fColors[4];
675 SkPoint* fTexCoordsPtr;
676 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400677 SkBlendMode fBlendMode;
robertphillips9bafc302015-02-13 11:13:00 -0800678 SkPaint fPaint;
679
680 typedef SkDrawCommand INHERITED;
681};
682
683
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000684class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000685public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000686 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700687 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800688 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
689 static SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000690
robertphillips@google.com91217d02013-03-17 18:33:46 +0000691 const SkRect& rect() const { return fRect; }
692 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000693private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000694 SkRect fRect;
695 SkPaint fPaint;
696
697 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000698};
699
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000700class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000701public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000702 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700703 void execute(SkCanvas* canvas) const override;
704 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800705 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
706 static SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800707
robertphillips@google.com67baba42013-01-02 20:20:31 +0000708private:
709 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000710 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000711
712 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000713};
714
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000715class SkDrawDRRectCommand : public SkDrawCommand {
716public:
717 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
718 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700719 void execute(SkCanvas* canvas) const override;
720 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800721 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
722 static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800723
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000724private:
725 SkRRect fOuter;
726 SkRRect fInner;
727 SkPaint fPaint;
728
729 typedef SkDrawCommand INHERITED;
730};
731
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000732class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000733public:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400734 SkDrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
735
mtklein36352bf2015-03-25 18:17:31 -0700736 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800737
chudy@google.com902ebe52012-06-29 14:21:22 +0000738private:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400739 sk_sp<SkVertices> fVertices;
740 SkBlendMode fBlendMode;
741 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000742
743 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000744};
745
Brian Osman616f1cb2018-05-29 11:23:35 -0400746class SkDrawAtlasCommand : public SkDrawCommand {
747public:
748 SkDrawAtlasCommand(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int,
749 SkBlendMode, const SkRect*, const SkPaint*);
750
751 void execute(SkCanvas* canvas) const override;
752
753private:
754 sk_sp<const SkImage> fImage;
755 SkTDArray<SkRSXform> fXform;
756 SkTDArray<SkRect> fTex;
757 SkTDArray<SkColor> fColors;
758 SkBlendMode fBlendMode;
759 SkTLazy<SkRect> fCull;
760 SkTLazy<SkPaint> fPaint;
761
762 typedef SkDrawCommand INHERITED;
763};
764
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000765class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000766public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400767 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700768 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800769 static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800770
chudy@google.com902ebe52012-06-29 14:21:22 +0000771private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000772 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000773};
774
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000775class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000776public:
reed4960eee2015-12-18 07:09:18 -0800777 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
Brian Salomond3b65972017-03-22 12:05:03 -0400778 ~SkSaveLayerCommand() override;
mtklein36352bf2015-03-25 18:17:31 -0700779 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800780 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
781 static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000782
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000783 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000784
chudy@google.com902ebe52012-06-29 14:21:22 +0000785private:
ethannicholas50a8dd02016-02-10 05:40:46 -0800786 SkRect fBounds;
787 SkPaint fPaint;
788 SkPaint* fPaintPtr;
789 const SkImageFilter* fBackdrop;
790 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000791
792 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000793};
794
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000795class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000796public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000797 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700798 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800799 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
800 static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800801
chudy@google.com902ebe52012-06-29 14:21:22 +0000802private:
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000803 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000804
805 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000806};
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400807
808class SkDrawShadowCommand : public SkDrawCommand {
809public:
810 SkDrawShadowCommand(const SkPath& path, const SkDrawShadowRec& rec);
811 void execute(SkCanvas* canvas) const override;
812 bool render(SkCanvas* canvas) const override;
813 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
814 static SkDrawShadowCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
815
816private:
817 SkPath fPath;
818 SkDrawShadowRec fShadowRec;
819
820 typedef SkDrawCommand INHERITED;
821};
chudy@google.com902ebe52012-06-29 14:21:22 +0000822#endif
vjiaoblacke6f5d562016-08-25 06:30:23 -0700823