blob: 257029c91314d4672ea7281a8b27d4dd3ae7288d [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,
38 kDrawBitmapNine_OpType,
39 kDrawBitmapRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080040 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070041 kDrawImage_OpType,
Stan Ilievac42aeb2017-01-12 16:20:50 -050042 kDrawImageLattice_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040043 kDrawImageNine_OpType,
fmalita651c9202015-07-22 10:23:01 -070044 kDrawImageRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080045 kDrawOval_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040046 kDrawArc_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080047 kDrawPaint_OpType,
48 kDrawPatch_OpType,
49 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080050 kDrawPoints_OpType,
51 kDrawPosText_OpType,
52 kDrawPosTextH_OpType,
53 kDrawRect_OpType,
54 kDrawRRect_OpType,
Brian Osmanc25e2692018-03-12 10:57:28 -040055 kDrawRegion_OpType,
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -040056 kDrawShadow_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080057 kDrawText_OpType,
58 kDrawTextBlob_OpType,
59 kDrawTextOnPath_OpType,
reed45561a02016-07-07 12:47:17 -070060 kDrawTextRSXform_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080061 kDrawVertices_OpType,
fmalita160ebb22015-04-01 20:58:37 -070062 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080063 kRestore_OpType,
64 kSave_OpType,
65 kSaveLayer_OpType,
66 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080067
Jim Van Verth343fe492017-05-02 16:49:24 -040068 kLast_OpType = kSetMatrix_OpType
robertphillips9bafc302015-02-13 11:13:00 -080069 };
70
71 static const int kOpTypeCount = kLast_OpType + 1;
72
halcanarya73d76a2016-10-17 13:19:02 -070073 static void WritePNG(const uint8_t* rgba, unsigned width, unsigned height,
msaretta5cf4f42016-06-30 10:06:51 -070074 SkWStream& out, bool isOpaque);
ethannicholasf67531f2016-03-21 10:19:39 -070075
robertphillips9bafc302015-02-13 11:13:00 -080076 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000077
Brian Osman255735e2018-04-06 14:51:42 -040078 virtual ~SkDrawCommand() {}
chudy@google.com902ebe52012-06-29 14:21:22 +000079
chudy@google.com0b5bbb02012-07-31 19:55:32 +000080 bool isVisible() const {
81 return fVisible;
82 }
83
84 void setVisible(bool toggle) {
85 fVisible = toggle;
86 }
chudy@google.com902ebe52012-06-29 14:21:22 +000087
fmalita8c89c522014-11-08 16:18:56 -080088 virtual void execute(SkCanvas*) const = 0;
chudy@google.com902ebe52012-06-29 14:21:22 +000089
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +000090 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +000091
ethannicholasf62a8b72016-02-11 10:35:21 -080092 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -080093
94 /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
95 * is the caller's responsibility to delete this object. This method may return null if an error
96 * occurs.
97 */
ethannicholasf62a8b72016-02-11 10:35:21 -080098 static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -080099
robertphillips9bafc302015-02-13 11:13:00 -0800100 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000101
joshualittbd724132016-03-03 11:39:38 -0800102 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -0700103 static Json::Value MakeJsonColor(const SkColor color);
brianosman97bbf822016-09-25 13:15:58 -0700104 static Json::Value MakeJsonColor4f(const SkColor4f& color);
brianosmanfad98562016-05-04 11:06:28 -0700105 static Json::Value MakeJsonPoint(const SkPoint& point);
106 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400107 static Json::Value MakeJsonPoint3(const SkPoint3& point);
brianosmanfad98562016-05-04 11:06:28 -0700108 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800109 static Json::Value MakeJsonIRect(const SkIRect&);
110 static Json::Value MakeJsonMatrix(const SkMatrix&);
vjiaoblacke5de1302016-07-13 14:05:28 -0700111 static Json::Value MakeJsonScalar(SkScalar);
brianosmanfad98562016-05-04 11:06:28 -0700112 static Json::Value MakeJsonPath(const SkPath& path);
113 static Json::Value MakeJsonRegion(const SkRegion& region);
114 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500115 static Json::Value MakeJsonLattice(const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700116
117 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
118 UrlDataManager& urlDataManager);
119 static bool flatten(const SkImage& image, Json::Value* target,
120 UrlDataManager& urlDataManager);
121 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
122 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800123
chudy@google.com902ebe52012-06-29 14:21:22 +0000124private:
robertphillips9bafc302015-02-13 11:13:00 -0800125 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000126 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000127};
128
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000129class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000130public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000131 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700132 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800133 static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000134
135private:
136 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000137};
138
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000139class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000140public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000141 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700142 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800143 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
144 static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800145
chudy@google.com902ebe52012-06-29 14:21:22 +0000146private:
147 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000148
149 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000150};
151
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000152class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000153public:
Mike Reedc1f77742016-12-09 09:00:50 -0500154 SkClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700155 void execute(SkCanvas* canvas) const override;
156 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800157 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
158 static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800159
chudy@google.com902ebe52012-06-29 14:21:22 +0000160private:
Mike Reedc1f77742016-12-09 09:00:50 -0500161 SkPath fPath;
162 SkClipOp fOp;
163 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000164
165 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000166};
167
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000168class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000169public:
Mike Reedc1f77742016-12-09 09:00:50 -0500170 SkClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700171 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800172 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
173 static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800174
chudy@google.com902ebe52012-06-29 14:21:22 +0000175private:
Mike Reedc1f77742016-12-09 09:00:50 -0500176 SkRegion fRegion;
177 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000178
179 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000180};
181
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000182class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000183public:
Mike Reedc1f77742016-12-09 09:00:50 -0500184 SkClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700185 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800186 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
187 static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000188
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000189 const SkRect& rect() const { return fRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500190 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000191 bool doAA() const { return fDoAA; }
192
chudy@google.com902ebe52012-06-29 14:21:22 +0000193private:
Mike Reedc1f77742016-12-09 09:00:50 -0500194 SkRect fRect;
195 SkClipOp fOp;
196 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000197
198 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000199};
200
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000201class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000202public:
Mike Reedc1f77742016-12-09 09:00:50 -0500203 SkClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700204 void execute(SkCanvas* canvas) const override;
205 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800206 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
207 static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000208
209 const SkRRect& rrect() const { return fRRect; }
Mike Reedc1f77742016-12-09 09:00:50 -0500210 SkClipOp op() const { return fOp; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000211 bool doAA() const { return fDoAA; }
212
robertphillips@google.com67baba42013-01-02 20:20:31 +0000213private:
Mike Reedc1f77742016-12-09 09:00:50 -0500214 SkRRect fRRect;
215 SkClipOp fOp;
216 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000217
218 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000219};
220
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000221class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000222public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000223 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700224 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800225 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
226 static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800227
chudy@google.com902ebe52012-06-29 14:21:22 +0000228private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000229 SkMatrix fMatrix;
230
231 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000232};
233
reed97660cc2016-06-28 18:54:19 -0700234class SkDrawAnnotationCommand : public SkDrawCommand {
235public:
236 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
237 void execute(SkCanvas* canvas) const override;
238 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
239 static SkDrawAnnotationCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
240
241private:
242 SkRect fRect;
243 SkString fKey;
244 sk_sp<SkData> fValue;
245
246 typedef SkDrawCommand INHERITED;
247};
248
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000249class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000250public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000251 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000252 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700253 void execute(SkCanvas* canvas) const override;
254 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800255 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
256 static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800257
chudy@google.com902ebe52012-06-29 14:21:22 +0000258private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000259 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000260 SkScalar fLeft;
261 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000262 SkPaint fPaint;
263 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000264
265 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000266};
267
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000268class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000269public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000270 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000271 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700272 void execute(SkCanvas* canvas) const override;
273 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800274 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
275 static SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800276
chudy@google.com902ebe52012-06-29 14:21:22 +0000277private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000278 SkBitmap fBitmap;
279 SkIRect fCenter;
280 SkRect fDst;
281 SkPaint fPaint;
282 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000283
284 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000285};
286
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000287class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000288public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000289 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000290 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700291 SkCanvas::SrcRectConstraint);
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 SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000296
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000297 const SkBitmap& bitmap() const { return fBitmap; }
298
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000299 // The non-const 'paint' method allows modification of this object's
300 // SkPaint. For this reason the ctor and setPaint method make a local copy.
301 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
302 // (since only an SkPaint* is passed into the ctor).
303 const SkPaint* paint() const { return fPaintPtr; }
304 SkPaint* paint() { return fPaintPtr; }
305
306 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
307
halcanary96fcdcc2015-08-27 07:41:13 -0700308 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000309 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000310
311 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000312 void setDstRect(const SkRect& dst) { fDst = dst; }
313
reeda5517e22015-07-14 10:54:12 -0700314 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
315 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000316
chudy@google.com902ebe52012-06-29 14:21:22 +0000317private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000318 SkBitmap fBitmap;
319 SkRect fSrc;
320 SkRect fDst;
321 SkPaint fPaint;
322 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700323 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000324
325 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000326};
327
fmalita651c9202015-07-22 10:23:01 -0700328class SkDrawImageCommand : public SkDrawCommand {
329public:
330 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
331 void execute(SkCanvas* canvas) const override;
332 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800333 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
334 static SkDrawImageCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800335
fmalita651c9202015-07-22 10:23:01 -0700336private:
Hal Canary1b612a82016-11-03 16:26:13 -0400337 sk_sp<const SkImage> fImage;
338 SkScalar fLeft;
339 SkScalar fTop;
340 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700341
342 typedef SkDrawCommand INHERITED;
343};
344
Stan Ilievac42aeb2017-01-12 16:20:50 -0500345class SkDrawImageLatticeCommand : public SkDrawCommand {
346public:
347 SkDrawImageLatticeCommand(const SkImage* image, const SkCanvas::Lattice& lattice,
348 const SkRect& dst, const SkPaint* paint);
349 void execute(SkCanvas* canvas) const override;
350 bool render(SkCanvas* canvas) const override;
351 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400352 static SkDrawImageLatticeCommand* fromJSON(Json::Value& command,
353 UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500354
355private:
356 sk_sp<const SkImage> fImage;
357 SkCanvas::Lattice fLattice;
358 SkRect fDst;
359 SkTLazy<SkPaint> fPaint;
360
361 typedef SkDrawCommand INHERITED;
362};
363
Brian Osmanc25e2692018-03-12 10:57:28 -0400364class SkDrawImageNineCommand : public SkDrawCommand {
365public:
366 SkDrawImageNineCommand(const SkImage* image, const SkIRect& center,
367 const SkRect& dst, const SkPaint* paint);
368 void execute(SkCanvas* canvas) const override;
369 bool render(SkCanvas* canvas) const override;
370 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
371 static SkDrawImageNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
372
373private:
374 sk_sp<const SkImage> fImage;
375 SkIRect fCenter;
376 SkRect fDst;
377 SkPaint fPaint;
378 SkPaint* fPaintPtr;
379
380 typedef SkDrawCommand INHERITED;
381};
382
fmalita651c9202015-07-22 10:23:01 -0700383class SkDrawImageRectCommand : public SkDrawCommand {
384public:
385 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
386 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
387 void execute(SkCanvas* canvas) const override;
388 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800389 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
390 static SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800391
fmalita651c9202015-07-22 10:23:01 -0700392private:
Hal Canary1b612a82016-11-03 16:26:13 -0400393 sk_sp<const SkImage> fImage;
fmalita651c9202015-07-22 10:23:01 -0700394 SkTLazy<SkRect> fSrc;
395 SkRect fDst;
396 SkTLazy<SkPaint> fPaint;
397 SkCanvas::SrcRectConstraint fConstraint;
398
399 typedef SkDrawCommand INHERITED;
400};
401
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000402class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000403public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000404 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700405 void execute(SkCanvas* canvas) const override;
406 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800407 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
408 static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800409
robertphillips@google.com67baba42013-01-02 20:20:31 +0000410private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000411 SkRect fOval;
412 SkPaint fPaint;
413
414 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000415};
416
bsalomonac3aa242016-08-19 11:25:19 -0700417class SkDrawArcCommand : public SkDrawCommand {
418public:
419 SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
420 const SkPaint& paint);
421 void execute(SkCanvas* canvas) const override;
422 bool render(SkCanvas* canvas) const override;
423 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
424 static SkDrawArcCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
425
426private:
427 SkRect fOval;
428 SkScalar fStartAngle;
429 SkScalar fSweepAngle;
430 bool fUseCenter;
431 SkPaint fPaint;
432
433 typedef SkDrawCommand INHERITED;
434};
435
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000436class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000437public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000438 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700439 void execute(SkCanvas* canvas) const override;
440 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800441 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
442 static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800443
chudy@google.com902ebe52012-06-29 14:21:22 +0000444private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000445 SkPaint fPaint;
446
447 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000448};
449
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000450class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000451public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000452 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700453 void execute(SkCanvas* canvas) const override;
454 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800455 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
456 static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000457
chudy@google.com902ebe52012-06-29 14:21:22 +0000458private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000459 SkPath fPath;
460 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000461
462 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000463};
464
fmalita160ebb22015-04-01 20:58:37 -0700465class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000466public:
fmalita160ebb22015-04-01 20:58:37 -0700467 SkBeginDrawPictureCommand(const SkPicture* picture,
468 const SkMatrix* matrix,
469 const SkPaint* paint);
470
mtklein36352bf2015-03-25 18:17:31 -0700471 void execute(SkCanvas* canvas) const override;
472 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000473
chudy@google.com902ebe52012-06-29 14:21:22 +0000474private:
Hal Canary1b612a82016-11-03 16:26:13 -0400475 sk_sp<const SkPicture> fPicture;
476 SkTLazy<SkMatrix> fMatrix;
477 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700478
479 typedef SkDrawCommand INHERITED;
480};
481
482class SkEndDrawPictureCommand : public SkDrawCommand {
483public:
484 SkEndDrawPictureCommand(bool restore);
485
486 void execute(SkCanvas* canvas) const override;
487
488private:
489 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000490
491 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000492};
493
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000494class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000495public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000496 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000497 const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400498 ~SkDrawPointsCommand() override { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700499 void execute(SkCanvas* canvas) const override;
500 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800501 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
502 static SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800503
chudy@google.com902ebe52012-06-29 14:21:22 +0000504private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000505 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000506 size_t fCount;
507 SkPoint* fPts;
508 SkPaint fPaint;
509
510 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000511};
512
Brian Osmanc25e2692018-03-12 10:57:28 -0400513class SkDrawRegionCommand : public SkDrawCommand {
514public:
515 SkDrawRegionCommand(const SkRegion& region, const SkPaint& paint);
516 void execute(SkCanvas* canvas) const override;
517 bool render(SkCanvas* canvas) const override;
518 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
519 static SkDrawRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
520
521private:
522 SkRegion fRegion;
523 SkPaint fPaint;
524
525 typedef SkDrawCommand INHERITED;
526};
527
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000528class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000529public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000530 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000531 const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400532 ~SkDrawTextCommand() override { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700533 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800534 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
535 static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800536
chudy@google.com902ebe52012-06-29 14:21:22 +0000537private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000538 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000539 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000540 SkScalar fX;
541 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000542 SkPaint fPaint;
543
544 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000545};
546
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000547class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000548public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000549 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
550 const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400551 ~SkDrawPosTextCommand() override { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700552 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800553 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
554 static SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800555
chudy@google.com902ebe52012-06-29 14:21:22 +0000556private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000557 char* fText;
558 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000559 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000560 SkPaint fPaint;
561
562 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000563};
564
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000565class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000566public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000567 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
568 const SkMatrix* matrix, const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400569 ~SkDrawTextOnPathCommand() override { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700570 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800571 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
572 static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800573
chudy@google.com902ebe52012-06-29 14:21:22 +0000574private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000575 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000576 size_t fByteLength;
577 SkPath fPath;
578 SkMatrix fMatrix;
579 SkPaint fPaint;
580
581 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000582};
583
reed45561a02016-07-07 12:47:17 -0700584class SkDrawTextRSXformCommand : public SkDrawCommand {
585public:
586 SkDrawTextRSXformCommand(const void* text, size_t byteLength, const SkRSXform[],
587 const SkRect*, const SkPaint& paint);
588 ~SkDrawTextRSXformCommand() override { delete[] fText; delete[] fXform; }
589 void execute(SkCanvas* canvas) const override;
590 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
591 static SkDrawTextRSXformCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
592
593private:
594 char* fText;
595 size_t fByteLength;
596 SkRSXform* fXform;
597 SkRect* fCull;
598 SkRect fCullStorage;
599 SkPaint fPaint;
600
601 typedef SkDrawCommand INHERITED;
602};
603
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000604class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000605public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000606 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
607 SkScalar constY, const SkPaint& paint);
Brian Salomond3b65972017-03-22 12:05:03 -0400608 ~SkDrawPosTextHCommand() override { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700609 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800610 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
611 static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800612
chudy@google.com902ebe52012-06-29 14:21:22 +0000613private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000614 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000615 char* fText;
616 size_t fByteLength;
617 SkScalar fConstY;
618 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000619
620 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000621};
622
fmalitab7425172014-08-26 07:56:44 -0700623class SkDrawTextBlobCommand : public SkDrawCommand {
624public:
fmalita37283c22016-09-13 10:00:23 -0700625 SkDrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700626
mtklein36352bf2015-03-25 18:17:31 -0700627 void execute(SkCanvas* canvas) const override;
628 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800629 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
630 static SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
fmalitab7425172014-08-26 07:56:44 -0700631
632private:
fmalita37283c22016-09-13 10:00:23 -0700633 sk_sp<SkTextBlob> fBlob;
634 SkScalar fXPos;
635 SkScalar fYPos;
636 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700637
638 typedef SkDrawCommand INHERITED;
639};
640
robertphillips9bafc302015-02-13 11:13:00 -0800641class SkDrawPatchCommand : public SkDrawCommand {
642public:
643 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
Mike Reed7d954ad2016-10-28 15:42:34 -0400644 const SkPoint texCoords[4], SkBlendMode bmode,
robertphillips9bafc302015-02-13 11:13:00 -0800645 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700646 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800647 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
648 static SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips9bafc302015-02-13 11:13:00 -0800649
650private:
651 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800652 SkColor* fColorsPtr;
653 SkColor fColors[4];
654 SkPoint* fTexCoordsPtr;
655 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400656 SkBlendMode fBlendMode;
robertphillips9bafc302015-02-13 11:13:00 -0800657 SkPaint fPaint;
658
659 typedef SkDrawCommand INHERITED;
660};
661
662
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000663class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000664public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000665 SkDrawRectCommand(const SkRect& rect, 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 SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000669
robertphillips@google.com91217d02013-03-17 18:33:46 +0000670 const SkRect& rect() const { return fRect; }
671 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000672private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000673 SkRect fRect;
674 SkPaint fPaint;
675
676 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000677};
678
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000679class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000680public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000681 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700682 void execute(SkCanvas* canvas) const override;
683 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800684 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
685 static SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800686
robertphillips@google.com67baba42013-01-02 20:20:31 +0000687private:
688 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000689 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000690
691 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000692};
693
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000694class SkDrawDRRectCommand : public SkDrawCommand {
695public:
696 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
697 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700698 void execute(SkCanvas* canvas) const override;
699 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800700 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
701 static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800702
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000703private:
704 SkRRect fOuter;
705 SkRRect fInner;
706 SkPaint fPaint;
707
708 typedef SkDrawCommand INHERITED;
709};
710
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000711class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000712public:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400713 SkDrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
714
mtklein36352bf2015-03-25 18:17:31 -0700715 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800716
chudy@google.com902ebe52012-06-29 14:21:22 +0000717private:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400718 sk_sp<SkVertices> fVertices;
719 SkBlendMode fBlendMode;
720 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000721
722 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000723};
724
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000725class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000726public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400727 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700728 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800729 static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800730
chudy@google.com902ebe52012-06-29 14:21:22 +0000731private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000732 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000733};
734
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000735class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000736public:
reed4960eee2015-12-18 07:09:18 -0800737 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
Brian Salomond3b65972017-03-22 12:05:03 -0400738 ~SkSaveLayerCommand() override;
mtklein36352bf2015-03-25 18:17:31 -0700739 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800740 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
741 static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000742
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000743 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000744
chudy@google.com902ebe52012-06-29 14:21:22 +0000745private:
ethannicholas50a8dd02016-02-10 05:40:46 -0800746 SkRect fBounds;
747 SkPaint fPaint;
748 SkPaint* fPaintPtr;
749 const SkImageFilter* fBackdrop;
750 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000751
752 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000753};
754
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000755class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000756public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000757 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700758 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800759 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
760 static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800761
chudy@google.com902ebe52012-06-29 14:21:22 +0000762private:
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000763 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000764
765 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000766};
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400767
768class SkDrawShadowCommand : public SkDrawCommand {
769public:
770 SkDrawShadowCommand(const SkPath& path, const SkDrawShadowRec& rec);
771 void execute(SkCanvas* canvas) const override;
772 bool render(SkCanvas* canvas) const override;
773 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
774 static SkDrawShadowCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
775
776private:
777 SkPath fPath;
778 SkDrawShadowRec fShadowRec;
779
780 typedef SkDrawCommand INHERITED;
781};
chudy@google.com902ebe52012-06-29 14:21:22 +0000782#endif
vjiaoblacke6f5d562016-08-25 06:30:23 -0700783