• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2016 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 SkSVGSVG_DEFINED
9 #define SkSVGSVG_DEFINED
10 
11 #include "modules/svg/include/SkSVGContainer.h"
12 #include "modules/svg/include/SkSVGTypes.h"
13 #include "src/base/SkTLazy.h"
14 
15 class SkSVGLengthContext;
16 
17 class SkSVGSVG : public SkSVGContainer {
18 public:
19     enum class Type {
20         kRoot,
21         kInner,
22     };
23     static sk_sp<SkSVGSVG> Make(Type t = Type::kInner) { return sk_sp<SkSVGSVG>(new SkSVGSVG(t)); }
24 
25     SVG_ATTR(X                  , SkSVGLength, SkSVGLength(0))
26     SVG_ATTR(Y                  , SkSVGLength, SkSVGLength(0))
27     SVG_ATTR(Width              , SkSVGLength, SkSVGLength(100, SkSVGLength::Unit::kPercentage))
28     SVG_ATTR(Height             , SkSVGLength, SkSVGLength(100, SkSVGLength::Unit::kPercentage))
29     SVG_ATTR(PreserveAspectRatio, SkSVGPreserveAspectRatio, SkSVGPreserveAspectRatio())
30 
31     SVG_OPTIONAL_ATTR(ViewBox, SkSVGViewBoxType)
32 
33     SkSize intrinsicSize(const SkSVGLengthContext&) const;
34 
35     void renderNode(const SkSVGRenderContext&, const SkSVGIRI& iri) const;
36 
37 protected:
38     bool onPrepareToRender(SkSVGRenderContext*) const override;
39 
40     void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
41 
42 private:
SkSVGSVG(Type t)43     explicit SkSVGSVG(Type t)
44         : INHERITED(SkSVGTag::kSvg)
45         , fType(t)
46     {}
47 
48     // Some attributes behave differently for the outermost svg element.
49     const Type fType;
50 
51     using INHERITED = SkSVGContainer;
52 };
53 
54 #endif // SkSVGSVG_DEFINED
55