Initial SVG model
A minimal subset needed to render tiger.svg: <svg>, <g>, <path>, 'd', 'fill'/'stroke' (color-only), 'transform'.
R=reed@google.com,robertphillips@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2164193002
Review-Url: https://codereview.chromium.org/2164193002
diff --git a/experimental/svg/model/SkSVGNode.h b/experimental/svg/model/SkSVGNode.h
new file mode 100644
index 0000000..de18014
--- /dev/null
+++ b/experimental/svg/model/SkSVGNode.h
@@ -0,0 +1,56 @@
+/*
+ * 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 SkSVGNode_DEFINED
+#define SkSVGNode_DEFINED
+
+#include "SkRefCnt.h"
+#include "SkSVGAttribute.h"
+
+class SkCanvas;
+class SkMatrix;
+class SkSVGRenderContext;
+class SkSVGValue;
+
+enum class SkSVGTag {
+ g,
+ path,
+ svg
+};
+
+class SkSVGNode : public SkRefCnt {
+public:
+ virtual ~SkSVGNode();
+
+ SkSVGTag tag() const { return fTag; }
+
+ virtual void appendChild(sk_sp<SkSVGNode>) = 0;
+
+ void render(SkCanvas*) const;
+ void render(SkCanvas*, const SkSVGRenderContext&) const;
+
+ void setAttribute(SkSVGAttribute, const SkSVGValue&);
+
+protected:
+ SkSVGNode(SkSVGTag);
+
+ virtual void onRender(SkCanvas*, const SkSVGRenderContext&) const = 0;
+
+ virtual void onSetAttribute(SkSVGAttribute, const SkSVGValue&);
+
+ virtual const SkMatrix& onLocalMatrix() const;
+
+private:
+ SkSVGTag fTag;
+
+ // FIXME: this should be sparse
+ SkSVGPresentationAttributes fPresentationAttributes;
+
+ typedef SkRefCnt INHERITED;
+};
+
+#endif // SkSVGNode_DEFINED