• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "SkRefCnt.h"
12 #include "SkTypes.h"
13 
14 #include <memory>
15 #include <vector>
16 
17 class SkCanvas;
18 
19 namespace sksg {
20 
21 class RenderNode;
22 
23 /**
24  * Base class for animators.
25  *
26  */
27 class Animator : public SkNoncopyable {
28 public:
29     virtual ~Animator();
30 
31     void tick(float t);
32 
33 protected:
34     Animator();
35 
36     virtual void onTick(float t) = 0;
37 
38 private:
39     using INHERITED = SkNoncopyable;
40 };
41 
42 using AnimatorList = std::vector<std::unique_ptr<Animator>>;
43 
44 class GroupAnimator : public Animator {
45 protected:
46     explicit GroupAnimator(AnimatorList&&);
47 
48     void onTick(float t) override;
49 
50 private:
51     const AnimatorList fAnimators;
52 
53     using INHERITED = Animator;
54 };
55 
56 /**
57  * Holds a scene root and a list of animators.
58  *
59  * Provides high-level mehods for driving rendering and animations.
60  *
61  */
62 class Scene final : SkNoncopyable {
63 public:
64     static std::unique_ptr<Scene> Make(sk_sp<RenderNode> root, AnimatorList&& animators);
65     ~Scene();
66 
67     void render(SkCanvas*) const;
68     void animate(float t);
69 
setShowInval(bool show)70     void setShowInval(bool show) { fShowInval = show; }
71 
72 private:
73     Scene(sk_sp<RenderNode> root, AnimatorList&& animators);
74 
75     const sk_sp<RenderNode> fRoot;
76     const AnimatorList      fAnimators;
77 
78     bool                    fShowInval = false;
79 
80     using INHERITED = SkNoncopyable;
81 };
82 
83 } // namespace sksg
84 
85 #endif // SkSGScene_DEFINED
86