blob: a52eb4376295fed88719e368d774c027294e18b5 [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,
fmalita160ebb22015-04-01 20:58:37 -070063 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080064 kRestore_OpType,
65 kSave_OpType,
66 kSaveLayer_OpType,
67 kSetMatrix_OpType,
robertphillips72942b82015-02-12 06:37:12 -080068
Jim Van Verth343fe492017-05-02 16:49:24 -040069 kLast_OpType = kSetMatrix_OpType
robertphillips9bafc302015-02-13 11:13:00 -080070 };
71
72 static const int kOpTypeCount = kLast_OpType + 1;
73
halcanarya73d76a2016-10-17 13:19:02 -070074 static void WritePNG(const uint8_t* rgba, unsigned width, unsigned height,
msaretta5cf4f42016-06-30 10:06:51 -070075 SkWStream& out, bool isOpaque);
ethannicholasf67531f2016-03-21 10:19:39 -070076
robertphillips9bafc302015-02-13 11:13:00 -080077 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000078
Brian Osman255735e2018-04-06 14:51:42 -040079 virtual ~SkDrawCommand() {}
chudy@google.com902ebe52012-06-29 14:21:22 +000080
chudy@google.com0b5bbb02012-07-31 19:55:32 +000081 bool isVisible() const {
82 return fVisible;
83 }
84
85 void setVisible(bool toggle) {
86 fVisible = toggle;
87 }
chudy@google.com902ebe52012-06-29 14:21:22 +000088
fmalita8c89c522014-11-08 16:18:56 -080089 virtual void execute(SkCanvas*) const = 0;
chudy@google.com902ebe52012-06-29 14:21:22 +000090
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000091 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +000092
ethannicholasf62a8b72016-02-11 10:35:21 -080093 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -080094
95 /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
96 * is the caller's responsibility to delete this object. This method may return null if an error
97 * occurs.
98 */
ethannicholasf62a8b72016-02-11 10:35:21 -080099 static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800100
robertphillips9bafc302015-02-13 11:13:00 -0800101 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000102
joshualittbd724132016-03-03 11:39:38 -0800103 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -0700104 static Json::Value MakeJsonColor(const SkColor color);
brianosman97bbf822016-09-25 13:15:58 -0700105 static Json::Value MakeJsonColor4f(const SkColor4f& color);
brianosmanfad98562016-05-04 11:06:28 -0700106 static Json::Value MakeJsonPoint(const SkPoint& point);
107 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400108 static Json::Value MakeJsonPoint3(const SkPoint3& point);
brianosmanfad98562016-05-04 11:06:28 -0700109 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800110 static Json::Value MakeJsonIRect(const SkIRect&);
111 static Json::Value MakeJsonMatrix(const SkMatrix&);
vjiaoblacke5de1302016-07-13 14:05:28 -0700112 static Json::Value MakeJsonScalar(SkScalar);
brianosmanfad98562016-05-04 11:06:28 -0700113 static Json::Value MakeJsonPath(const SkPath& path);
114 static Json::Value MakeJsonRegion(const SkRegion& region);
115 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500116 static Json::Value MakeJsonLattice(const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700117
118 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
119 UrlDataManager& urlDataManager);
120 static bool flatten(const SkImage& image, Json::Value* target,
121 UrlDataManager& urlDataManager);
122 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
123 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800124
chudy@google.com902ebe52012-06-29 14:21:22 +0000125private:
robertphillips9bafc302015-02-13 11:13:00 -0800126 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000127 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000128};
129
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000130class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000131public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000132 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700133 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800134 static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000135
136private:
137 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000138};
139
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000140class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000141public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000142 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700143 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800144 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
145 static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800146
chudy@google.com902ebe52012-06-29 14:21:22 +0000147private:
148 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000149
150 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000151};
152
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000153class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000154public:
Mike Reedc1f77742016-12-09 09:00:50 -0500155 SkClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700156 void execute(SkCanvas* canvas) const override;
157 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800158 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
159 static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800160
chudy@google.com902ebe52012-06-29 14:21:22 +0000161private:
Mike Reedc1f77742016-12-09 09:00:50 -0500162 SkPath fPath;
163 SkClipOp fOp;
164 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000165
166 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000167};
168
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000169class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000170public:
Mike Reedc1f77742016-12-09 09:00:50 -0500171 SkClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700172 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800173 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
174 static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800175
chudy@google.com902ebe52012-06-29 14:21:22 +0000176private:
Mike Reedc1f77742016-12-09 09:00:50 -0500177 SkRegion fRegion;
178 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000179
180 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000181};
182
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000183class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000184public:
Mike Reedc1f77742016-12-09 09:00:50 -0500185 SkClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700186 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800187 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
188 static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000189
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000190 const SkRect& rect() const { return fRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500191 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000192 bool doAA() const { return fDoAA; }
193
chudy@google.com902ebe52012-06-29 14:21:22 +0000194private:
Mike Reedc1f77742016-12-09 09:00:50 -0500195 SkRect fRect;
196 SkClipOp fOp;
197 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000198
199 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000200};
201
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000202class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000203public:
Mike Reedc1f77742016-12-09 09:00:50 -0500204 SkClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700205 void execute(SkCanvas* canvas) const override;
206 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800207 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
208 static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000209
210 const SkRRect& rrect() const { return fRRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500211 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000212 bool doAA() const { return fDoAA; }
213
robertphillips@google.com67baba42013-01-02 20:20:31 +0000214private:
Mike Reedc1f77742016-12-09 09:00:50 -0500215 SkRRect fRRect;
216 SkClipOp fOp;
217 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000218
219 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000220};
221
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000222class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000223public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000224 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700225 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800226 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
227 static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800228
chudy@google.com902ebe52012-06-29 14:21:22 +0000229private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000230 SkMatrix fMatrix;
231
232 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000233};
234
reed97660cc2016-06-28 18:54:19 -0700235class SkDrawAnnotationCommand : public SkDrawCommand {
236public:
237 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
238 void execute(SkCanvas* canvas) const override;
239 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
240 static SkDrawAnnotationCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
241
242private:
243 SkRect fRect;
244 SkString fKey;
245 sk_sp<SkData> fValue;
246
247 typedef SkDrawCommand INHERITED;
248};
249
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000250class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000251public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000252 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000253 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700254 void execute(SkCanvas* canvas) const override;
255 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800256 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
257 static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800258
chudy@google.com902ebe52012-06-29 14:21:22 +0000259private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000260 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000261 SkScalar fLeft;
262 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000263 SkPaint fPaint;
264 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000265
266 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000267};
268
Brian Osman78a76482018-05-18 16:59:13 -0400269class SkDrawBitmapLatticeCommand : public SkDrawCommand {
270public:
271 SkDrawBitmapLatticeCommand(const SkBitmap& bitmap, const SkCanvas::Lattice& lattice,
272 const SkRect& dst, const SkPaint* paint);
273 void execute(SkCanvas* canvas) const override;
274 bool render(SkCanvas* canvas) const override;
275 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
276 static SkDrawBitmapLatticeCommand* fromJSON(Json::Value& command,
277 UrlDataManager& urlDataManager);
278
279private:
280 SkBitmap fBitmap;
281 SkCanvas::Lattice fLattice;
282 SkRect fDst;
283 SkTLazy<SkPaint> fPaint;
284
285 typedef SkDrawCommand INHERITED;
286};
287
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000288class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000289public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000290 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000291 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700292 void execute(SkCanvas* canvas) const override;
293 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800294 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
295 static SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800296
chudy@google.com902ebe52012-06-29 14:21:22 +0000297private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000298 SkBitmap fBitmap;
299 SkIRect fCenter;
300 SkRect fDst;
301 SkPaint fPaint;
302 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000303
304 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000305};
306
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000307class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000308public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000309 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000310 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700311 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700312 void execute(SkCanvas* canvas) const override;
313 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800314 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
315 static SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000316
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000317 const SkBitmap& bitmap() const { return fBitmap; }
318
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000319 // The non-const 'paint' method allows modification of this object's
320 // SkPaint. For this reason the ctor and setPaint method make a local copy.
321 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
322 // (since only an SkPaint* is passed into the ctor).
323 const SkPaint* paint() const { return fPaintPtr; }
324 SkPaint* paint() { return fPaintPtr; }
325
326 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
327
halcanary96fcdcc2015-08-27 07:41:13 -0700328 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000329 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000330
331 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000332 void setDstRect(const SkRect& dst) { fDst = dst; }
333
reeda5517e22015-07-14 10:54:12 -0700334 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
335 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000336
chudy@google.com902ebe52012-06-29 14:21:22 +0000337private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000338 SkBitmap fBitmap;
339 SkRect fSrc;
340 SkRect fDst;
341 SkPaint fPaint;
342 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700343 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000344
345 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000346};
347
fmalita651c9202015-07-22 10:23:01 -0700348class SkDrawImageCommand : public SkDrawCommand {
349public:
350 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
351 void execute(SkCanvas* canvas) const override;
352 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800353 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
354 static SkDrawImageCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800355
fmalita651c9202015-07-22 10:23:01 -0700356private:
Hal Canary1b612a82016-11-03 16:26:13 -0400357 sk_sp<const SkImage> fImage;
358 SkScalar fLeft;
359 SkScalar fTop;
360 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700361
362 typedef SkDrawCommand INHERITED;
363};
364
Stan Ilievac42aeb2017-01-12 16:20:50 -0500365class SkDrawImageLatticeCommand : public SkDrawCommand {
366public:
367 SkDrawImageLatticeCommand(const SkImage* image, const SkCanvas::Lattice& lattice,
368 const SkRect& dst, const SkPaint* paint);
369 void execute(SkCanvas* canvas) const override;
370 bool render(SkCanvas* canvas) const override;
371 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400372 static SkDrawImageLatticeCommand* fromJSON(Json::Value& command,
373 UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500374
375private:
376 sk_sp<const SkImage> fImage;
377 SkCanvas::Lattice fLattice;
378 SkRect fDst;
379 SkTLazy<SkPaint> fPaint;
380
381 typedef SkDrawCommand INHERITED;
382};
383
Brian Osmanc25e2692018-03-12 10:57:28 -0400384class SkDrawImageNineCommand : public SkDrawCommand {
385public:
386 SkDrawImageNineCommand(const SkImage* image, const SkIRect& center,
387 const SkRect& dst, const SkPaint* paint);
388 void execute(SkCanvas* canvas) const override;
389 bool render(SkCanvas* canvas) const override;
390 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
391 static SkDrawImageNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
392
393private:
394 sk_sp<const SkImage> fImage;
395 SkIRect fCenter;
396 SkRect fDst;
397 SkPaint fPaint;
398 SkPaint* fPaintPtr;
399
400 typedef SkDrawCommand INHERITED;
401};
402
fmalita651c9202015-07-22 10:23:01 -0700403class SkDrawImageRectCommand : public SkDrawCommand {
404public:
405 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
406 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
407 void execute(SkCanvas* canvas) const override;
408 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800409 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
410 static SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800411
fmalita651c9202015-07-22 10:23:01 -0700412private:
Hal Canary1b612a82016-11-03 16:26:13 -0400413 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700414 SkTLazy<SkRect> fSrc;
415 SkRect fDst;
416 SkTLazy<SkPaint> fPaint;
417 SkCanvas::SrcRectConstraint fConstraint;
418
419 typedef SkDrawCommand INHERITED;
420};
421
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000422class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000423public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000424 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700425 void execute(SkCanvas* canvas) const override;
426 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800427 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
428 static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800429
robertphillips@google.com67baba42013-01-02 20:20:31 +0000430private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000431 SkRect fOval;
432 SkPaint fPaint;
433
434 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000435};
436
bsalomonac3aa242016-08-19 11:25:19 -0700437class SkDrawArcCommand : public SkDrawCommand {
438public:
439 SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
440 const SkPaint& paint);
441 void execute(SkCanvas* canvas) const override;
442 bool render(SkCanvas* canvas) const override;
443 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
444 static SkDrawArcCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
445
446private:
447 SkRect fOval;
448 SkScalar fStartAngle;
449 SkScalar fSweepAngle;
450 bool fUseCenter;
451 SkPaint fPaint;
452
453 typedef SkDrawCommand INHERITED;
454};
455
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000456class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000457public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000458 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700459 void execute(SkCanvas* canvas) const override;
460 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800461 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
462 static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800463
chudy@google.com902ebe52012-06-29 14:21:22 +0000464private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000465 SkPaint fPaint;
466
467 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000468};
469
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000470class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000471public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000472 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700473 void execute(SkCanvas* canvas) const override;
474 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800475 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
476 static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000477
chudy@google.com902ebe52012-06-29 14:21:22 +0000478private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000479 SkPath fPath;
480 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000481
482 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000483};
484
fmalita160ebb22015-04-01 20:58:37 -0700485class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000486public:
fmalita160ebb22015-04-01 20:58:37 -0700487 SkBeginDrawPictureCommand(const SkPicture* picture,
488 const SkMatrix* matrix,
489 const SkPaint* paint);
490
mtklein36352bf2015-03-25 18:17:31 -0700491 void execute(SkCanvas* canvas) const override;
492 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000493
chudy@google.com902ebe52012-06-29 14:21:22 +0000494private:
Hal Canary1b612a82016-11-03 16:26:13 -0400495 sk_sp<const SkPicture> fPicture;
496 SkTLazy<SkMatrix> fMatrix;
497 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700498
499 typedef SkDrawCommand INHERITED;
500};
501
502class SkEndDrawPictureCommand : public SkDrawCommand {
503public:
504 SkEndDrawPictureCommand(bool restore);
505
506 void execute(SkCanvas* canvas) const override;
507
508private:
509 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000510
511 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000512};
513
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000514class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000515public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000516 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000517 const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400518 ~SkDrawPointsCommand() override { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700519 void execute(SkCanvas* canvas) const override;
520 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800521 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
522 static SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800523
chudy@google.com902ebe52012-06-29 14:21:22 +0000524private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000525 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000526 size_t fCount;
527 SkPoint* fPts;
528 SkPaint fPaint;
529
530 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000531};
532
Brian Osmanc25e2692018-03-12 10:57:28 -0400533class SkDrawRegionCommand : public SkDrawCommand {
534public:
535 SkDrawRegionCommand(const SkRegion& region, const SkPaint& paint);
536 void execute(SkCanvas* canvas) const override;
537 bool render(SkCanvas* canvas) const override;
538 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
539 static SkDrawRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
540
541private:
542 SkRegion fRegion;
543 SkPaint fPaint;
544
545 typedef SkDrawCommand INHERITED;
546};
547
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000548class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000549public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000550 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000551 const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400552 ~SkDrawTextCommand() override { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700553 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800554 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
555 static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800556
chudy@google.com902ebe52012-06-29 14:21:22 +0000557private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000558 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000559 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000560 SkScalar fX;
561 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000562 SkPaint fPaint;
563
564 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000565};
566
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000567class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000568public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000569 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
570 const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400571 ~SkDrawPosTextCommand() override { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700572 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800573 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
574 static SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800575
chudy@google.com902ebe52012-06-29 14:21:22 +0000576private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000577 char* fText;
578 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000579 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000580 SkPaint fPaint;
581
582 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000583};
584
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000585class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000586public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000587 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
588 const SkMatrix* matrix, const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400589 ~SkDrawTextOnPathCommand() override { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700590 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800591 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
592 static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800593
chudy@google.com902ebe52012-06-29 14:21:22 +0000594private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000595 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000596 size_t fByteLength;
597 SkPath fPath;
598 SkMatrix fMatrix;
599 SkPaint fPaint;
600
601 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000602};
603
reed45561a02016-07-07 12:47:17 -0700604class SkDrawTextRSXformCommand : public SkDrawCommand {
605public:
606 SkDrawTextRSXformCommand(const void* text, size_t byteLength, const SkRSXform[],
607 const SkRect*, const SkPaint& paint);
608 ~SkDrawTextRSXformCommand() override { delete[] fText; delete[] fXform; }
609 void execute(SkCanvas* canvas) const override;
610 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
611 static SkDrawTextRSXformCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
612
613private:
614 char* fText;
615 size_t fByteLength;
616 SkRSXform* fXform;
617 SkRect* fCull;
618 SkRect fCullStorage;
619 SkPaint fPaint;
620
621 typedef SkDrawCommand INHERITED;
622};
623
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000624class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000625public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000626 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
627 SkScalar constY, const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400628 ~SkDrawPosTextHCommand() override { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700629 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800630 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
631 static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800632
chudy@google.com902ebe52012-06-29 14:21:22 +0000633private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000634 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000635 char* fText;
636 size_t fByteLength;
637 SkScalar fConstY;
638 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000639
640 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000641};
642
fmalitab7425172014-08-26 07:56:44 -0700643class SkDrawTextBlobCommand : public SkDrawCommand {
644public:
fmalita37283c22016-09-13 10:00:23 -0700645 SkDrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700646
mtklein36352bf2015-03-25 18:17:31 -0700647 void execute(SkCanvas* canvas) const override;
648 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800649 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
650 static SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
fmalitab7425172014-08-26 07:56:44 -0700651
652private:
fmalita37283c22016-09-13 10:00:23 -0700653 sk_sp<SkTextBlob> fBlob;
654 SkScalar fXPos;
655 SkScalar fYPos;
656 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700657
658 typedef SkDrawCommand INHERITED;
659};
660
robertphillips9bafc302015-02-13 11:13:00 -0800661class SkDrawPatchCommand : public SkDrawCommand {
662public:
663 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
Mike Reed7d954ad2016-10-28 15:42:34 -0400664 const SkPoint texCoords[4], SkBlendMode bmode,
robertphillips9bafc302015-02-13 11:13:00 -0800665 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700666 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800667 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
668 static SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips9bafc302015-02-13 11:13:00 -0800669
670private:
671 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800672 SkColor* fColorsPtr;
673 SkColor fColors[4];
674 SkPoint* fTexCoordsPtr;
675 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400676 SkBlendMode fBlendMode;
robertphillips9bafc302015-02-13 11:13:00 -0800677 SkPaint fPaint;
678
679 typedef SkDrawCommand INHERITED;
680};
681
682
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000683class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000684public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000685 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700686 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800687 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
688 static SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000689
robertphillips@google.com91217d02013-03-17 18:33:46 +0000690 const SkRect& rect() const { return fRect; }
691 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000692private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000693 SkRect fRect;
694 SkPaint fPaint;
695
696 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000697};
698
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000699class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000700public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000701 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700702 void execute(SkCanvas* canvas) const override;
703 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800704 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
705 static SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800706
robertphillips@google.com67baba42013-01-02 20:20:31 +0000707private:
708 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000709 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000710
711 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000712};
713
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000714class SkDrawDRRectCommand : public SkDrawCommand {
715public:
716 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
717 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700718 void execute(SkCanvas* canvas) const override;
719 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800720 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
721 static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800722
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000723private:
724 SkRRect fOuter;
725 SkRRect fInner;
726 SkPaint fPaint;
727
728 typedef SkDrawCommand INHERITED;
729};
730
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000731class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000732public:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400733 SkDrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
734
mtklein36352bf2015-03-25 18:17:31 -0700735 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800736
chudy@google.com902ebe52012-06-29 14:21:22 +0000737private:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400738 sk_sp<SkVertices> fVertices;
739 SkBlendMode fBlendMode;
740 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000741
742 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000743};
744
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000745class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000746public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400747 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700748 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800749 static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800750
chudy@google.com902ebe52012-06-29 14:21:22 +0000751private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000752 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000753};
754
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000755class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000756public:
reed4960eee2015-12-18 07:09:18 -0800757 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
Brian Salomond3b65972017-03-22 12:05:03 -0400758 ~SkSaveLayerCommand() override;
mtklein36352bf2015-03-25 18:17:31 -0700759 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800760 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
761 static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000762
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000763 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000764
chudy@google.com902ebe52012-06-29 14:21:22 +0000765private:
ethannicholas50a8dd02016-02-10 05:40:46 -0800766 SkRect fBounds;
767 SkPaint fPaint;
768 SkPaint* fPaintPtr;
769 const SkImageFilter* fBackdrop;
770 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000771
772 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000773};
774
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000775class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000776public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000777 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700778 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800779 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
780 static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800781
chudy@google.com902ebe52012-06-29 14:21:22 +0000782private:
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000783 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000784
785 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000786};
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400787
788class SkDrawShadowCommand : public SkDrawCommand {
789public:
790 SkDrawShadowCommand(const SkPath& path, const SkDrawShadowRec& rec);
791 void execute(SkCanvas* canvas) const override;
792 bool render(SkCanvas* canvas) const override;
793 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
794 static SkDrawShadowCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
795
796private:
797 SkPath fPath;
798 SkDrawShadowRec fShadowRec;
799
800 typedef SkDrawCommand INHERITED;
801};
chudy@google.com902ebe52012-06-29 14:21:22 +0000802#endif
vjiaoblacke6f5d562016-08-25 06:30:23 -0700803