blob: 55fad5f8c43c145697b426e63e46fefeee4ff2f6 [file] [log] [blame]
Florin Malitab3418102020-10-15 18:10:29 -04001/*
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
15class SkSVGLengthContext;
16
17class SkSVGSVG : public SkSVGContainer {
18public:
Florin Malitacdeabca2021-01-20 13:21:20 -050019 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)); }
Florin Malitab3418102020-10-15 18:10:29 -040024
Florin Malita385e7442020-10-21 16:55:46 -040025 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
Florin Malitacdeabca2021-01-20 13:21:20 -050031 SVG_OPTIONAL_ATTR(ViewBox, SkSVGViewBoxType)
Florin Malitab3418102020-10-15 18:10:29 -040032
33 SkSize intrinsicSize(const SkSVGLengthContext&) const;
34
35protected:
36 bool onPrepareToRender(SkSVGRenderContext*) const override;
37
38 void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
39
40private:
Florin Malitacdeabca2021-01-20 13:21:20 -050041 explicit SkSVGSVG(Type t)
42 : INHERITED(SkSVGTag::kSvg)
43 , fType(t)
44 {}
Florin Malitab3418102020-10-15 18:10:29 -040045
Florin Malitacdeabca2021-01-20 13:21:20 -050046 // Some attributes behave differently for the outermost svg element.
47 const Type fType;
Florin Malitab3418102020-10-15 18:10:29 -040048
49 using INHERITED = SkSVGContainer;
50};
51
52#endif // SkSVGSVG_DEFINED