Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(262)

Unified Diff: tools/json/SkJSONCanvas.h

Issue 1636563002: Initial support for turning Skia draws into a JSON document and vice versa. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: moved to /tools Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gyp/most.gyp ('k') | tools/json/SkJSONCanvas.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/json/SkJSONCanvas.h
diff --git a/tools/json/SkJSONCanvas.h b/tools/json/SkJSONCanvas.h
new file mode 100644
index 0000000000000000000000000000000000000000..fcf7c3757060838f492b6a4d63118117070dc9fb
--- /dev/null
+++ b/tools/json/SkJSONCanvas.h
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkJSONCanvas_DEFINED
+#define SkJSONCanvas_DEFINED
+
+#include "SkCanvas.h"
+#include "SkStream.h"
+
+#define SKJSONCANVAS_VERSION "version"
+#define SKJSONCANVAS_COMMANDS "commands"
+#define SKJSONCANVAS_COMMAND "command"
+
+#define SKJSONCANVAS_COMMAND_MATRIX "Matrix"
+#define SKJSONCANVAS_COMMAND_PAINT "Paint"
+#define SKJSONCANVAS_COMMAND_RECT "Rect"
+#define SKJSONCANVAS_COMMAND_OVAL "Oval"
+#define SKJSONCANVAS_COMMAND_RRECT "RRect"
+#define SKJSONCANVAS_COMMAND_DRRECT "DRRect"
+#define SKJSONCANVAS_COMMAND_POINTS "Points"
+#define SKJSONCANVAS_COMMAND_VERTICES "Vertices"
+#define SKJSONCANVAS_COMMAND_ATLAS "Atlas"
+#define SKJSONCANVAS_COMMAND_PATH "Path"
+#define SKJSONCANVAS_COMMAND_IMAGE "Image"
+#define SKJSONCANVAS_COMMAND_IMAGERECT "ImageRect"
+#define SKJSONCANVAS_COMMAND_IMAGENINE "ImageNine"
+#define SKJSONCANVAS_COMMAND_BITMAP "Bitmap"
+#define SKJSONCANVAS_COMMAND_BITMAPRECT "BitmapRect"
+#define SKJSONCANVAS_COMMAND_BITMAPNINE "BitmapNine"
+#define SKJSONCANVAS_COMMAND_TEXT "Text"
+#define SKJSONCANVAS_COMMAND_POSTEXT "PosText"
+#define SKJSONCANVAS_COMMAND_POSTEXTH "PosTextH"
+#define SKJSONCANVAS_COMMAND_TEXTONPATH "TextOnPath"
+#define SKJSONCANVAS_COMMAND_TEXTBLOB "TextBlob"
+#define SKJSONCANVAS_COMMAND_PATCH "Patch"
+#define SKJSONCANVAS_COMMAND_DRAWABLE "Drawable"
+#define SKJSONCANVAS_COMMAND_CLIPRECT "ClipRect"
+#define SKJSONCANVAS_COMMAND_CLIPRRECT "ClipRRect"
+#define SKJSONCANVAS_COMMAND_CLIPPATH "ClipPath"
+#define SKJSONCANVAS_COMMAND_CLIPREGION "ClipRegion"
+#define SKJSONCANVAS_COMMAND_SAVE "Save"
+#define SKJSONCANVAS_COMMAND_RESTORE "Restore"
+
+#define SKJSONCANVAS_ATTRIBUTE_MATRIX "matrix"
+#define SKJSONCANVAS_ATTRIBUTE_COORDS "coords"
+#define SKJSONCANVAS_ATTRIBUTE_PAINT "paint"
+#define SKJSONCANVAS_ATTRIBUTE_OUTER "outer"
+#define SKJSONCANVAS_ATTRIBUTE_INNER "inner"
+#define SKJSONCANVAS_ATTRIBUTE_MODE "mode"
+#define SKJSONCANVAS_ATTRIBUTE_POINTS "points"
+#define SKJSONCANVAS_ATTRIBUTE_PATH "path"
+#define SKJSONCANVAS_ATTRIBUTE_TEXT "text"
+#define SKJSONCANVAS_ATTRIBUTE_COLOR "color"
+#define SKJSONCANVAS_ATTRIBUTE_STYLE "style"
+#define SKJSONCANVAS_ATTRIBUTE_STROKEWIDTH "strokeWidth"
+#define SKJSONCANVAS_ATTRIBUTE_ANTIALIAS "antiAlias"
+#define SKJSONCANVAS_ATTRIBUTE_REGIONOP "op"
+#define SKJSONCANVAS_ATTRIBUTE_EDGESTYLE "edgeStyle"
+#define SKJSONCANVAS_ATTRIBUTE_DEVICEREGION "deviceRegion"
+
+#define SKJSONCANVAS_VERB_MOVE "move"
+#define SKJSONCANVAS_VERB_LINE "line"
+#define SKJSONCANVAS_VERB_QUAD "quad"
+#define SKJSONCANVAS_VERB_CUBIC "cubic"
+#define SKJSONCANVAS_VERB_CONIC "conic"
+#define SKJSONCANVAS_VERB_CLOSE "close"
+
+#define SKJSONCANVAS_STYLE_FILL "fill"
+#define SKJSONCANVAS_STYLE_STROKE "stroke"
+#define SKJSONCANVAS_STYLE_STROKEANDFILL "strokeAndFill"
+
+#define SKJSONCANVAS_EDGESTYLE_HARD "hard"
+#define SKJSONCANVAS_EDGESTYLE_SOFT "soft"
+
+#define SKJSONCANVAS_POINTMODE_POINTS "points"
+#define SKJSONCANVAS_POINTMODE_LINES "lines"
+#define SKJSONCANVAS_POINTMODE_POLYGON "polygon"
+
+#define SKJSONCANVAS_REGIONOP_DIFFERENCE "difference"
+#define SKJSONCANVAS_REGIONOP_INTERSECT "intersect"
+#define SKJSONCANVAS_REGIONOP_UNION "union"
+#define SKJSONCANVAS_REGIONOP_XOR "xor"
+#define SKJSONCANVAS_REGIONOP_REVERSE_DIFFERENCE "reverseDifference"
+#define SKJSONCANVAS_REGIONOP_REPLACE "replace"
+
+/*
+ * Implementation of SkCanvas which writes JSON when drawn to. The JSON describes all of the draw
+ * commands issued to the canvas, and can later be turned back into draw commands using
+ * SkJSONRenderer. Be sure to call finish() when you are done drawing.
+ */
+class SkJSONCanvas : public SkCanvas {
+public:
+ /* Create a canvas which writes to the specified output stream. */
+ SkJSONCanvas(int width, int height, SkWStream& out);
+
+ /* Complete the JSON document. */
+ void finish();
+
+ // overridden SkCanvas API
+
+ void onDrawPaint(const SkPaint&) override;
+
+ void onDrawRect(const SkRect&, const SkPaint&) override;
+
+ void onDrawOval(const SkRect&, const SkPaint&) override;
+
+ void onDrawRRect(const SkRRect&, const SkPaint&) override;
+
+ void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override;
+
+ void onDrawPoints(SkCanvas::PointMode, size_t count, const SkPoint pts[],
+ const SkPaint&) override;
+
+ void onDrawVertices(SkCanvas::VertexMode, int vertexCount, const SkPoint vertices[],
+ const SkPoint texs[], const SkColor colors[], SkXfermode*,
+ const uint16_t indices[], int indexCount, const SkPaint&) override;
+
+ void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[],
+ int count, SkXfermode::Mode, const SkRect* cull, const SkPaint*) override;
+
+ void onDrawPath(const SkPath&, const SkPaint&) override;
+
+ void onDrawImage(const SkImage*, SkScalar dx, SkScalar dy, const SkPaint*) override;
+
+ void onDrawImageRect(const SkImage*, const SkRect*, const SkRect&, const SkPaint*,
+ SrcRectConstraint) override;
+
+ void onDrawImageNine(const SkImage*, const SkIRect& center, const SkRect& dst,
+ const SkPaint*) override;
+
+ void onDrawBitmap(const SkBitmap&, SkScalar dx, SkScalar dy, const SkPaint*) override;
+
+ void onDrawBitmapRect(const SkBitmap&, const SkRect*, const SkRect&, const SkPaint*,
+ SkCanvas::SrcRectConstraint) override;
+
+ void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst,
+ const SkPaint*) override;
+
+ void onDrawText(const void* text, size_t byteLength, SkScalar x,
+ SkScalar y, const SkPaint& paint) override;
+
+ void onDrawPosText(const void* text, size_t byteLength,
+ const SkPoint pos[], const SkPaint& paint) override;
+
+ void onDrawPosTextH(const void* text, size_t byteLength,
+ const SkScalar xpos[], SkScalar constY,
+ const SkPaint& paint) override;
+
+ void onDrawTextOnPath(const void* text, size_t byteLength,
+ const SkPath& path, const SkMatrix* matrix,
+ const SkPaint& paint) override;
+
+ void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
+ const SkPaint& paint) override;
+
+ void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
+ const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint) override;
+
+ void onDrawDrawable(SkDrawable*, const SkMatrix*) override;
+
+ void onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edgeStyle) override;
+
+ void onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeStyle) override;
+
+ void onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle) override;
+
+ void onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) override;
+
+ void willSave() override;
+
+ void willRestore() override;
+
+private:
+ void writef(const char* fmt, ...);
+
+ void open(const char* name);
+
+ void close();
+
+ void writeString(const char* name, const char* text);
+
+ void writeString(const char* name, const void* text, size_t length);
+
+ void writePoint(const char* name, const SkPoint& point);
+
+ void writeRect(const char* name, const SkRect& rect);
+
+ void writeRRect(const char* name, const SkRRect& rrect);
+
+ void writePath(const char* name, const SkPath& path);
+
+ void writeRegion(const char* name, const SkRegion& region);
+
+ void writePaint(const SkPaint& paint);
+
+ void writeRegionOp(const char* name, SkRegion::Op op);
+
+ void writeEdgeStyle(const char* name, SkCanvas::ClipEdgeStyle edgeStyle);
+
+ void writePointMode(const char* name, SkCanvas::PointMode mode);
+
+ void writeMatrix(const char* name, const SkMatrix& matrix);
+
+ void updateMatrix();
+
+ SkWStream& fOut;
+ SkMatrix fLastMatrix;
+ bool fFirstCommand;
+
+ typedef SkCanvas INHERITED;
+};
+
+#endif
« no previous file with comments | « gyp/most.gyp ('k') | tools/json/SkJSONCanvas.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698