blob: 2acc504599c82422b1d9b857da572ecd3986f916 [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,
reed45561a02016-07-07 12:47:17 -070060 kDrawTextRSXform_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080061 kDrawVertices_OpType,
Brian Osman616f1cb2018-05-29 11:23:35 -040062 kDrawAtlas_OpType,
Brian Osmanc7611082018-05-29 14:55:50 -040063 kDrawDrawable_OpType,
fmalita160ebb22015-04-01 20:58:37 -070064 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080065 kRestore_OpType,
66 kSave_OpType,
67 kSaveLayer_OpType,
68 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080069
Jim Van Verth343fe492017-05-02 16:49:24 -040070 kLast_OpType = kSetMatrix_OpType
robertphillips9bafc302015-02-13 11:13:00 -080071 };
72
73 static const int kOpTypeCount = kLast_OpType + 1;
74
Brian Osmand9ea8162018-08-08 17:03:39 -040075 static void WritePNG(SkBitmap bitmap, SkWStream& out);
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
robertphillips9bafc302015-02-13 11:13:00 -080095 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +000096
joshualittbd724132016-03-03 11:39:38 -080097 // Helper methods for converting things to JSON
brianosmanfad98562016-05-04 11:06:28 -070098 static Json::Value MakeJsonColor(const SkColor color);
brianosman97bbf822016-09-25 13:15:58 -070099 static Json::Value MakeJsonColor4f(const SkColor4f& color);
brianosmanfad98562016-05-04 11:06:28 -0700100 static Json::Value MakeJsonPoint(const SkPoint& point);
101 static Json::Value MakeJsonPoint(SkScalar x, SkScalar y);
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400102 static Json::Value MakeJsonPoint3(const SkPoint3& point);
brianosmanfad98562016-05-04 11:06:28 -0700103 static Json::Value MakeJsonRect(const SkRect& rect);
joshualittbd724132016-03-03 11:39:38 -0800104 static Json::Value MakeJsonIRect(const SkIRect&);
105 static Json::Value MakeJsonMatrix(const SkMatrix&);
vjiaoblacke5de1302016-07-13 14:05:28 -0700106 static Json::Value MakeJsonScalar(SkScalar);
brianosmanfad98562016-05-04 11:06:28 -0700107 static Json::Value MakeJsonPath(const SkPath& path);
108 static Json::Value MakeJsonRegion(const SkRegion& region);
109 static Json::Value MakeJsonPaint(const SkPaint& paint, UrlDataManager& urlDataManager);
Stan Ilievac42aeb2017-01-12 16:20:50 -0500110 static Json::Value MakeJsonLattice(const SkCanvas::Lattice& lattice);
brianosmanfad98562016-05-04 11:06:28 -0700111
112 static void flatten(const SkFlattenable* flattenable, Json::Value* target,
113 UrlDataManager& urlDataManager);
114 static bool flatten(const SkImage& image, Json::Value* target,
115 UrlDataManager& urlDataManager);
116 static bool flatten(const SkBitmap& bitmap, Json::Value* target,
117 UrlDataManager& urlDataManager);
joshualittbd724132016-03-03 11:39:38 -0800118
chudy@google.com902ebe52012-06-29 14:21:22 +0000119private:
robertphillips9bafc302015-02-13 11:13:00 -0800120 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000121 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000122};
123
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000124class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000125public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000126 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700127 void execute(SkCanvas* canvas) const override;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000128
129private:
130 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000131};
132
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000133class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000134public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000135 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700136 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800137 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800138
chudy@google.com902ebe52012-06-29 14:21:22 +0000139private:
140 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000141
142 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000143};
144
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000145class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000146public:
Mike Reedc1f77742016-12-09 09:00:50 -0500147 SkClipPathCommand(const SkPath& path, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700148 void execute(SkCanvas* canvas) const override;
149 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800150 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800151
chudy@google.com902ebe52012-06-29 14:21:22 +0000152private:
Mike Reedc1f77742016-12-09 09:00:50 -0500153 SkPath fPath;
154 SkClipOp fOp;
155 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000156
157 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000158};
159
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000160class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000161public:
Mike Reedc1f77742016-12-09 09:00:50 -0500162 SkClipRegionCommand(const SkRegion& region, SkClipOp op);
mtklein36352bf2015-03-25 18:17:31 -0700163 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800164 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800165
chudy@google.com902ebe52012-06-29 14:21:22 +0000166private:
Mike Reedc1f77742016-12-09 09:00:50 -0500167 SkRegion fRegion;
168 SkClipOp fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000169
170 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000171};
172
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000173class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000174public:
Mike Reedc1f77742016-12-09 09:00:50 -0500175 SkClipRectCommand(const SkRect& rect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700176 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800177 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000178
chudy@google.com902ebe52012-06-29 14:21:22 +0000179private:
Mike Reedc1f77742016-12-09 09:00:50 -0500180 SkRect fRect;
181 SkClipOp fOp;
182 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000183
184 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000185};
186
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000187class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000188public:
Mike Reedc1f77742016-12-09 09:00:50 -0500189 SkClipRRectCommand(const SkRRect& rrect, SkClipOp op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700190 void execute(SkCanvas* canvas) const override;
191 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800192 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000193
robertphillips@google.com67baba42013-01-02 20:20:31 +0000194private:
Mike Reedc1f77742016-12-09 09:00:50 -0500195 SkRRect fRRect;
196 SkClipOp fOp;
197 bool fDoAA;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000198
199 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000200};
201
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000202class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000203public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000204 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700205 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800206 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800207
chudy@google.com902ebe52012-06-29 14:21:22 +0000208private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000209 SkMatrix fMatrix;
210
211 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000212};
213
reed97660cc2016-06-28 18:54:19 -0700214class SkDrawAnnotationCommand : public SkDrawCommand {
215public:
216 SkDrawAnnotationCommand(const SkRect&, const char key[], sk_sp<SkData> value);
217 void execute(SkCanvas* canvas) const override;
218 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
reed97660cc2016-06-28 18:54:19 -0700219
220private:
221 SkRect fRect;
222 SkString fKey;
223 sk_sp<SkData> fValue;
224
225 typedef SkDrawCommand INHERITED;
226};
227
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000228class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000229public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000230 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000231 const SkPaint* paint);
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;
ethannicholas50a8dd02016-02-10 05:40:46 -0800235
chudy@google.com902ebe52012-06-29 14:21:22 +0000236private:
Brian Osman8363be12018-05-29 13:38:07 -0400237 SkBitmap fBitmap;
238 SkScalar fLeft;
239 SkScalar fTop;
240 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000241
242 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000243};
244
Brian Osman78a76482018-05-18 16:59:13 -0400245class SkDrawBitmapLatticeCommand : public SkDrawCommand {
246public:
247 SkDrawBitmapLatticeCommand(const SkBitmap& bitmap, const SkCanvas::Lattice& lattice,
248 const SkRect& dst, const SkPaint* paint);
249 void execute(SkCanvas* canvas) const override;
250 bool render(SkCanvas* canvas) const override;
251 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osman78a76482018-05-18 16:59:13 -0400252
253private:
254 SkBitmap fBitmap;
255 SkCanvas::Lattice fLattice;
256 SkRect fDst;
257 SkTLazy<SkPaint> fPaint;
258
259 typedef SkDrawCommand INHERITED;
260};
261
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000262class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000263public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000264 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000265 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700266 void execute(SkCanvas* canvas) const override;
267 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800268 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800269
chudy@google.com902ebe52012-06-29 14:21:22 +0000270private:
Brian Osman8363be12018-05-29 13:38:07 -0400271 SkBitmap fBitmap;
272 SkIRect fCenter;
273 SkRect fDst;
274 SkTLazy<SkPaint> fPaint;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000275
276 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000277};
278
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000279class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000280public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000281 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000282 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700283 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700284 void execute(SkCanvas* canvas) const override;
285 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800286 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000287
chudy@google.com902ebe52012-06-29 14:21:22 +0000288private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000289 SkBitmap fBitmap;
Brian Osman8363be12018-05-29 13:38:07 -0400290 SkTLazy<SkRect> fSrc;
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000291 SkRect fDst;
Brian Osman8363be12018-05-29 13:38:07 -0400292 SkTLazy<SkPaint> fPaint;
reeda5517e22015-07-14 10:54:12 -0700293 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000294
295 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000296};
297
fmalita651c9202015-07-22 10:23:01 -0700298class SkDrawImageCommand : public SkDrawCommand {
299public:
300 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
301 void execute(SkCanvas* canvas) const override;
302 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800303 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800304
fmalita651c9202015-07-22 10:23:01 -0700305private:
Hal Canary1b612a82016-11-03 16:26:13 -0400306 sk_sp<const SkImage> fImage;
307 SkScalar fLeft;
308 SkScalar fTop;
309 SkTLazy<SkPaint> fPaint;
fmalita651c9202015-07-22 10:23:01 -0700310
311 typedef SkDrawCommand INHERITED;
312};
313
Stan Ilievac42aeb2017-01-12 16:20:50 -0500314class SkDrawImageLatticeCommand : public SkDrawCommand {
315public:
316 SkDrawImageLatticeCommand(const SkImage* image, const SkCanvas::Lattice& lattice,
317 const SkRect& dst, const SkPaint* paint);
318 void execute(SkCanvas* canvas) const override;
319 bool render(SkCanvas* canvas) const override;
320 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
321
322private:
323 sk_sp<const SkImage> fImage;
324 SkCanvas::Lattice fLattice;
325 SkRect fDst;
326 SkTLazy<SkPaint> fPaint;
327
328 typedef SkDrawCommand INHERITED;
329};
330
Brian Osmanc25e2692018-03-12 10:57:28 -0400331class SkDrawImageNineCommand : public SkDrawCommand {
332public:
333 SkDrawImageNineCommand(const SkImage* image, const SkIRect& center,
334 const SkRect& dst, const SkPaint* paint);
335 void execute(SkCanvas* canvas) const override;
336 bool render(SkCanvas* canvas) const override;
337 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400338
339private:
340 sk_sp<const SkImage> fImage;
341 SkIRect fCenter;
342 SkRect fDst;
Brian Osman8363be12018-05-29 13:38:07 -0400343 SkTLazy<SkPaint> fPaint;
Brian Osmanc25e2692018-03-12 10:57:28 -0400344
345 typedef SkDrawCommand INHERITED;
346};
347
fmalita651c9202015-07-22 10:23:01 -0700348class SkDrawImageRectCommand : public SkDrawCommand {
349public:
350 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
351 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
352 void execute(SkCanvas* canvas) const override;
353 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800354 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
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;
fmalita651c9202015-07-22 10:23:01 -0700358 SkTLazy<SkRect> fSrc;
359 SkRect fDst;
360 SkTLazy<SkPaint> fPaint;
361 SkCanvas::SrcRectConstraint fConstraint;
362
363 typedef SkDrawCommand INHERITED;
364};
365
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000366class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000367public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000368 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700369 void execute(SkCanvas* canvas) const override;
370 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800371 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800372
robertphillips@google.com67baba42013-01-02 20:20:31 +0000373private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000374 SkRect fOval;
375 SkPaint fPaint;
376
377 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000378};
379
bsalomonac3aa242016-08-19 11:25:19 -0700380class SkDrawArcCommand : public SkDrawCommand {
381public:
382 SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
383 const SkPaint& paint);
384 void execute(SkCanvas* canvas) const override;
385 bool render(SkCanvas* canvas) const override;
386 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
bsalomonac3aa242016-08-19 11:25:19 -0700387
388private:
389 SkRect fOval;
390 SkScalar fStartAngle;
391 SkScalar fSweepAngle;
392 bool fUseCenter;
393 SkPaint fPaint;
394
395 typedef SkDrawCommand INHERITED;
396};
397
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000398class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000399public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000400 SkDrawPaintCommand(const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700401 void execute(SkCanvas* canvas) const override;
402 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800403 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800404
chudy@google.com902ebe52012-06-29 14:21:22 +0000405private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000406 SkPaint fPaint;
407
408 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000409};
410
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000411class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000412public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000413 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700414 void execute(SkCanvas* canvas) const override;
415 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800416 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000417
chudy@google.com902ebe52012-06-29 14:21:22 +0000418private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000419 SkPath fPath;
420 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000421
422 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000423};
424
fmalita160ebb22015-04-01 20:58:37 -0700425class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000426public:
fmalita160ebb22015-04-01 20:58:37 -0700427 SkBeginDrawPictureCommand(const SkPicture* picture,
428 const SkMatrix* matrix,
429 const SkPaint* paint);
430
mtklein36352bf2015-03-25 18:17:31 -0700431 void execute(SkCanvas* canvas) const override;
432 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000433
chudy@google.com902ebe52012-06-29 14:21:22 +0000434private:
Hal Canary1b612a82016-11-03 16:26:13 -0400435 sk_sp<const SkPicture> fPicture;
436 SkTLazy<SkMatrix> fMatrix;
437 SkTLazy<SkPaint> fPaint;
fmalita160ebb22015-04-01 20:58:37 -0700438
439 typedef SkDrawCommand INHERITED;
440};
441
442class SkEndDrawPictureCommand : public SkDrawCommand {
443public:
444 SkEndDrawPictureCommand(bool restore);
445
446 void execute(SkCanvas* canvas) const override;
447
448private:
449 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000450
451 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000452};
453
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000454class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000455public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000456 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000457 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700458 void execute(SkCanvas* canvas) const override;
459 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800460 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800461
chudy@google.com902ebe52012-06-29 14:21:22 +0000462private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000463 SkCanvas::PointMode fMode;
Brian Osman8363be12018-05-29 13:38:07 -0400464 SkTDArray<SkPoint> fPts;
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
Brian Osmanc25e2692018-03-12 10:57:28 -0400470class SkDrawRegionCommand : public SkDrawCommand {
471public:
472 SkDrawRegionCommand(const SkRegion& region, const SkPaint& paint);
473 void execute(SkCanvas* canvas) const override;
474 bool render(SkCanvas* canvas) const override;
475 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Brian Osmanc25e2692018-03-12 10:57:28 -0400476
477private:
478 SkRegion fRegion;
479 SkPaint fPaint;
480
481 typedef SkDrawCommand INHERITED;
482};
483
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000484class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000485public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000486 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000487 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700488 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800489 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800490
chudy@google.com902ebe52012-06-29 14:21:22 +0000491private:
Brian Osman65197ff2018-05-29 14:25:39 -0400492 sk_sp<SkData> fText;
493 SkScalar fX;
494 SkScalar fY;
495 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000496
497 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000498};
499
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000500class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000501public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000502 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
503 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700504 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800505 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800506
chudy@google.com902ebe52012-06-29 14:21:22 +0000507private:
Brian Osman65197ff2018-05-29 14:25:39 -0400508 sk_sp<SkData> fText;
509 SkTDArray<SkPoint> fPos;
510 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000511
512 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000513};
514
reed45561a02016-07-07 12:47:17 -0700515class SkDrawTextRSXformCommand : public SkDrawCommand {
516public:
517 SkDrawTextRSXformCommand(const void* text, size_t byteLength, const SkRSXform[],
518 const SkRect*, const SkPaint& paint);
reed45561a02016-07-07 12:47:17 -0700519 void execute(SkCanvas* canvas) const override;
520 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
reed45561a02016-07-07 12:47:17 -0700521
522private:
Brian Osman65197ff2018-05-29 14:25:39 -0400523 sk_sp<SkData> fText;
524 SkTDArray<SkRSXform> fXform;
525 SkTLazy<SkRect> fCull;
526 SkPaint fPaint;
reed45561a02016-07-07 12:47:17 -0700527
528 typedef SkDrawCommand INHERITED;
529};
530
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000531class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000532public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000533 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
534 SkScalar constY, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700535 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800536 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800537
chudy@google.com902ebe52012-06-29 14:21:22 +0000538private:
Brian Osman65197ff2018-05-29 14:25:39 -0400539 sk_sp<SkData> fText;
540 SkTDArray<SkScalar> fXpos;
541 SkScalar fConstY;
542 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000543
544 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000545};
546
fmalitab7425172014-08-26 07:56:44 -0700547class SkDrawTextBlobCommand : public SkDrawCommand {
548public:
fmalita37283c22016-09-13 10:00:23 -0700549 SkDrawTextBlobCommand(sk_sp<SkTextBlob> blob, SkScalar x, SkScalar y, const SkPaint& paint);
fmalitab7425172014-08-26 07:56:44 -0700550
mtklein36352bf2015-03-25 18:17:31 -0700551 void execute(SkCanvas* canvas) const override;
552 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800553 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
fmalitab7425172014-08-26 07:56:44 -0700554
555private:
fmalita37283c22016-09-13 10:00:23 -0700556 sk_sp<SkTextBlob> fBlob;
557 SkScalar fXPos;
558 SkScalar fYPos;
559 SkPaint fPaint;
fmalitab7425172014-08-26 07:56:44 -0700560
561 typedef SkDrawCommand INHERITED;
562};
563
robertphillips9bafc302015-02-13 11:13:00 -0800564class SkDrawPatchCommand : public SkDrawCommand {
565public:
566 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
Mike Reed7d954ad2016-10-28 15:42:34 -0400567 const SkPoint texCoords[4], SkBlendMode bmode,
robertphillips9bafc302015-02-13 11:13:00 -0800568 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700569 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800570 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips9bafc302015-02-13 11:13:00 -0800571
572private:
573 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800574 SkColor* fColorsPtr;
575 SkColor fColors[4];
576 SkPoint* fTexCoordsPtr;
577 SkPoint fTexCoords[4];
Mike Reed7d954ad2016-10-28 15:42:34 -0400578 SkBlendMode fBlendMode;
robertphillips9bafc302015-02-13 11:13:00 -0800579 SkPaint fPaint;
580
581 typedef SkDrawCommand INHERITED;
582};
583
584
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000585class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000586public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000587 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700588 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800589 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000590
chudy@google.com902ebe52012-06-29 14:21:22 +0000591private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000592 SkRect fRect;
593 SkPaint fPaint;
594
595 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000596};
597
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000598class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000599public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000600 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700601 void execute(SkCanvas* canvas) const override;
602 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800603 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800604
robertphillips@google.com67baba42013-01-02 20:20:31 +0000605private:
606 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000607 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000608
609 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000610};
611
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000612class SkDrawDRRectCommand : public SkDrawCommand {
613public:
614 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
615 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700616 void execute(SkCanvas* canvas) const override;
617 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800618 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800619
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000620private:
621 SkRRect fOuter;
622 SkRRect fInner;
623 SkPaint fPaint;
624
625 typedef SkDrawCommand INHERITED;
626};
627
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000628class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000629public:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400630 SkDrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&);
631
mtklein36352bf2015-03-25 18:17:31 -0700632 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800633
chudy@google.com902ebe52012-06-29 14:21:22 +0000634private:
Mike Reedfed9cfd2017-03-17 12:09:04 -0400635 sk_sp<SkVertices> fVertices;
636 SkBlendMode fBlendMode;
637 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000638
639 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000640};
641
Brian Osman616f1cb2018-05-29 11:23:35 -0400642class SkDrawAtlasCommand : public SkDrawCommand {
643public:
644 SkDrawAtlasCommand(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int,
645 SkBlendMode, const SkRect*, const SkPaint*);
646
647 void execute(SkCanvas* canvas) const override;
648
649private:
650 sk_sp<const SkImage> fImage;
651 SkTDArray<SkRSXform> fXform;
652 SkTDArray<SkRect> fTex;
653 SkTDArray<SkColor> fColors;
654 SkBlendMode fBlendMode;
655 SkTLazy<SkRect> fCull;
656 SkTLazy<SkPaint> fPaint;
657
658 typedef SkDrawCommand INHERITED;
659};
660
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000661class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000662public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400663 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700664 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800665
chudy@google.com902ebe52012-06-29 14:21:22 +0000666private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000667 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000668};
669
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000670class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000671public:
reed4960eee2015-12-18 07:09:18 -0800672 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
mtklein36352bf2015-03-25 18:17:31 -0700673 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800674 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000675
chudy@google.com902ebe52012-06-29 14:21:22 +0000676private:
Brian Osman8363be12018-05-29 13:38:07 -0400677 SkTLazy<SkRect> fBounds;
678 SkTLazy<SkPaint> fPaint;
679 sk_sp<const SkImageFilter> fBackdrop;
680 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000681
682 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000683};
684
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000685class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000686public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000687 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700688 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800689 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800690
chudy@google.com902ebe52012-06-29 14:21:22 +0000691private:
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000692 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000693
694 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000695};
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400696
697class SkDrawShadowCommand : public SkDrawCommand {
698public:
699 SkDrawShadowCommand(const SkPath& path, const SkDrawShadowRec& rec);
700 void execute(SkCanvas* canvas) const override;
701 bool render(SkCanvas* canvas) const override;
702 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
Derek Sollenberger6aab2ab2018-04-12 12:45:58 -0400703
704private:
705 SkPath fPath;
706 SkDrawShadowRec fShadowRec;
707
708 typedef SkDrawCommand INHERITED;
709};
vjiaoblacke6f5d562016-08-25 06:30:23 -0700710
Brian Osmanc7611082018-05-29 14:55:50 -0400711class SkDrawDrawableCommand : public SkDrawCommand {
712public:
713 SkDrawDrawableCommand(SkDrawable*, const SkMatrix*);
714 void execute(SkCanvas* canvas) const override;
715
716private:
717 sk_sp<SkDrawable> fDrawable;
718 SkTLazy<SkMatrix> fMatrix;
719
720 typedef SkDrawCommand INHERITED;
721};
722#endif