blob: 93c2d2096403cbdd65aec8a8c3ffa67262646b9e [file] [log] [blame]
Florin Malitab3418102020-10-15 18:10:29 -04001/*
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 */
18class SkSVGUse final : public SkSVGTransformableNode {
19public:
Florin Malitab3418102020-10-15 18:10:29 -040020 static sk_sp<SkSVGUse> Make() { return sk_sp<SkSVGUse>(new SkSVGUse()); }
21
22 void appendChild(sk_sp<SkSVGNode>) override;
23
Tyler Denniston3df6c202021-01-14 15:37:38 -050024 SVG_ATTR(X , SkSVGLength, SkSVGLength(0))
25 SVG_ATTR(Y , SkSVGLength, SkSVGLength(0))
26 SVG_ATTR(Href, SkSVGIRI , SkSVGIRI())
Florin Malitab3418102020-10-15 18:10:29 -040027
28protected:
Florin Malitab3418102020-10-15 18:10:29 -040029 bool onPrepareToRender(SkSVGRenderContext*) const override;
30 void onRender(const SkSVGRenderContext&) const override;
31 SkPath onAsPath(const SkSVGRenderContext&) const override;
Tyler Dennistonf548a022020-10-27 15:02:02 -040032 SkRect onObjectBoundingBox(const SkSVGRenderContext&) const override;
Florin Malitab3418102020-10-15 18:10:29 -040033
34private:
35 SkSVGUse();
36
Tyler Denniston3df6c202021-01-14 15:37:38 -050037 bool parseAndSetAttribute(const char*, const char*) override;
Florin Malitab3418102020-10-15 18:10:29 -040038
39 using INHERITED = SkSVGTransformableNode;
40};
41
42#endif // SkSVGUse_DEFINED