1/*
2 * Copyright 2018 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 SkSGScene_DEFINED
9#define SkSGScene_DEFINED
10
11#include "include/core/SkRefCnt.h"
12#include "include/core/SkTypes.h"
13
14#include <memory>
15#include <vector>
16
17class SkCanvas;
18struct SkPoint;
19
20namespace sksg {
21
22class InvalidationController;
23class RenderNode;
24
25/**
26 * Holds a scene root. Provides high-level methods for rendering.
27 *
28 */
29class Scene final {
30public:
31 static std::unique_ptr<Scene> Make(sk_sp<RenderNode> root);
32 ~Scene();
33 Scene(const Scene&) = delete;
34 Scene& operator=(const Scene&) = delete;
35
36 void render(SkCanvas*) const;
37 void revalidate(InvalidationController* = nullptr);
38 const RenderNode* nodeAt(const SkPoint&) const;
39
40private:
41 explicit Scene(sk_sp<RenderNode> root);
42
43 const sk_sp<RenderNode> fRoot;
44};
45
46} // namespace sksg
47
48#endif // SkSGScene_DEFINED
49