• 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/core/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 protected:
36     bool onPrepareToRender(SkSVGRenderContext*) const override;
37 
38     void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
39 
40 private:
SkSVGSVG(Type t)41     explicit SkSVGSVG(Type t)
42         : INHERITED(SkSVGTag::kSvg)
43         , fType(t)
44     {}
45 
46     // Some attributes behave differently for the outermost svg element.
47     const Type fType;
48 
49     using INHERITED = SkSVGContainer;
50 };
51 
52 #endif // SkSVGSVG_DEFINED
53