Skia
2D Graphics Library
SkSVGSVG.h
Go to the documentation of this file.
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 
13 #include "src/base/SkTLazy.h"
14 
15 class SkSVGLengthContext;
16 
17 class SK_API 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 
27  SVG_ATTR(Width , SkSVGLength, SkSVGLength(100, SkSVGLength::Unit::kPercentage))
28  SVG_ATTR(Height , SkSVGLength, SkSVGLength(100, SkSVGLength::Unit::kPercentage))
30 
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:
43  explicit SkSVGSVG(Type t)
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
SkSVGAttribute
Definition: SkSVGAttribute.h:16
#define SVG_OPTIONAL_ATTR(attr_name, attr_type)
Definition: SkSVGNode.h:213
SkSVGTag
Definition: SkSVGNode.h:23
#define SVG_ATTR(attr_name, attr_type, attr_default)
Definition: SkSVGNode.h:203
Definition: SkSVGContainer.h:14
SkSVGContainer(SkSVGTag)
Definition: SkSVGTypes.h:152
Definition: SkSVGRenderContext.h:27
Definition: SkSVGTypes.h:116
Definition: SkSVGRenderContext.h:61
Definition: SkSVGSVG.h:17
static sk_sp< SkSVGSVG > Make(Type t=Type::kInner)
Definition: SkSVGSVG.h:23
Type
Definition: SkSVGSVG.h:19
Definition: SkSVGTransformableNode.h:14
Definition: SkSVGValue.h:18
SkRect holds four float coordinates describing the upper and lower bounds of a rectangle.
Definition: SkRect.h:582
Definition: SkSVGTypes.h:585
Definition: SkSize.h:51