1 /* 2 * Copyright 2017 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 SkSVGUse_DEFINED 9 #define SkSVGUse_DEFINED 10 11 #include "modules/svg/include/SkSVGTransformableNode.h" 12 #include "modules/svg/include/SkSVGTypes.h" 13 14 /** 15 * Implements support for <use> (reference) elements. 16 * (https://www.w3.org/TR/SVG11/struct.html#UseElement) 17 */ 18 class SkSVGUse final : public SkSVGTransformableNode { 19 public: Make()20 static sk_sp<SkSVGUse> Make() { return sk_sp<SkSVGUse>(new SkSVGUse()); } 21 22 void appendChild(sk_sp<SkSVGNode>) override; 23 24 SVG_ATTR(X , SkSVGLength, SkSVGLength(0)) 25 SVG_ATTR(Y , SkSVGLength, SkSVGLength(0)) 26 SVG_ATTR(Href, SkSVGIRI , SkSVGIRI()) 27 28 protected: 29 bool onPrepareToRender(SkSVGRenderContext*) const override; 30 void onRender(const SkSVGRenderContext&) const override; 31 SkPath onAsPath(const SkSVGRenderContext&) const override; 32 SkRect onObjectBoundingBox(const SkSVGRenderContext&) const override; 33 34 private: 35 SkSVGUse(); 36 37 bool parseAndSetAttribute(const char*, const char*) override; 38 39 using INHERITED = SkSVGTransformableNode; 40 }; 41 42 #endif // SkSVGUse_DEFINED 43