135efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita/* 235efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita * Copyright 2018 Google Inc. 335efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita * 435efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita * Use of this source code is governed by a BSD-style license that can be 535efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita * found in the LICENSE file. 635efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita */ 735efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 835efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita#ifndef SkSGScene_DEFINED 935efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita#define SkSGScene_DEFINED 1035efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 1135efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita#include "SkRefCnt.h" 1235efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita#include "SkTypes.h" 1335efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 1435efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita#include <memory> 1535efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita#include <vector> 1635efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 1735efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malitaclass SkCanvas; 1835efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 1935efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malitanamespace sksg { 2035efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 2135efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malitaclass RenderNode; 2235efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 2335efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita/** 2435efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita * Base class for animators. 2535efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita * 2635efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita */ 2735efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malitaclass Animator : public SkNoncopyable { 2835efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malitapublic: 2935efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita virtual ~Animator(); 3035efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 3135efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita void tick(float t); 3235efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 3335efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malitaprotected: 3435efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita Animator(); 3535efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 3635efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita virtual void onTick(float t) = 0; 3735efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 3835efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malitaprivate: 3935efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita using INHERITED = SkNoncopyable; 4035efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita}; 4135efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 42cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malitausing AnimatorList = std::vector<std::unique_ptr<Animator>>; 43cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malita 44cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malitaclass GroupAnimator : public Animator { 45cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malitaprotected: 46cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malita explicit GroupAnimator(AnimatorList&&); 47cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malita 48cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malita void onTick(float t) override; 49cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malita 50cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malitaprivate: 51cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malita const AnimatorList fAnimators; 52cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malita 53cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malita using INHERITED = Animator; 54cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malita}; 55cca86f386cfd050cd03a25b305fc6fda48a8d6cdFlorin Malita 5635efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita/** 5735efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita * Holds a scene root and a list of animators. 5835efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita * 5935efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita * Provides high-level mehods for driving rendering and animations. 6035efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita * 6135efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita */ 6235efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malitaclass Scene final : SkNoncopyable { 6335efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malitapublic: 6435efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita static std::unique_ptr<Scene> Make(sk_sp<RenderNode> root, AnimatorList&& animators); 6535efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita ~Scene(); 6635efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 6735efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita void render(SkCanvas*) const; 6835efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita void animate(float t); 6935efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 7035efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita void setShowInval(bool show) { fShowInval = show; } 7135efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 7235efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malitaprivate: 7335efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita Scene(sk_sp<RenderNode> root, AnimatorList&& animators); 7435efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 7535efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita const sk_sp<RenderNode> fRoot; 7635efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita const AnimatorList fAnimators; 7735efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 7835efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita bool fShowInval = false; 7935efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 8035efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita using INHERITED = SkNoncopyable; 8135efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita}; 8235efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 8335efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita} // namespace sksg 8435efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita 8535efaa8fd7538f636dfd3593f172a961745a5cd8Florin Malita#endif // SkSGScene_DEFINED 86