"experimental/svg/model/SkSVGCircle.cpp",
"experimental/svg/model/SkSVGDOM.cpp",
"experimental/svg/model/SkSVGEllipse.cpp",
+ "experimental/svg/model/SkSVGLine.cpp",
"experimental/svg/model/SkSVGNode.cpp",
"experimental/svg/model/SkSVGPath.cpp",
"experimental/svg/model/SkSVGPoly.cpp",
kViewBox,
kWidth,
kX,
+ kX1, // <line>: first endpoint x
+ kX2, // <line>: second endpoint x
kY,
+ kY1, // <line>: first endpoint y
+ kY2, // <line>: second endpoint y
kUnknown,
};
#include "SkSVGDOM.h"
#include "SkSVGEllipse.h"
#include "SkSVGG.h"
+#include "SkSVGLine.h"
#include "SkSVGNode.h"
#include "SkSVGPath.h"
#include "SkSVGPoly.h"
{ "viewBox" , { SkSVGAttribute::kViewBox , SetViewBoxAttribute }},
{ "width" , { SkSVGAttribute::kWidth , SetLengthAttribute }},
{ "x" , { SkSVGAttribute::kX , SetLengthAttribute }},
+ { "x1" , { SkSVGAttribute::kX1 , SetLengthAttribute }},
+ { "x2" , { SkSVGAttribute::kX2 , SetLengthAttribute }},
{ "y" , { SkSVGAttribute::kY , SetLengthAttribute }},
+ { "y1" , { SkSVGAttribute::kY1 , SetLengthAttribute }},
+ { "y2" , { SkSVGAttribute::kY2 , SetLengthAttribute }},
};
SortedDictionaryEntry<sk_sp<SkSVGNode>(*)()> gTagFactories[] = {
{ "circle" , []() -> sk_sp<SkSVGNode> { return SkSVGCircle::Make(); }},
{ "ellipse" , []() -> sk_sp<SkSVGNode> { return SkSVGEllipse::Make(); }},
{ "g" , []() -> sk_sp<SkSVGNode> { return SkSVGG::Make(); }},
+ { "line" , []() -> sk_sp<SkSVGNode> { return SkSVGLine::Make(); }},
{ "path" , []() -> sk_sp<SkSVGNode> { return SkSVGPath::Make(); }},
{ "polygon" , []() -> sk_sp<SkSVGNode> { return SkSVGPoly::MakePolygon(); }},
{ "polyline", []() -> sk_sp<SkSVGNode> { return SkSVGPoly::MakePolyline(); }},
--- /dev/null
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "SkCanvas.h"
+#include "SkSVGLine.h"
+#include "SkSVGRenderContext.h"
+#include "SkSVGValue.h"
+
+SkSVGLine::SkSVGLine() : INHERITED(SkSVGTag::kLine) {}
+
+void SkSVGLine::setX1(const SkSVGLength& x1) {
+ fX1 = x1;
+}
+
+void SkSVGLine::setY1(const SkSVGLength& y1) {
+ fY1 = y1;
+}
+
+void SkSVGLine::setX2(const SkSVGLength& x2) {
+ fX2 = x2;
+}
+
+void SkSVGLine::setY2(const SkSVGLength& y2) {
+ fY2 = y2;
+}
+
+void SkSVGLine::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) {
+ switch (attr) {
+ case SkSVGAttribute::kX1:
+ if (const auto* x1 = v.as<SkSVGLengthValue>()) {
+ this->setX1(*x1);
+ }
+ break;
+ case SkSVGAttribute::kY1:
+ if (const auto* y1 = v.as<SkSVGLengthValue>()) {
+ this->setY1(*y1);
+ }
+ break;
+ case SkSVGAttribute::kX2:
+ if (const auto* x2 = v.as<SkSVGLengthValue>()) {
+ this->setX2(*x2);
+ }
+ break;
+ case SkSVGAttribute::kY2:
+ if (const auto* y2 = v.as<SkSVGLengthValue>()) {
+ this->setY2(*y2);
+ }
+ break;
+ default:
+ this->INHERITED::onSetAttribute(attr, v);
+ }
+}
+
+void SkSVGLine::onDraw(SkCanvas* canvas, const SkSVGLengthContext& lctx,
+ const SkPaint& paint) const {
+ const auto x1 = lctx.resolve(fX1, SkSVGLengthContext::LengthType::kHorizontal);
+ const auto y1 = lctx.resolve(fY1, SkSVGLengthContext::LengthType::kVertical);
+ const auto x2 = lctx.resolve(fX2, SkSVGLengthContext::LengthType::kHorizontal);
+ const auto y2 = lctx.resolve(fY2, SkSVGLengthContext::LengthType::kVertical);
+
+ canvas->drawLine(x1, y1, x2, y2, paint);
+}
--- /dev/null
+/*
+ * 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 SkSVGLine_DEFINED
+#define SkSVGLine_DEFINED
+
+#include "SkSVGShape.h"
+#include "SkSVGTypes.h"
+
+class SkSVGLine final : public SkSVGShape {
+public:
+ virtual ~SkSVGLine() = default;
+ static sk_sp<SkSVGLine> Make() { return sk_sp<SkSVGLine>(new SkSVGLine()); }
+
+ void setX1(const SkSVGLength&);
+ void setY1(const SkSVGLength&);
+ void setX2(const SkSVGLength&);
+ void setY2(const SkSVGLength&);
+
+protected:
+ void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
+
+ void onDraw(SkCanvas*, const SkSVGLengthContext&, const SkPaint&) const override;
+
+private:
+ SkSVGLine();
+
+ SkSVGLength fX1 = SkSVGLength(0);
+ SkSVGLength fY1 = SkSVGLength(0);
+ SkSVGLength fX2 = SkSVGLength(0);
+ SkSVGLength fY2 = SkSVGLength(0);
+
+ typedef SkSVGShape INHERITED;
+};
+
+#endif // SkSVGLine_DEFINED
kCircle,
kEllipse,
kG,
+ kLine,
kPath,
kPolygon,
kPolyline,
'../experimental/svg/model/SkSVGEllipse.h',
'../experimental/svg/model/SkSVGEllipse.cpp',
'../experimental/svg/model/SkSVGG.h',
+ '../experimental/svg/model/SkSVGLine.h',
+ '../experimental/svg/model/SkSVGLine.cpp',
'../experimental/svg/model/SkSVGNode.h',
'../experimental/svg/model/SkSVGNode.cpp',
'../experimental/svg/model/SkSVGPath.h',