OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright 2016 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 SkJSONCanvas_DEFINED | |
9 #define SkJSONCanvas_DEFINED | |
10 | |
11 #include "SkCanvas.h" | |
12 #include "SkStream.h" | |
13 #include "SkJSONCPP.h" | |
14 | |
15 #define SKJSONCANVAS_VERSION "version" | |
16 #define SKJSONCANVAS_COMMANDS "commands" | |
17 #define SKJSONCANVAS_COMMAND "command" | |
18 | |
19 #define SKJSONCANVAS_COMMAND_TRANSLATE "Translate" | |
20 #define SKJSONCANVAS_COMMAND_SCALE "Scale" | |
21 #define SKJSONCANVAS_COMMAND_MATRIX "Matrix" | |
22 #define SKJSONCANVAS_COMMAND_PAINT "Paint" | |
23 #define SKJSONCANVAS_COMMAND_RECT "Rect" | |
24 #define SKJSONCANVAS_COMMAND_OVAL "Oval" | |
25 #define SKJSONCANVAS_COMMAND_RRECT "RRect" | |
26 #define SKJSONCANVAS_COMMAND_DRRECT "DRRect" | |
27 #define SKJSONCANVAS_COMMAND_POINTS "Points" | |
28 #define SKJSONCANVAS_COMMAND_VERTICES "Vertices" | |
29 #define SKJSONCANVAS_COMMAND_ATLAS "Atlas" | |
30 #define SKJSONCANVAS_COMMAND_PATH "Path" | |
31 #define SKJSONCANVAS_COMMAND_IMAGE "Image" | |
32 #define SKJSONCANVAS_COMMAND_IMAGERECT "ImageRect" | |
33 #define SKJSONCANVAS_COMMAND_IMAGENINE "ImageNine" | |
34 #define SKJSONCANVAS_COMMAND_BITMAP "Bitmap" | |
35 #define SKJSONCANVAS_COMMAND_BITMAPRECT "BitmapRect" | |
36 #define SKJSONCANVAS_COMMAND_BITMAPNINE "BitmapNine" | |
37 #define SKJSONCANVAS_COMMAND_TEXT "Text" | |
38 #define SKJSONCANVAS_COMMAND_POSTEXT "PosText" | |
39 #define SKJSONCANVAS_COMMAND_POSTEXTH "PosTextH" | |
40 #define SKJSONCANVAS_COMMAND_TEXTONPATH "TextOnPath" | |
41 #define SKJSONCANVAS_COMMAND_TEXTBLOB "TextBlob" | |
42 #define SKJSONCANVAS_COMMAND_PATCH "Patch" | |
43 #define SKJSONCANVAS_COMMAND_DRAWABLE "Drawable" | |
44 #define SKJSONCANVAS_COMMAND_CLIPRECT "ClipRect" | |
45 #define SKJSONCANVAS_COMMAND_CLIPRRECT "ClipRRect" | |
46 #define SKJSONCANVAS_COMMAND_CLIPPATH "ClipPath" | |
47 #define SKJSONCANVAS_COMMAND_CLIPREGION "ClipRegion" | |
48 #define SKJSONCANVAS_COMMAND_SAVE "Save" | |
49 #define SKJSONCANVAS_COMMAND_RESTORE "Restore" | |
50 #define SKJSONCANVAS_COMMAND_SAVELAYER "SaveLayer" | |
51 | |
52 #define SKJSONCANVAS_ATTRIBUTE_MATRIX "matrix" | |
53 #define SKJSONCANVAS_ATTRIBUTE_COORDS "coords" | |
54 #define SKJSONCANVAS_ATTRIBUTE_BOUNDS "bounds" | |
55 #define SKJSONCANVAS_ATTRIBUTE_PAINT "paint" | |
56 #define SKJSONCANVAS_ATTRIBUTE_OUTER "outer" | |
57 #define SKJSONCANVAS_ATTRIBUTE_INNER "inner" | |
58 #define SKJSONCANVAS_ATTRIBUTE_MODE "mode" | |
59 #define SKJSONCANVAS_ATTRIBUTE_POINTS "points" | |
60 #define SKJSONCANVAS_ATTRIBUTE_PATH "path" | |
61 #define SKJSONCANVAS_ATTRIBUTE_TEXT "text" | |
62 #define SKJSONCANVAS_ATTRIBUTE_COLOR "color" | |
63 #define SKJSONCANVAS_ATTRIBUTE_ALPHA "alpha" | |
64 #define SKJSONCANVAS_ATTRIBUTE_STYLE "style" | |
65 #define SKJSONCANVAS_ATTRIBUTE_STROKEWIDTH "strokeWidth" | |
66 #define SKJSONCANVAS_ATTRIBUTE_STROKEMITER "strokeMiter" | |
67 #define SKJSONCANVAS_ATTRIBUTE_CAP "cap" | |
68 #define SKJSONCANVAS_ATTRIBUTE_ANTIALIAS "antiAlias" | |
69 #define SKJSONCANVAS_ATTRIBUTE_REGION "region" | |
70 #define SKJSONCANVAS_ATTRIBUTE_REGIONOP "op" | |
71 #define SKJSONCANVAS_ATTRIBUTE_EDGESTYLE "edgeStyle" | |
72 #define SKJSONCANVAS_ATTRIBUTE_DEVICEREGION "deviceRegion" | |
73 #define SKJSONCANVAS_ATTRIBUTE_BLUR "blur" | |
74 #define SKJSONCANVAS_ATTRIBUTE_SIGMA "sigma" | |
75 #define SKJSONCANVAS_ATTRIBUTE_QUALITY "quality" | |
76 #define SKJSONCANVAS_ATTRIBUTE_TEXTALIGN "textAlign" | |
77 #define SKJSONCANVAS_ATTRIBUTE_TEXTSIZE "textSize" | |
78 #define SKJSONCANVAS_ATTRIBUTE_TEXTSCALEX "textScaleX" | |
79 #define SKJSONCANVAS_ATTRIBUTE_TEXTSKEWX "textSkewX" | |
80 #define SKJSONCANVAS_ATTRIBUTE_DASHING "dashing" | |
81 #define SKJSONCANVAS_ATTRIBUTE_INTERVALS "intervals" | |
82 #define SKJSONCANVAS_ATTRIBUTE_PHASE "phase" | |
83 #define SKJSONCANVAS_ATTRIBUTE_FILLTYPE "fillType" | |
84 #define SKJSONCANVAS_ATTRIBUTE_VERBS "verbs" | |
85 #define SKJSONCANVAS_ATTRIBUTE_NAME "name" | |
86 #define SKJSONCANVAS_ATTRIBUTE_BYTES "bytes" | |
87 #define SKJSONCANVAS_ATTRIBUTE_SHADER "shader" | |
88 #define SKJSONCANVAS_ATTRIBUTE_PATHEFFECT "pathEffect" | |
89 #define SKJSONCANVAS_ATTRIBUTE_MASKFILTER "maskFilter" | |
90 #define SKJSONCANVAS_ATTRIBUTE_XFERMODE "xfermode" | |
91 #define SKJSONCANVAS_ATTRIBUTE_BACKDROP "backdrop" | |
92 #define SKJSONCANVAS_ATTRIBUTE_COLORFILTER "colorfilter" | |
93 #define SKJSONCANVAS_ATTRIBUTE_IMAGEFILTER "imagefilter" | |
94 #define SKJSONCANVAS_ATTRIBUTE_IMAGE "image" | |
95 #define SKJSONCANVAS_ATTRIBUTE_BITMAP "bitmap" | |
96 #define SKJSONCANVAS_ATTRIBUTE_SRC "src" | |
97 #define SKJSONCANVAS_ATTRIBUTE_DST "dst" | |
98 #define SKJSONCANVAS_ATTRIBUTE_STRICT "strict" | |
99 #define SKJSONCANVAS_ATTRIBUTE_DESCRIPTION "description" | |
100 #define SKJSONCANVAS_ATTRIBUTE_X "x" | |
101 #define SKJSONCANVAS_ATTRIBUTE_Y "y" | |
102 #define SKJSONCANVAS_ATTRIBUTE_RUNS "runs" | |
103 #define SKJSONCANVAS_ATTRIBUTE_POSITIONS "positions" | |
104 #define SKJSONCANVAS_ATTRIBUTE_GLYPHS "glyphs" | |
105 #define SKJSONCANVAS_ATTRIBUTE_FONT "font" | |
106 #define SKJSONCANVAS_ATTRIBUTE_TYPEFACE "typeface" | |
107 | |
108 #define SKJSONCANVAS_VERB_MOVE "move" | |
109 #define SKJSONCANVAS_VERB_LINE "line" | |
110 #define SKJSONCANVAS_VERB_QUAD "quad" | |
111 #define SKJSONCANVAS_VERB_CUBIC "cubic" | |
112 #define SKJSONCANVAS_VERB_CONIC "conic" | |
113 #define SKJSONCANVAS_VERB_CLOSE "close" | |
114 | |
115 #define SKJSONCANVAS_STYLE_FILL "fill" | |
116 #define SKJSONCANVAS_STYLE_STROKE "stroke" | |
117 #define SKJSONCANVAS_STYLE_STROKEANDFILL "strokeAndFill" | |
118 | |
119 #define SKJSONCANVAS_POINTMODE_POINTS "points" | |
120 #define SKJSONCANVAS_POINTMODE_LINES "lines" | |
121 #define SKJSONCANVAS_POINTMODE_POLYGON "polygon" | |
122 | |
123 #define SKJSONCANVAS_REGIONOP_DIFFERENCE "difference" | |
124 #define SKJSONCANVAS_REGIONOP_INTERSECT "intersect" | |
125 #define SKJSONCANVAS_REGIONOP_UNION "union" | |
126 #define SKJSONCANVAS_REGIONOP_XOR "xor" | |
127 #define SKJSONCANVAS_REGIONOP_REVERSE_DIFFERENCE "reverseDifference" | |
128 #define SKJSONCANVAS_REGIONOP_REPLACE "replace" | |
129 | |
130 #define SKJSONCANVAS_BLURSTYLE_NORMAL "normal" | |
131 #define SKJSONCANVAS_BLURSTYLE_SOLID "solid" | |
132 #define SKJSONCANVAS_BLURSTYLE_OUTER "outer" | |
133 #define SKJSONCANVAS_BLURSTYLE_INNER "inner" | |
134 | |
135 #define SKJSONCANVAS_BLURQUALITY_LOW "low" | |
136 #define SKJSONCANVAS_BLURQUALITY_HIGH "high" | |
137 | |
138 #define SKJSONCANVAS_ALIGN_LEFT "left" | |
139 #define SKJSONCANVAS_ALIGN_CENTER "center" | |
140 #define SKJSONCANVAS_ALIGN_RIGHT "right" | |
141 | |
142 #define SKJSONCANVAS_FILLTYPE_WINDING "winding" | |
143 #define SKJSONCANVAS_FILLTYPE_EVENODD "evenOdd" | |
144 #define SKJSONCANVAS_FILLTYPE_INVERSEWINDING "inverseWinding" | |
145 #define SKJSONCANVAS_FILLTYPE_INVERSEEVENODD "inverseEvenOdd" | |
146 | |
147 #define SKJSONCANVAS_CAP_BUTT "butt" | |
148 #define SKJSONCANVAS_CAP_ROUND "round" | |
149 #define SKJSONCANVAS_CAP_SQUARE "square" | |
150 | |
151 #define SKJSONCANVAS_COLORTYPE_ARGB4444 "ARGB4444" | |
152 #define SKJSONCANVAS_COLORTYPE_RGBA8888 "RGBA8888" | |
153 #define SKJSONCANVAS_COLORTYPE_BGRA8888 "BGRA8888" | |
154 #define SKJSONCANVAS_COLORTYPE_565 "565" | |
155 #define SKJSONCANVAS_COLORTYPE_GRAY8 "Gray8" | |
156 #define SKJSONCANVAS_COLORTYPE_INDEX8 "Index8" | |
157 #define SKJSONCANVAS_COLORTYPE_ALPHA8 "Alpha8" | |
158 | |
159 #define SKJSONCANVAS_ALPHATYPE_OPAQUE "opaque" | |
160 #define SKJSONCANVAS_ALPHATYPE_PREMUL "premul" | |
161 #define SKJSONCANVAS_ALPHATYPE_UNPREMUL "unpremul" | |
162 | |
163 /* | |
164 * Implementation of SkCanvas which writes JSON when drawn to. The JSON describe
s all of the draw | |
165 * commands issued to the canvas, and can later be turned back into draw command
s using | |
166 * SkJSONRenderer. Be sure to call finish() when you are done drawing. | |
167 */ | |
168 class SkJSONCanvas : public SkCanvas { | |
169 public: | |
170 /* Create a canvas which writes to the specified output stream. */ | |
171 SkJSONCanvas(int width, int height, SkWStream& out, bool sendBinaries = fals
e); | |
172 | |
173 /* Complete the JSON document. */ | |
174 void finish(); | |
175 | |
176 static Json::Value MakeMatrix(const SkMatrix& matrix); | |
177 | |
178 static Json::Value MakeIRect(const SkIRect& irect); | |
179 | |
180 // overridden SkCanvas API | |
181 | |
182 void didConcat(const SkMatrix&) override; | |
183 | |
184 void didSetMatrix(const SkMatrix&) override; | |
185 | |
186 void onDrawPaint(const SkPaint&) override; | |
187 | |
188 void onDrawRect(const SkRect&, const SkPaint&) override; | |
189 | |
190 void onDrawOval(const SkRect&, const SkPaint&) override; | |
191 | |
192 void onDrawRRect(const SkRRect&, const SkPaint&) override; | |
193 | |
194 void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override; | |
195 | |
196 void onDrawPoints(SkCanvas::PointMode, size_t count, const SkPoint pts[], | |
197 const SkPaint&) override; | |
198 | |
199 void onDrawVertices(SkCanvas::VertexMode, int vertexCount, const SkPoint ver
tices[], | |
200 const SkPoint texs[], const SkColor colors[], SkXfermode
*, | |
201 const uint16_t indices[], int indexCount, const SkPaint&
) override; | |
202 | |
203 void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const Sk
Color[], | |
204 int count, SkXfermode::Mode, const SkRect* cull, const SkPa
int*) override; | |
205 | |
206 void onDrawPath(const SkPath&, const SkPaint&) override; | |
207 | |
208 void onDrawImage(const SkImage*, SkScalar dx, SkScalar dy, const SkPaint*) o
verride; | |
209 | |
210 void onDrawImageRect(const SkImage*, const SkRect*, const SkRect&, const SkP
aint*, | |
211 SrcRectConstraint) override; | |
212 | |
213 void onDrawImageNine(const SkImage*, const SkIRect& center, const SkRect& ds
t, | |
214 const SkPaint*) override; | |
215 | |
216 void onDrawBitmap(const SkBitmap&, SkScalar dx, SkScalar dy, const SkPaint*)
override; | |
217 | |
218 void onDrawBitmapRect(const SkBitmap&, const SkRect*, const SkRect&, const S
kPaint*, | |
219 SkCanvas::SrcRectConstraint) override; | |
220 | |
221 void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect&
dst, | |
222 const SkPaint*) override; | |
223 | |
224 void onDrawText(const void* text, size_t byteLength, SkScalar x, | |
225 SkScalar y, const SkPaint& paint) override; | |
226 | |
227 void onDrawPosText(const void* text, size_t byteLength, | |
228 const SkPoint pos[], const SkPaint& paint) override; | |
229 | |
230 void onDrawPosTextH(const void* text, size_t byteLength, | |
231 const SkScalar xpos[], SkScalar constY, | |
232 const SkPaint& paint) override; | |
233 | |
234 void onDrawTextOnPath(const void* text, size_t byteLength, | |
235 const SkPath& path, const SkMatrix* matrix, | |
236 const SkPaint& paint) override; | |
237 | |
238 void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, | |
239 const SkPaint& paint) override; | |
240 | |
241 void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], | |
242 const SkPoint texCoords[4], SkXfermode* xmode, const SkPain
t& paint) override; | |
243 | |
244 void onDrawDrawable(SkDrawable*, const SkMatrix*) override; | |
245 | |
246 void onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edgeStyle
) override; | |
247 | |
248 void onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeSt
yle) override; | |
249 | |
250 void onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle
) override; | |
251 | |
252 void onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) override; | |
253 | |
254 void willSave() override; | |
255 | |
256 void willRestore() override; | |
257 | |
258 SkCanvas::SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec& rec) ov
erride; | |
259 | |
260 private: | |
261 // Helpers to turn values into JSON, these could probably be static | |
262 Json::Value makePoint(const SkPoint& point); | |
263 | |
264 Json::Value makePoint(SkScalar x, SkScalar y); | |
265 | |
266 Json::Value makeRect(const SkRect& rect); | |
267 | |
268 Json::Value makeRRect(const SkRRect& rrect); | |
269 | |
270 Json::Value makePath(const SkPath& path); | |
271 | |
272 Json::Value makeRegion(const SkRegion& region); | |
273 | |
274 Json::Value makePaint(const SkPaint& paint); | |
275 | |
276 Json::Value makeRegionOp(SkRegion::Op op); | |
277 | |
278 Json::Value makeEdgeStyle(SkCanvas::ClipEdgeStyle edgeStyle); | |
279 | |
280 Json::Value makePointMode(SkCanvas::PointMode mode); | |
281 | |
282 void updateMatrix(); | |
283 | |
284 SkWStream& fOut; | |
285 Json::Value fRoot; | |
286 Json::Value fCommands; | |
287 bool fSendBinaries; | |
288 | |
289 typedef SkCanvas INHERITED; | |
290 }; | |
291 | |
292 #endif | |
OLD | NEW |