/* * Copyright 2018 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkSGScene_DEFINED #define SkSGScene_DEFINED #include "include/core/SkRefCnt.h" #include "include/core/SkTypes.h" #include #include class SkCanvas; struct SkPoint; namespace sksg { class InvalidationController; class RenderNode; /** * Base class for animators. * */ class Animator : public SkRefCnt { public: virtual ~Animator(); Animator(const Animator&) = delete; Animator& operator=(const Animator&) = delete; void tick(float t); protected: Animator(); virtual void onTick(float t) = 0; }; using AnimatorList = std::vector>; class GroupAnimator : public Animator { protected: explicit GroupAnimator(AnimatorList&&); void onTick(float t) override; private: const AnimatorList fAnimators; using INHERITED = Animator; }; /** * Holds a scene root and a list of animators. * * Provides high-level mehods for driving rendering and animations. * */ class Scene final { public: static std::unique_ptr Make(sk_sp root, AnimatorList&& animators); ~Scene(); Scene(const Scene&) = delete; Scene& operator=(const Scene&) = delete; void render(SkCanvas*) const; void animate(float t, InvalidationController* = nullptr); const RenderNode* nodeAt(const SkPoint&) const; private: Scene(sk_sp root, AnimatorList&& animators); const sk_sp fRoot; const AnimatorList fAnimators; }; } // namespace sksg #endif // SkSGScene_DEFINED