blob: 7eaf354bc783907ac01b3d88ade2e2dd9481635c [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
ethannicholasf67531f2016-03-21 10:19:39 -070011#include "png.h"
12
chudy@google.com902ebe52012-06-29 14:21:22 +000013#include "SkCanvas.h"
bungemand3ebb482015-08-05 13:57:49 -070014#include "SkTLazy.h"
15#include "SkPath.h"
16#include "SkRRect.h"
robertphillips@google.com0a4805e2013-05-29 13:24:23 +000017#include "SkString.h"
bungemand3ebb482015-08-05 13:57:49 -070018#include "SkTDArray.h"
ethannicholas50a8dd02016-02-10 05:40:46 -080019#include "SkJSONCPP.h"
ethannicholasf62a8b72016-02-11 10:35:21 -080020#include "UrlDataManager.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000021
fmalita@google.com86681b32013-06-13 20:59:14 +000022class SK_API SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +000023public:
robertphillips9bafc302015-02-13 11:13:00 -080024 enum OpType {
fmalita160ebb22015-04-01 20:58:37 -070025 kBeginDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080026 kClipPath_OpType,
27 kClipRegion_OpType,
28 kClipRect_OpType,
29 kClipRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080030 kConcat_OpType,
31 kDrawBitmap_OpType,
32 kDrawBitmapNine_OpType,
33 kDrawBitmapRect_OpType,
34 kDrawClear_OpType,
35 kDrawDRRect_OpType,
fmalita651c9202015-07-22 10:23:01 -070036 kDrawImage_OpType,
37 kDrawImageRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080038 kDrawOval_OpType,
39 kDrawPaint_OpType,
40 kDrawPatch_OpType,
41 kDrawPath_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080042 kDrawPoints_OpType,
43 kDrawPosText_OpType,
44 kDrawPosTextH_OpType,
45 kDrawRect_OpType,
46 kDrawRRect_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080047 kDrawText_OpType,
48 kDrawTextBlob_OpType,
49 kDrawTextOnPath_OpType,
50 kDrawVertices_OpType,
fmalita160ebb22015-04-01 20:58:37 -070051 kEndDrawPicture_OpType,
robertphillips9bafc302015-02-13 11:13:00 -080052 kRestore_OpType,
53 kSave_OpType,
54 kSaveLayer_OpType,
55 kSetMatrix_OpType,
robertphillips72942b8e2015-02-12 06:37:12 -080056
robertphillips9bafc302015-02-13 11:13:00 -080057 kLast_OpType = kSetMatrix_OpType
58 };
59
60 static const int kOpTypeCount = kLast_OpType + 1;
61
ethannicholasf67531f2016-03-21 10:19:39 -070062 static void WritePNG(const png_bytep rgba, png_uint_32 width, png_uint_32 height,
63 SkWStream& out);
64
robertphillips9bafc302015-02-13 11:13:00 -080065 SkDrawCommand(OpType opType);
chudy@google.com902ebe52012-06-29 14:21:22 +000066
67 virtual ~SkDrawCommand();
68
fmalita8c89c522014-11-08 16:18:56 -080069 virtual SkString toString() const;
chudy@google.com902ebe52012-06-29 14:21:22 +000070
fmalita8c89c522014-11-08 16:18:56 -080071 virtual const char* toCString() const {
robertphillips9bafc302015-02-13 11:13:00 -080072 return GetCommandString(fOpType);
chudy@google.com902ebe52012-06-29 14:21:22 +000073 }
74
chudy@google.com0b5bbb02012-07-31 19:55:32 +000075 bool isVisible() const {
76 return fVisible;
77 }
78
79 void setVisible(bool toggle) {
80 fVisible = toggle;
81 }
chudy@google.com902ebe52012-06-29 14:21:22 +000082
fmalita8c89c522014-11-08 16:18:56 -080083 const SkTDArray<SkString*>* Info() const { return &fInfo; }
84 virtual void execute(SkCanvas*) const = 0;
85 virtual void vizExecute(SkCanvas*) const {}
robertphillips70171682014-10-16 14:28:28 -070086
fmalita8c89c522014-11-08 16:18:56 -080087 virtual void setUserMatrix(const SkMatrix&) {}
robertphillips70171682014-10-16 14:28:28 -070088
mtkleinf0f14112014-12-12 08:46:25 -080089 // The next "active" system is only used by save, saveLayer, and restore.
90 // It is used to determine which saveLayers are currently active (at a
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000091 // given point in the rendering).
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000092 // saves just return a kPushLayer action but don't track active state
93 // restores just return a kPopLayer action
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000094 // saveLayers return kPushLayer but also track the active state
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000095 enum Action {
96 kNone_Action,
commit-bot@chromium.org1643b2c2014-03-03 23:25:41 +000097 kPopLayer_Action,
98 kPushLayer_Action,
commit-bot@chromium.org768ac852014-03-03 16:32:17 +000099 };
100 virtual Action action() const { return kNone_Action; }
101 virtual void setActive(bool active) {}
102 virtual bool active() const { return false; }
103
robertphillips9bafc302015-02-13 11:13:00 -0800104 OpType getType() const { return fOpType; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000105
robertphillips@google.com6ede1fe2013-06-06 23:59:28 +0000106 virtual bool render(SkCanvas* canvas) const { return false; }
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000107
ethannicholasf62a8b72016-02-11 10:35:21 -0800108 virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
ethannicholas50a8dd02016-02-10 05:40:46 -0800109
110 /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
111 * is the caller's responsibility to delete this object. This method may return null if an error
112 * occurs.
113 */
ethannicholasf62a8b72016-02-11 10:35:21 -0800114 static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800115
robertphillips9bafc302015-02-13 11:13:00 -0800116 static const char* GetCommandString(OpType type);
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000117
joshualittbd724132016-03-03 11:39:38 -0800118 // Helper methods for converting things to JSON
119 static Json::Value MakeJsonIRect(const SkIRect&);
120 static Json::Value MakeJsonMatrix(const SkMatrix&);
121
chudy@google.com902ebe52012-06-29 14:21:22 +0000122protected:
chudy@google.com97cee972012-08-07 20:41:37 +0000123 SkTDArray<SkString*> fInfo;
chudy@google.com902ebe52012-06-29 14:21:22 +0000124
125private:
robertphillips9bafc302015-02-13 11:13:00 -0800126 OpType fOpType;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000127 bool fVisible;
chudy@google.com902ebe52012-06-29 14:21:22 +0000128};
129
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000130class SkRestoreCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000131public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000132 SkRestoreCommand();
mtklein36352bf2015-03-25 18:17:31 -0700133 void execute(SkCanvas* canvas) const override;
134 Action action() const override { return kPopLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800135 static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000136
137private:
138 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000139};
140
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000141class SkClearCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000142public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000143 SkClearCommand(SkColor color);
mtklein36352bf2015-03-25 18:17:31 -0700144 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800145 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
146 static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800147
chudy@google.com902ebe52012-06-29 14:21:22 +0000148private:
149 SkColor fColor;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000150
151 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000152};
153
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000154class SkClipPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000155public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000156 SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700157 void execute(SkCanvas* canvas) const override;
158 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800159 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
160 static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800161
chudy@google.com902ebe52012-06-29 14:21:22 +0000162private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000163 SkPath fPath;
chudy@google.com902ebe52012-06-29 14:21:22 +0000164 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000165 bool fDoAA;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000166
167 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000168};
169
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000170class SkClipRegionCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000171public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000172 SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
mtklein36352bf2015-03-25 18:17:31 -0700173 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800174 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
175 static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800176
chudy@google.com902ebe52012-06-29 14:21:22 +0000177private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000178 SkRegion fRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000179 SkRegion::Op fOp;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000180
181 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000182};
183
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000184class SkClipRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000185public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000186 SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700187 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800188 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
189 static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000190
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000191 const SkRect& rect() const { return fRect; }
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000192 SkRegion::Op op() const { return fOp; }
193 bool doAA() const { return fDoAA; }
194
chudy@google.com902ebe52012-06-29 14:21:22 +0000195private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000196 SkRect fRect;
chudy@google.com902ebe52012-06-29 14:21:22 +0000197 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000198 bool fDoAA;
199
200 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000201};
202
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000203class SkClipRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000204public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000205 SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
mtklein36352bf2015-03-25 18:17:31 -0700206 void execute(SkCanvas* canvas) const override;
207 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800208 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
209 static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000210
211 const SkRRect& rrect() const { return fRRect; }
212 SkRegion::Op op() const { return fOp; }
213 bool doAA() const { return fDoAA; }
214
robertphillips@google.com67baba42013-01-02 20:20:31 +0000215private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000216 SkRRect fRRect;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000217 SkRegion::Op fOp;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000218 bool fDoAA;
219
220 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000221};
222
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000223class SkConcatCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000224public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000225 SkConcatCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700226 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800227 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
228 static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800229
chudy@google.com902ebe52012-06-29 14:21:22 +0000230private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000231 SkMatrix fMatrix;
232
233 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000234};
235
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000236class SkDrawBitmapCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000237public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000238 SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000239 const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700240 void execute(SkCanvas* canvas) const override;
241 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800242 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
243 static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800244
chudy@google.com902ebe52012-06-29 14:21:22 +0000245private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000246 SkBitmap fBitmap;
chudy@google.com902ebe52012-06-29 14:21:22 +0000247 SkScalar fLeft;
248 SkScalar fTop;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000249 SkPaint fPaint;
250 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000251
252 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000253};
254
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000255class SkDrawBitmapNineCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000256public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000257 SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000258 const SkRect& dst, const SkPaint* paint);
mtklein36352bf2015-03-25 18:17:31 -0700259 void execute(SkCanvas* canvas) const override;
260 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800261 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
262 static SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800263
chudy@google.com902ebe52012-06-29 14:21:22 +0000264private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000265 SkBitmap fBitmap;
266 SkIRect fCenter;
267 SkRect fDst;
268 SkPaint fPaint;
269 SkPaint* fPaintPtr;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000270
271 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000272};
273
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000274class SkDrawBitmapRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000275public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000276 SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000277 const SkRect& dst, const SkPaint* paint,
reeda5517e22015-07-14 10:54:12 -0700278 SkCanvas::SrcRectConstraint);
mtklein36352bf2015-03-25 18:17:31 -0700279 void execute(SkCanvas* canvas) const override;
280 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800281 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
282 static SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000283
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000284 const SkBitmap& bitmap() const { return fBitmap; }
285
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000286 // The non-const 'paint' method allows modification of this object's
287 // SkPaint. For this reason the ctor and setPaint method make a local copy.
288 // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
289 // (since only an SkPaint* is passed into the ctor).
290 const SkPaint* paint() const { return fPaintPtr; }
291 SkPaint* paint() { return fPaintPtr; }
292
293 void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
294
halcanary96fcdcc2015-08-27 07:41:13 -0700295 const SkRect* srcRect() const { return fSrc.isEmpty() ? nullptr : &fSrc; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000296 void setSrcRect(const SkRect& src) { fSrc = src; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000297
298 const SkRect& dstRect() const { return fDst; }
robertphillips@google.comc3410b82013-03-28 12:25:25 +0000299 void setDstRect(const SkRect& dst) { fDst = dst; }
300
reeda5517e22015-07-14 10:54:12 -0700301 SkCanvas::SrcRectConstraint constraint() const { return fConstraint; }
302 void setConstraint(SkCanvas::SrcRectConstraint constraint) { fConstraint = constraint; }
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000303
chudy@google.com902ebe52012-06-29 14:21:22 +0000304private:
commit-bot@chromium.orgeed779d2013-08-16 10:24:37 +0000305 SkBitmap fBitmap;
306 SkRect fSrc;
307 SkRect fDst;
308 SkPaint fPaint;
309 SkPaint* fPaintPtr;
reeda5517e22015-07-14 10:54:12 -0700310 SkCanvas::SrcRectConstraint fConstraint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000311
312 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000313};
314
fmalita651c9202015-07-22 10:23:01 -0700315class SkDrawImageCommand : public SkDrawCommand {
316public:
317 SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint);
318 void execute(SkCanvas* canvas) const override;
319 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800320 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
321 static SkDrawImageCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800322
fmalita651c9202015-07-22 10:23:01 -0700323private:
324 SkAutoTUnref<const SkImage> fImage;
325 SkScalar fLeft;
326 SkScalar fTop;
327 SkTLazy<SkPaint> fPaint;
328
329 typedef SkDrawCommand INHERITED;
330};
331
332class SkDrawImageRectCommand : public SkDrawCommand {
333public:
334 SkDrawImageRectCommand(const SkImage* image, const SkRect* src, const SkRect& dst,
335 const SkPaint* paint, SkCanvas::SrcRectConstraint constraint);
336 void execute(SkCanvas* canvas) const override;
337 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800338 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
339 static SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800340
fmalita651c9202015-07-22 10:23:01 -0700341private:
342 SkAutoTUnref<const SkImage> fImage;
343 SkTLazy<SkRect> fSrc;
344 SkRect fDst;
345 SkTLazy<SkPaint> fPaint;
346 SkCanvas::SrcRectConstraint fConstraint;
347
348 typedef SkDrawCommand INHERITED;
349};
350
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000351class SkDrawOvalCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000352public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000353 SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700354 void execute(SkCanvas* canvas) const override;
355 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800356 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
357 static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800358
robertphillips@google.com67baba42013-01-02 20:20:31 +0000359private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000360 SkRect fOval;
361 SkPaint fPaint;
362
363 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000364};
365
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000366class SkDrawPaintCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000367public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000368 SkDrawPaintCommand(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;
372 static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800373
chudy@google.com902ebe52012-06-29 14:21:22 +0000374private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000375 SkPaint fPaint;
376
377 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000378};
379
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000380class SkDrawPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000381public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000382 SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700383 void execute(SkCanvas* canvas) const override;
384 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800385 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
386 static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000387
chudy@google.com902ebe52012-06-29 14:21:22 +0000388private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000389 SkPath fPath;
390 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000391
392 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000393};
394
fmalita160ebb22015-04-01 20:58:37 -0700395class SkBeginDrawPictureCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000396public:
fmalita160ebb22015-04-01 20:58:37 -0700397 SkBeginDrawPictureCommand(const SkPicture* picture,
398 const SkMatrix* matrix,
399 const SkPaint* paint);
400
mtklein36352bf2015-03-25 18:17:31 -0700401 void execute(SkCanvas* canvas) const override;
402 bool render(SkCanvas* canvas) const override;
commit-bot@chromium.orge898e9c2013-11-21 17:08:12 +0000403
chudy@google.com902ebe52012-06-29 14:21:22 +0000404private:
robertphillips9b14f262014-06-04 05:40:44 -0700405 SkAutoTUnref<const SkPicture> fPicture;
fmalita160ebb22015-04-01 20:58:37 -0700406 SkTLazy<SkMatrix> fMatrix;
407 SkTLazy<SkPaint> fPaint;
408
409 typedef SkDrawCommand INHERITED;
410};
411
412class SkEndDrawPictureCommand : public SkDrawCommand {
413public:
414 SkEndDrawPictureCommand(bool restore);
415
416 void execute(SkCanvas* canvas) const override;
417
418private:
419 bool fRestore;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000420
421 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000422};
423
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000424class SkDrawPointsCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000425public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000426 SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000427 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000428 virtual ~SkDrawPointsCommand() { delete [] fPts; }
mtklein36352bf2015-03-25 18:17:31 -0700429 void execute(SkCanvas* canvas) const override;
430 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800431 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
432 static SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800433
chudy@google.com902ebe52012-06-29 14:21:22 +0000434private:
chudy@google.com902ebe52012-06-29 14:21:22 +0000435 SkCanvas::PointMode fMode;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000436 size_t fCount;
437 SkPoint* fPts;
438 SkPaint fPaint;
439
440 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000441};
442
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000443class SkDrawTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000444public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000445 SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000446 const SkPaint& paint);
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000447 virtual ~SkDrawTextCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700448 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800449 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
450 static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800451
chudy@google.com902ebe52012-06-29 14:21:22 +0000452private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000453 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000454 size_t fByteLength;
chudy@google.com902ebe52012-06-29 14:21:22 +0000455 SkScalar fX;
456 SkScalar fY;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000457 SkPaint fPaint;
458
459 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000460};
461
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000462class SkDrawPosTextCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000463public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000464 SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
465 const SkPaint& paint);
466 virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700467 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800468 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
469 static SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800470
chudy@google.com902ebe52012-06-29 14:21:22 +0000471private:
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000472 char* fText;
473 size_t fByteLength;
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000474 SkPoint* fPos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000475 SkPaint fPaint;
476
477 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000478};
479
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000480class SkDrawTextOnPathCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000481public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000482 SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
483 const SkMatrix* matrix, const SkPaint& paint);
484 virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700485 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800486 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
487 static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800488
chudy@google.com902ebe52012-06-29 14:21:22 +0000489private:
robertphillips@google.com77279cb2013-03-25 12:01:45 +0000490 char* fText;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000491 size_t fByteLength;
492 SkPath fPath;
493 SkMatrix fMatrix;
494 SkPaint fPaint;
495
496 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000497};
498
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000499class SkDrawPosTextHCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000500public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000501 SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
502 SkScalar constY, const SkPaint& paint);
503 virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
mtklein36352bf2015-03-25 18:17:31 -0700504 void execute(SkCanvas* canvas) const override;
bungeman51190df2016-03-09 07:42:54 -0800505 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
506 static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800507
chudy@google.com902ebe52012-06-29 14:21:22 +0000508private:
robertphillips@google.coma3a09ab2013-03-22 12:25:30 +0000509 SkScalar* fXpos;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000510 char* fText;
511 size_t fByteLength;
512 SkScalar fConstY;
513 SkPaint fPaint;
robertphillips@google.com91217d02013-03-17 18:33:46 +0000514
515 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000516};
517
fmalitab7425172014-08-26 07:56:44 -0700518class SkDrawTextBlobCommand : public SkDrawCommand {
519public:
520 SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);
521
mtklein36352bf2015-03-25 18:17:31 -0700522 void execute(SkCanvas* canvas) const override;
523 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800524 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
525 static SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
fmalitab7425172014-08-26 07:56:44 -0700526
527private:
528 SkAutoTUnref<const SkTextBlob> fBlob;
529 SkScalar fXPos;
530 SkScalar fYPos;
531 SkPaint fPaint;
532
533 typedef SkDrawCommand INHERITED;
534};
535
robertphillips9bafc302015-02-13 11:13:00 -0800536class SkDrawPatchCommand : public SkDrawCommand {
537public:
538 SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
539 const SkPoint texCoords[4], SkXfermode* xmode,
540 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700541 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800542 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
543 static SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips9bafc302015-02-13 11:13:00 -0800544
545private:
546 SkPoint fCubics[12];
ethannicholas1446a9a2016-02-10 14:05:02 -0800547 SkColor* fColorsPtr;
548 SkColor fColors[4];
549 SkPoint* fTexCoordsPtr;
550 SkPoint fTexCoords[4];
robertphillips9bafc302015-02-13 11:13:00 -0800551 SkAutoTUnref<SkXfermode> fXfermode;
552 SkPaint fPaint;
553
554 typedef SkDrawCommand INHERITED;
555};
556
557
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000558class SkDrawRectCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000559public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000560 SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
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 SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000564
robertphillips@google.com91217d02013-03-17 18:33:46 +0000565 const SkRect& rect() const { return fRect; }
566 const SkPaint& paint() const { return fPaint; }
chudy@google.com902ebe52012-06-29 14:21:22 +0000567private:
robertphillips@google.com91217d02013-03-17 18:33:46 +0000568 SkRect fRect;
569 SkPaint fPaint;
570
571 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000572};
573
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000574class SkDrawRRectCommand : public SkDrawCommand {
robertphillips@google.com67baba42013-01-02 20:20:31 +0000575public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000576 SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700577 void execute(SkCanvas* canvas) const override;
578 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800579 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
580 static SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800581
robertphillips@google.com67baba42013-01-02 20:20:31 +0000582private:
583 SkRRect fRRect;
robertphillips@google.comfebc0ec2013-03-11 22:53:11 +0000584 SkPaint fPaint;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000585
586 typedef SkDrawCommand INHERITED;
robertphillips@google.com67baba42013-01-02 20:20:31 +0000587};
588
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000589class SkDrawDRRectCommand : public SkDrawCommand {
590public:
591 SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
592 const SkPaint& paint);
mtklein36352bf2015-03-25 18:17:31 -0700593 void execute(SkCanvas* canvas) const override;
594 bool render(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800595 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
596 static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800597
commit-bot@chromium.org3d305202014-02-24 17:28:55 +0000598private:
599 SkRRect fOuter;
600 SkRRect fInner;
601 SkPaint fPaint;
602
603 typedef SkDrawCommand INHERITED;
604};
605
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000606class SkDrawVerticesCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000607public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000608 SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
609 const SkPoint vertices[], const SkPoint texs[],
610 const SkColor colors[], SkXfermode* xfermode,
611 const uint16_t indices[], int indexCount,
612 const SkPaint& paint);
613 virtual ~SkDrawVerticesCommand();
mtklein36352bf2015-03-25 18:17:31 -0700614 void execute(SkCanvas* canvas) const override;
ethannicholas50a8dd02016-02-10 05:40:46 -0800615
chudy@google.com902ebe52012-06-29 14:21:22 +0000616private:
617 SkCanvas::VertexMode fVmode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000618 int fVertexCount;
619 SkPoint* fVertices;
620 SkPoint* fTexs;
621 SkColor* fColors;
chudy@google.com902ebe52012-06-29 14:21:22 +0000622 SkXfermode* fXfermode;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000623 uint16_t* fIndices;
624 int fIndexCount;
625 SkPaint fPaint;
626
627 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000628};
629
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000630class SkSaveCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000631public:
Florin Malita5f6102d2014-06-30 10:13:28 -0400632 SkSaveCommand();
mtklein36352bf2015-03-25 18:17:31 -0700633 void execute(SkCanvas* canvas) const override;
634 Action action() const override { return kPushLayer_Action; }
ethannicholasf62a8b72016-02-11 10:35:21 -0800635 static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800636
chudy@google.com902ebe52012-06-29 14:21:22 +0000637private:
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000638 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000639};
640
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000641class SkSaveLayerCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000642public:
reed4960eee2015-12-18 07:09:18 -0800643 SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
ethannicholas50a8dd02016-02-10 05:40:46 -0800644 virtual ~SkSaveLayerCommand();
mtklein36352bf2015-03-25 18:17:31 -0700645 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800646 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
647 static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
mtklein36352bf2015-03-25 18:17:31 -0700648 void vizExecute(SkCanvas* canvas) const override;
649 Action action() const override{ return kPushLayer_Action; }
650 void setActive(bool active) override { fActive = active; }
651 bool active() const override { return fActive; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000652
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000653 const SkPaint* paint() const { return fPaintPtr; }
robertphillips@google.com3b0a9fe2013-01-31 15:56:22 +0000654
chudy@google.com902ebe52012-06-29 14:21:22 +0000655private:
ethannicholas50a8dd02016-02-10 05:40:46 -0800656 SkRect fBounds;
657 SkPaint fPaint;
658 SkPaint* fPaintPtr;
659 const SkImageFilter* fBackdrop;
660 uint32_t fSaveLayerFlags;
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000661
reed4960eee2015-12-18 07:09:18 -0800662 bool fActive;
commit-bot@chromium.org768ac852014-03-03 16:32:17 +0000663
robertphillips@google.com24bfdac2013-03-22 16:33:31 +0000664 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000665};
666
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000667class SkSetMatrixCommand : public SkDrawCommand {
chudy@google.com902ebe52012-06-29 14:21:22 +0000668public:
commit-bot@chromium.org7a115912013-06-18 20:20:55 +0000669 SkSetMatrixCommand(const SkMatrix& matrix);
mtklein36352bf2015-03-25 18:17:31 -0700670 void setUserMatrix(const SkMatrix&) override;
671 void execute(SkCanvas* canvas) const override;
ethannicholasf62a8b72016-02-11 10:35:21 -0800672 Json::Value toJSON(UrlDataManager& urlDataManager) const override;
673 static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
ethannicholas50a8dd02016-02-10 05:40:46 -0800674
chudy@google.com902ebe52012-06-29 14:21:22 +0000675private:
robertphillips70171682014-10-16 14:28:28 -0700676 SkMatrix fUserMatrix;
robertphillips@google.comb94b1e72013-02-19 21:00:26 +0000677 SkMatrix fMatrix;
robertphillips@google.com0df2a9a2013-03-25 11:50:42 +0000678
679 typedef SkDrawCommand INHERITED;
chudy@google.com902ebe52012-06-29 14:21:22 +0000680};
681
chudy@google.com902ebe52012-06-29 14:21:22 +0000682#endif