1 /*
2  * Copyright 2019 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 SkSVGText_DEFINED
9 #define SkSVGText_DEFINED
10 
11 #include "include/utils/SkTextUtils.h"
12 #include "modules/svg/include/SkSVGTransformableNode.h"
13 #include "modules/svg/include/SkSVGTypes.h"
14 
15 class SkRRect;
16 
17 class SkSVGText final : public SkSVGTransformableNode {
18  public:
19   ~SkSVGText() override = default;
Make()20   static sk_sp<SkSVGText> Make() {
21     return sk_sp<SkSVGText>(new SkSVGText()); }
22 
23   SVG_ATTR(X   , SkSVGLength    , SkSVGLength(0))
24   SVG_ATTR(Y   , SkSVGLength    , SkSVGLength(0))
25   SVG_ATTR(Text, SkSVGStringType, SkSVGStringType())
26 
27  protected:
28   void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
29 
30   void onRender(const SkSVGRenderContext&) const override;
31   void appendChild(sk_sp<SkSVGNode>) override;
32 
33   SkPath onAsPath(const SkSVGRenderContext&) const override;
34 
35   void loadFont();
36 
37  private:
38   SkSVGText();
39 
40   SkFont resolveFont(const SkSVGRenderContext&) const;
41 
42   using INHERITED = SkSVGTransformableNode;
43 };
44 
45 #endif  // SkSVGText_DEFINED
46