/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once #include "lottie/lottie_common.h" #include "base/weak_ptr.h" class QImage; class QString; class QByteArray; namespace rlottie { class Animation; } // namespace rlottie namespace Lottie { class Player; class SharedState; QImage ReadThumbnail(const QByteArray &content); namespace details { using InitData = base::variant, Error>; std::unique_ptr CreateFromContent( const QByteArray &content); } // namespace details class Animation final : public base::has_weak_ptr { public: Animation( not_null player, const QByteArray &content, const FrameRequest &request); Animation( not_null player, FnMut)> get, // Main thread. FnMut put, // Unknown thread. const QByteArray &content, const FrameRequest &request); [[nodiscard]] bool ready() const; [[nodiscard]] QImage frame() const; [[nodiscard]] QImage frame(const FrameRequest &request) const; private: void initDone(details::InitData &&data); void parseDone(std::unique_ptr state); void parseFailed(Error error); not_null _player; SharedState *_state = nullptr; }; } // namespace Lottie