1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2018 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef SkSGScene_DEFINED
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SkSGScene_DEFINED
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRefCnt.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTypes.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include <memory>
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include <vector>
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkCanvas;
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotnamespace sksg {
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass RenderNode;
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/**
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Base class for animators.
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass Animator : public SkNoncopyable {
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    virtual ~Animator();
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void tick(float t);
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    Animator();
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    virtual void onTick(float t) = 0;
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    using INHERITED = SkNoncopyable;
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotusing AnimatorList = std::vector<std::unique_ptr<Animator>>;
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GroupAnimator : public Animator {
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    explicit GroupAnimator(AnimatorList&&);
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onTick(float t) override;
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const AnimatorList fAnimators;
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    using INHERITED = Animator;
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/**
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Holds a scene root and a list of animators.
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Provides high-level mehods for driving rendering and animations.
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass Scene final : SkNoncopyable {
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    static std::unique_ptr<Scene> Make(sk_sp<RenderNode> root, AnimatorList&& animators);
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ~Scene();
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void render(SkCanvas*) const;
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void animate(float t);
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setShowInval(bool show) { fShowInval = show; }
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    Scene(sk_sp<RenderNode> root, AnimatorList&& animators);
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const sk_sp<RenderNode> fRoot;
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const AnimatorList      fAnimators;
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool                    fShowInval = false;
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    using INHERITED = SkNoncopyable;
81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} // namespace sksg
84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif // SkSGScene_DEFINED
86