blob: c5659135f68ffaf91884a8c62c53e3b4ad04f687 [file] [log] [blame]
fmalita6ceef3d2016-07-26 18:46:34 -07001/*
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 SkSVGDOM_DEFINED
9#define SkSVGDOM_DEFINED
10
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "experimental/svg/model/SkSVGIDMapper.h"
12#include "include/core/SkRefCnt.h"
13#include "include/core/SkSize.h"
14#include "include/private/SkTemplates.h"
fmalita6ceef3d2016-07-26 18:46:34 -070015
16class SkCanvas;
17class SkDOM;
18class SkStream;
19class SkSVGNode;
20
21class SkSVGDOM : public SkRefCnt {
22public:
fmalitae1baa7c2016-09-14 12:04:30 -070023 SkSVGDOM();
fmalita6ceef3d2016-07-26 18:46:34 -070024 ~SkSVGDOM() = default;
25
fmalitae1baa7c2016-09-14 12:04:30 -070026 static sk_sp<SkSVGDOM> MakeFromDOM(const SkDOM&);
27 static sk_sp<SkSVGDOM> MakeFromStream(SkStream&);
fmalita6ceef3d2016-07-26 18:46:34 -070028
fmalitae1baa7c2016-09-14 12:04:30 -070029 const SkSize& containerSize() const;
fmalita6ceef3d2016-07-26 18:46:34 -070030 void setContainerSize(const SkSize&);
fmalitae1baa7c2016-09-14 12:04:30 -070031
fmalitaca39d712016-08-12 13:17:11 -070032 void setRoot(sk_sp<SkSVGNode>);
fmalita6ceef3d2016-07-26 18:46:34 -070033
Tyler Freemanc9911522020-05-08 13:23:10 -070034 // Returns the node with the given id, or nullptr if not found.
35 sk_sp<SkSVGNode>* findNodeById(const char* id);
36
fmalita6ceef3d2016-07-26 18:46:34 -070037 void render(SkCanvas*) const;
38
39private:
fmalitae1baa7c2016-09-14 12:04:30 -070040 SkSize intrinsicSize() const;
41
fmalita6ceef3d2016-07-26 18:46:34 -070042 SkSize fContainerSize;
43 sk_sp<SkSVGNode> fRoot;
fmalita28d5b722016-09-12 17:06:47 -070044 SkSVGIDMapper fIDMapper;
fmalita6ceef3d2016-07-26 18:46:34 -070045
46 typedef SkRefCnt INHERITED;
47};
48
49#endif // SkSVGDOM_DEFINED