/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef Skottie_DEFINED #define Skottie_DEFINED #include "SkRefCnt.h" #include "SkSize.h" #include "SkString.h" #include "SkTypes.h" #include class SkCanvas; struct SkRect; class SkStream; namespace sksg { class Scene; } namespace skottie { namespace json { class ValueRef; } class ResourceProvider : public SkNoncopyable { public: virtual ~ResourceProvider() = default; virtual std::unique_ptr openStream(const char resource[]) const = 0; }; class Animation : public SkRefCnt { public: struct Stats { float fTotalLoadTimeMS, fJsonParseTimeMS, fSceneParseTimeMS; size_t fJsonSize, fAnimatorCount; }; static sk_sp Make(SkStream*, const ResourceProvider&, Stats* = nullptr); static sk_sp MakeFromFile(const char path[], const ResourceProvider* = nullptr, Stats* = nullptr); ~Animation() override; void render(SkCanvas*, const SkRect* dst = nullptr) const; void animationTick(SkMSec); const SkString& version() const { return fVersion; } const SkSize& size() const { return fSize; } SkScalar frameRate() const { return fFrameRate; } SkScalar inPoint() const { return fInPoint; } SkScalar outPoint() const { return fOutPoint; } void setShowInval(bool show); private: Animation(const ResourceProvider&, SkString ver, const SkSize& size, SkScalar fps, const json::ValueRef&, Stats*); SkString fVersion; SkSize fSize; SkScalar fFrameRate, fInPoint, fOutPoint; std::unique_ptr fScene; typedef SkRefCnt INHERITED; }; } // namespace skottie #endif // Skottie_DEFINED