blob: d2eee9b63bd86a94a1c9da59f794b7bd2a7191ec [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"
Mike Reed086a4272017-07-18 10:53:11 -040013#include "SkFlattenable.h"
bungemand3ebb482015-08-05 13:57:49 -070014#include "SkTLazy.h"
15#include "SkPath.h"
Mike Reed267be7f2017-02-13 09:32:54 -050016#include "SkRegion.h"
bungemand3ebb482015-08-05 13:57:49 -070017#include "SkRRect.h"
reed45561a02016-07-07 12:47:17 -070018#include "SkRSXform.h"
robertphillips@google.com0a4805e2013-05-29 13:24:23 +000019#include "SkString.h"
bungemand3ebb482015-08-05 13:57:49 -070020#include "SkTDArray.h"
Mike Reedfed9cfd2017-03-17 12:09:04 -040021#include "SkVertices.h"
ethannicholas50a8dd02016-02-10 05:40:46 -080022#include "SkJSONCPP.h"
ethannicholasf62a8b72016-02-11 10:35:21 -080023#include "UrlDataManager.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000024
Mike Klein0f61faa2016-10-11 16:26:57 -040025class SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000026public:
robertphillips9bafc302015-02-13 11:13:00 -080027 enum OpType {
fmalita160ebb22015-04-01 20:58:37 -070028 kBeginDrawPicture_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040029 kClear_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080030 kClipPath_OpType,
31 kClipRegion_OpType,
32 kClipRect_OpType,
33 kClipRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080034 kConcat_OpType,
reed97660cc2016-06-28 18:54:19 -070035 kDrawAnnotation_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080036 kDrawBitmap_OpType,
37 kDrawBitmapNine_OpType,
38 kDrawBitmapRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080039 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070040 kDrawImage_OpType,
Stan Ilievac42aeb2017-01-12 16:20:50 -050041 kDrawImageLattice_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040042 kDrawImageNine_OpType,
fmalita651c9202015-07-22 10:23:01 -070043 kDrawImageRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080044 kDrawOval_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040045 kDrawArc_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080046 kDrawPaint_OpType,
47 kDrawPatch_OpType,
48 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080049 kDrawPoints_OpType,
50 kDrawPosText_OpType,
51 kDrawPosTextH_OpType,
52 kDrawRect_OpType,
53 kDrawRRect_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040054 kDrawRegion_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080055 kDrawText_OpType,
56 kDrawTextBlob_OpType,
57 kDrawTextOnPath_OpType,
reed45561a02016-07-07 12:47:17 -070058 kDrawTextRSXform_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080059 kDrawVertices_OpType,
fmalita160ebb22015-04-01 20:58:37 -070060 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080061 kRestore_OpType,
62 kSave_OpType,
63 kSaveLayer_OpType,
64 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080065
Jim Van Verth343fe492017-05-02 16:49:24 -040066 kLast_OpType = kSetMatrix_OpType
robertphillips9bafc302015-02-13 11:13:00 -080067 };
68
69 static const int kOpTypeCount = kLast_OpType + 1;
70
halcanarya73d76a2016-10-17 13:19:02 -070071 static void WritePNG(const uint8_t* rgba, unsigned width, unsigned height,
msaretta5cf4f42016-06-30 10:06:51 -070072 SkWStream& out, bool isOpaque);
ethannicholasf67531f2016-03-21 10:19:39 -070073
robertphillips9bafc302015-02-13 11:13:00 -080074 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000075
76 virtual ~SkDrawCommand();
77
fmalita8c89c522014-11-08 16:18:56 -080078 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000079
fmalita8c89c522014-11-08 16:18:56 -080080 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080081 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000082 }
83
chudy@google.com0b5bbb02012-07-31 19:55:32 +000084 bool isVisible() const {
85 return fVisible;
86 }
87
88 void setVisible(bool toggle) {
89 fVisible = toggle;
90 }
chudy@google.com902ebe52012-06-29 14:21:22 +000091
fmalita8c89c522014-11-08 16:18:56 -080092 const SkTDArray<SkString*>* Info() const { return &fInfo; }
93 virtual void execute(SkCanvas*) const = 0;
94 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070095
fmalita8c89c522014-11-08 16:18:56 -080096 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070097
mtkleinf0f14112014-12-12 08:46:25 -080098 // The next "active" system is only used by save, saveLayer, and restore.
99 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000100 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000101 // saves just return a kPushLayer action but don't track active state
102 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +0000103 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000104 enum Action {
105 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +0000106 kPopLayer_Action,
107 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000108 };
109 virtual Action action() const { return kNone_Action; }
110 virtual void setActive(bool active) {}
111 virtual bool active() const { return false; }
112
robertphillips9bafc302015-02-13 11:13:00 -0800113 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000114
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000115 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000116
ethannicholasf62a8b72016-02-11 10:35:21 -0800117 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -0800118
119 /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
120 * is the caller's responsibility to delete this object. This method may return null if an error
121 * occurs.
122 */
ethannicholasf62a8b72016-02-11 10:35:21 -0800123 static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800124
robertphillips9bafc302015-02-13 11:13:00 -0800125 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000126
joshualittbd724132016-03-03 11:39:38 -0800127 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -0700128 static Json::Value MakeJsonColor(const SkColor color);
brianosman97bbf822016-09-25 13:15:58 -0700129 static Json::Value MakeJsonColor4f(const SkColor4f& color);
brianosmanfad98562016-05-04 11:06:28 -0700130 static Json::Value MakeJsonPoint(const SkPoint& point);
131 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
132 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800133 static Json::Value MakeJsonIRect(const SkIRect&);
134 static Json::Value MakeJsonMatrix(const SkMatrix&);
vjiaoblacke5de1302016-07-13 14:05:28 -0700135 static Json::Value MakeJsonScalar(SkScalar);
brianosmanfad98562016-05-04 11:06:28 -0700136 static Json::Value MakeJsonPath(const SkPath& path);
137 static Json::Value MakeJsonRegion(const SkRegion& region);
138 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500139 static Json::Value MakeJsonLattice(const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700140
141 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
142 UrlDataManager& urlDataManager);
143 static bool flatten(const SkImage& image, Json::Value* target,
144 UrlDataManager& urlDataManager);
145 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
146 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800147
chudy@google.com902ebe52012-06-29 14:21:22 +0000148protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000149 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000150
151private:
robertphillips9bafc302015-02-13 11:13:00 -0800152 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000153 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000154};
155
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000156class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000157public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000158 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700159 void execute(SkCanvas* canvas) const override;
160 Action action() const override { return kPopLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800161 static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000162
163private:
164 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000165};
166
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000167class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000168public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000169 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700170 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800171 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
172 static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800173
chudy@google.com902ebe52012-06-29 14:21:22 +0000174private:
175 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000176
177 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000178};
179
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000180class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000181public:
Mike Reedc1f77742016-12-09 09:00:50 -0500182 SkClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700183 void execute(SkCanvas* canvas) const override;
184 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800185 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
186 static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800187
chudy@google.com902ebe52012-06-29 14:21:22 +0000188private:
Mike Reedc1f77742016-12-09 09:00:50 -0500189 SkPath fPath;
190 SkClipOp fOp;
191 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000192
193 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000194};
195
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000196class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000197public:
Mike Reedc1f77742016-12-09 09:00:50 -0500198 SkClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700199 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800200 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
201 static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800202
chudy@google.com902ebe52012-06-29 14:21:22 +0000203private:
Mike Reedc1f77742016-12-09 09:00:50 -0500204 SkRegion fRegion;
205 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000206
207 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000208};
209
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000210class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000211public:
Mike Reedc1f77742016-12-09 09:00:50 -0500212 SkClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700213 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800214 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
215 static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000216
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000217 const SkRect& rect() const { return fRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500218 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000219 bool doAA() const { return fDoAA; }
220
chudy@google.com902ebe52012-06-29 14:21:22 +0000221private:
Mike Reedc1f77742016-12-09 09:00:50 -0500222 SkRect fRect;
223 SkClipOp fOp;
224 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000225
226 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000227};
228
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000229class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000230public:
Mike Reedc1f77742016-12-09 09:00:50 -0500231 SkClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700232 void execute(SkCanvas* canvas) const override;
233 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800234 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
235 static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000236
237 const SkRRect& rrect() const { return fRRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500238 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000239 bool doAA() const { return fDoAA; }
240
robertphillips@google.com67baba42013-01-02 20:20:31 +0000241private:
Mike Reedc1f77742016-12-09 09:00:50 -0500242 SkRRect fRRect;
243 SkClipOp fOp;
244 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000245
246 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000247};
248
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000249class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000250public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000251 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700252 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800253 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
254 static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800255
chudy@google.com902ebe52012-06-29 14:21:22 +0000256private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000257 SkMatrix fMatrix;
258
259 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000260};
261
reed97660cc2016-06-28 18:54:19 -0700262class SkDrawAnnotationCommand : public SkDrawCommand {
263public:
264 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
265 void execute(SkCanvas* canvas) const override;
266 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
267 static SkDrawAnnotationCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
268
269private:
270 SkRect fRect;
271 SkString fKey;
272 sk_sp<SkData> fValue;
273
274 typedef SkDrawCommand INHERITED;
275};
276
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000277class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000278public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000279 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000280 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700281 void execute(SkCanvas* canvas) const override;
282 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800283 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
284 static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800285
chudy@google.com902ebe52012-06-29 14:21:22 +0000286private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000287 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000288 SkScalar fLeft;
289 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000290 SkPaint fPaint;
291 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000292
293 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000294};
295
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000296class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000297public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000298 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000299 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700300 void execute(SkCanvas* canvas) const override;
301 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800302 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
303 static SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800304
chudy@google.com902ebe52012-06-29 14:21:22 +0000305private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000306 SkBitmap fBitmap;
307 SkIRect fCenter;
308 SkRect fDst;
309 SkPaint fPaint;
310 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000311
312 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000313};
314
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000315class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000316public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000317 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000318 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700319 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700320 void execute(SkCanvas* canvas) const override;
321 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800322 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
323 static SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000324
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000325 const SkBitmap& bitmap() const { return fBitmap; }
326
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000327 // The non-const 'paint' method allows modification of this object's
328 // SkPaint. For this reason the ctor and setPaint method make a local copy.
329 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
330 // (since only an SkPaint* is passed into the ctor).
331 const SkPaint* paint() const { return fPaintPtr; }
332 SkPaint* paint() { return fPaintPtr; }
333
334 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
335
halcanary96fcdcc2015-08-27 07:41:13 -0700336 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000337 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000338
339 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000340 void setDstRect(const SkRect& dst) { fDst = dst; }
341
reeda5517e22015-07-14 10:54:12 -0700342 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
343 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000344
chudy@google.com902ebe52012-06-29 14:21:22 +0000345private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000346 SkBitmap fBitmap;
347 SkRect fSrc;
348 SkRect fDst;
349 SkPaint fPaint;
350 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700351 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000352
353 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000354};
355
fmalita651c9202015-07-22 10:23:01 -0700356class SkDrawImageCommand : public SkDrawCommand {
357public:
358 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
359 void execute(SkCanvas* canvas) const override;
360 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800361 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
362 static SkDrawImageCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800363
fmalita651c9202015-07-22 10:23:01 -0700364private:
Hal Canary1b612a82016-11-03 16:26:13 -0400365 sk_sp<const SkImage> fImage;
366 SkScalar fLeft;
367 SkScalar fTop;
368 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700369
370 typedef SkDrawCommand INHERITED;
371};
372
Stan Ilievac42aeb2017-01-12 16:20:50 -0500373class SkDrawImageLatticeCommand : public SkDrawCommand {
374public:
375 SkDrawImageLatticeCommand(const SkImage* image, const SkCanvas::Lattice& lattice,
376 const SkRect& dst, const SkPaint* paint);
377 void execute(SkCanvas* canvas) const override;
378 bool render(SkCanvas* canvas) const override;
379 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400380 static SkDrawImageLatticeCommand* fromJSON(Json::Value& command,
381 UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500382
383private:
384 sk_sp<const SkImage> fImage;
385 SkCanvas::Lattice fLattice;
386 SkRect fDst;
387 SkTLazy<SkPaint> fPaint;
388
389 typedef SkDrawCommand INHERITED;
390};
391
Brian Osmanc25e2692018-03-12 10:57:28 -0400392class SkDrawImageNineCommand : public SkDrawCommand {
393public:
394 SkDrawImageNineCommand(const SkImage* image, const SkIRect& center,
395 const SkRect& dst, 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;
399 static SkDrawImageNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
400
401private:
402 sk_sp<const SkImage> fImage;
403 SkIRect fCenter;
404 SkRect fDst;
405 SkPaint fPaint;
406 SkPaint* fPaintPtr;
407
408 typedef SkDrawCommand INHERITED;
409};
410
fmalita651c9202015-07-22 10:23:01 -0700411class SkDrawImageRectCommand : public SkDrawCommand {
412public:
413 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
414 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
415 void execute(SkCanvas* canvas) const override;
416 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800417 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
418 static SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800419
fmalita651c9202015-07-22 10:23:01 -0700420private:
Hal Canary1b612a82016-11-03 16:26:13 -0400421 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700422 SkTLazy<SkRect> fSrc;
423 SkRect fDst;
424 SkTLazy<SkPaint> fPaint;
425 SkCanvas::SrcRectConstraint fConstraint;
426
427 typedef SkDrawCommand INHERITED;
428};
429
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000430class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000431public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000432 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700433 void execute(SkCanvas* canvas) const override;
434 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800435 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
436 static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800437
robertphillips@google.com67baba42013-01-02 20:20:31 +0000438private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000439 SkRect fOval;
440 SkPaint fPaint;
441
442 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000443};
444
bsalomonac3aa242016-08-19 11:25:19 -0700445class SkDrawArcCommand : public SkDrawCommand {
446public:
447 SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
448 const SkPaint& paint);
449 void execute(SkCanvas* canvas) const override;
450 bool render(SkCanvas* canvas) const override;
451 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
452 static SkDrawArcCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
453
454private:
455 SkRect fOval;
456 SkScalar fStartAngle;
457 SkScalar fSweepAngle;
458 bool fUseCenter;
459 SkPaint fPaint;
460
461 typedef SkDrawCommand INHERITED;
462};
463
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000464class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000465public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000466 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700467 void execute(SkCanvas* canvas) const override;
468 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800469 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
470 static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800471
chudy@google.com902ebe52012-06-29 14:21:22 +0000472private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000473 SkPaint fPaint;
474
475 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000476};
477
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000478class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000479public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000480 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700481 void execute(SkCanvas* canvas) const override;
482 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800483 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
484 static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000485
chudy@google.com902ebe52012-06-29 14:21:22 +0000486private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000487 SkPath fPath;
488 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000489
490 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000491};
492
fmalita160ebb22015-04-01 20:58:37 -0700493class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000494public:
fmalita160ebb22015-04-01 20:58:37 -0700495 SkBeginDrawPictureCommand(const SkPicture* picture,
496 const SkMatrix* matrix,
497 const SkPaint* paint);
498
mtklein36352bf2015-03-25 18:17:31 -0700499 void execute(SkCanvas* canvas) const override;
500 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000501
chudy@google.com902ebe52012-06-29 14:21:22 +0000502private:
Hal Canary1b612a82016-11-03 16:26:13 -0400503 sk_sp<const SkPicture> fPicture;
504 SkTLazy<SkMatrix> fMatrix;
505 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700506
507 typedef SkDrawCommand INHERITED;
508};
509
510class SkEndDrawPictureCommand : public SkDrawCommand {
511public:
512 SkEndDrawPictureCommand(bool restore);
513
514 void execute(SkCanvas* canvas) const override;
515
516private:
517 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000518
519 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000520};
521
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000522class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000523public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000524 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000525 const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400526 ~SkDrawPointsCommand() override { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700527 void execute(SkCanvas* canvas) const override;
528 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800529 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
530 static SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800531
chudy@google.com902ebe52012-06-29 14:21:22 +0000532private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000533 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000534 size_t fCount;
535 SkPoint* fPts;
536 SkPaint fPaint;
537
538 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000539};
540
Brian Osmanc25e2692018-03-12 10:57:28 -0400541class SkDrawRegionCommand : public SkDrawCommand {
542public:
543 SkDrawRegionCommand(const SkRegion& region, const SkPaint& paint);
544 void execute(SkCanvas* canvas) const override;
545 bool render(SkCanvas* canvas) const override;
546 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
547 static SkDrawRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
548
549private:
550 SkRegion fRegion;
551 SkPaint fPaint;
552
553 typedef SkDrawCommand INHERITED;
554};
555
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000556class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000557public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000558 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000559 const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400560 ~SkDrawTextCommand() override { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700561 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800562 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
563 static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800564
chudy@google.com902ebe52012-06-29 14:21:22 +0000565private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000566 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000567 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000568 SkScalar fX;
569 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000570 SkPaint fPaint;
571
572 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000573};
574
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000575class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000576public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000577 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
578 const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400579 ~SkDrawPosTextCommand() override { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700580 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800581 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
582 static SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800583
chudy@google.com902ebe52012-06-29 14:21:22 +0000584private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000585 char* fText;
586 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000587 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000588 SkPaint fPaint;
589
590 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000591};
592
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000593class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000594public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000595 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
596 const SkMatrix* matrix, const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400597 ~SkDrawTextOnPathCommand() override { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700598 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800599 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
600 static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800601
chudy@google.com902ebe52012-06-29 14:21:22 +0000602private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000603 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000604 size_t fByteLength;
605 SkPath fPath;
606 SkMatrix fMatrix;
607 SkPaint fPaint;
608
609 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000610};
611
reed45561a02016-07-07 12:47:17 -0700612class SkDrawTextRSXformCommand : public SkDrawCommand {
613public:
614 SkDrawTextRSXformCommand(const void* text, size_t byteLength, const SkRSXform[],
615 const SkRect*, const SkPaint& paint);
616 ~SkDrawTextRSXformCommand() override { delete[] fText; delete[] fXform; }
617 void execute(SkCanvas* canvas) const override;
618 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
619 static SkDrawTextRSXformCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
620
621private:
622 char* fText;
623 size_t fByteLength;
624 SkRSXform* fXform;
625 SkRect* fCull;
626 SkRect fCullStorage;
627 SkPaint fPaint;
628
629 typedef SkDrawCommand INHERITED;
630};
631
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000632class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000633public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000634 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
635 SkScalar constY, const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400636 ~SkDrawPosTextHCommand() override { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700637 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800638 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
639 static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800640
chudy@google.com902ebe52012-06-29 14:21:22 +0000641private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000642 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000643 char* fText;
644 size_t fByteLength;
645 SkScalar fConstY;
646 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000647
648 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000649};
650
fmalitab7425172014-08-26 07:56:44 -0700651class SkDrawTextBlobCommand : public SkDrawCommand {
652public:
fmalita37283c22016-09-13 10:00:23 -0700653 SkDrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700654
mtklein36352bf2015-03-25 18:17:31 -0700655 void execute(SkCanvas* canvas) const override;
656 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800657 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
658 static SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
fmalitab7425172014-08-26 07:56:44 -0700659
660private:
fmalita37283c22016-09-13 10:00:23 -0700661 sk_sp<SkTextBlob> fBlob;
662 SkScalar fXPos;
663 SkScalar fYPos;
664 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700665
666 typedef SkDrawCommand INHERITED;
667};
668
robertphillips9bafc302015-02-13 11:13:00 -0800669class SkDrawPatchCommand : public SkDrawCommand {
670public:
671 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
Mike Reed7d954ad2016-10-28 15:42:34 -0400672 const SkPoint texCoords[4], SkBlendMode bmode,
robertphillips9bafc302015-02-13 11:13:00 -0800673 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700674 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800675 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
676 static SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips9bafc302015-02-13 11:13:00 -0800677
678private:
679 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800680 SkColor* fColorsPtr;
681 SkColor fColors[4];
682 SkPoint* fTexCoordsPtr;
683 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400684 SkBlendMode fBlendMode;
robertphillips9bafc302015-02-13 11:13:00 -0800685 SkPaint fPaint;
686
687 typedef SkDrawCommand INHERITED;
688};
689
690
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000691class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000692public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000693 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700694 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800695 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
696 static SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000697
robertphillips@google.com91217d02013-03-17 18:33:46 +0000698 const SkRect& rect() const { return fRect; }
699 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000700private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000701 SkRect fRect;
702 SkPaint fPaint;
703
704 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000705};
706
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000707class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000708public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000709 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700710 void execute(SkCanvas* canvas) const override;
711 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800712 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
713 static SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800714
robertphillips@google.com67baba42013-01-02 20:20:31 +0000715private:
716 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000717 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000718
719 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000720};
721
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000722class SkDrawDRRectCommand : public SkDrawCommand {
723public:
724 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
725 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700726 void execute(SkCanvas* canvas) const override;
727 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800728 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
729 static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800730
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000731private:
732 SkRRect fOuter;
733 SkRRect fInner;
734 SkPaint fPaint;
735
736 typedef SkDrawCommand INHERITED;
737};
738
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000739class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000740public:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400741 SkDrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
742
mtklein36352bf2015-03-25 18:17:31 -0700743 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800744
chudy@google.com902ebe52012-06-29 14:21:22 +0000745private:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400746 sk_sp<SkVertices> fVertices;
747 SkBlendMode fBlendMode;
748 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000749
750 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000751};
752
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000753class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000754public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400755 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700756 void execute(SkCanvas* canvas) const override;
757 Action action() const override { return kPushLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800758 static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800759
chudy@google.com902ebe52012-06-29 14:21:22 +0000760private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000761 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000762};
763
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000764class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000765public:
reed4960eee2015-12-18 07:09:18 -0800766 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
Brian Salomond3b65972017-03-22 12:05:03 -0400767 ~SkSaveLayerCommand() override;
mtklein36352bf2015-03-25 18:17:31 -0700768 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800769 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
770 static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
mtklein36352bf2015-03-25 18:17:31 -0700771 void vizExecute(SkCanvas* canvas) const override;
772 Action action() const override{ return kPushLayer_Action; }
773 void setActive(bool active) override { fActive = active; }
774 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000775
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000776 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000777
chudy@google.com902ebe52012-06-29 14:21:22 +0000778private:
ethannicholas50a8dd02016-02-10 05:40:46 -0800779 SkRect fBounds;
780 SkPaint fPaint;
781 SkPaint* fPaintPtr;
782 const SkImageFilter* fBackdrop;
783 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000784
reed4960eee2015-12-18 07:09:18 -0800785 bool fActive;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000786
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000787 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000788};
789
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000790class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000791public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000792 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700793 void setUserMatrix(const SkMatrix&) override;
794 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800795 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
796 static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800797
chudy@google.com902ebe52012-06-29 14:21:22 +0000798private:
robertphillips70171682014-10-16 14:28:28 -0700799 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000800 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000801
802 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000803};
chudy@google.com902ebe52012-06-29 14:21:22 +0000804#endif
vjiaoblacke6f5d562016-08-25 06:30:23 -0700805