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