tdesktop/Telegram/SourceFiles/lottie/lottie_animation.h

79 lines
1.6 KiB
C
Raw Normal View History

2019-04-27 13:12:53 +04:00
/*
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 "base/basic_types.h"
#include "base/flat_map.h"
#include <crl/crl_time.h>
2019-05-03 17:56:29 +04:00
#include <vector>
2019-05-02 11:23:32 +04:00
class QImage;
class QString;
class QByteArray;
2019-04-27 13:12:53 +04:00
2019-05-09 15:11:38 +03:00
class BMScene;
2019-04-27 13:12:53 +04:00
namespace Lottie {
class Animation;
bool ValidateFile(const QString &path);
std::unique_ptr<Animation> FromFile(const QString &path);
std::unique_ptr<Animation> FromData(const QByteArray &data);
2019-04-27 13:12:53 +04:00
struct PlaybackOptions {
float64 speed = 1.;
bool loop = true;
};
class Animation final {
public:
explicit Animation(const QByteArray &content);
~Animation();
void play(const PlaybackOptions &options);
QImage frame(crl::time now) const;
int frameRate() const;
crl::time duration() const;
void play();
void pause();
void resume();
void stop();
[[nodiscard]] bool active() const;
[[nodiscard]] bool ready() const;
[[nodiscard]] bool unsupported() const;
[[nodiscard]] float64 speed() const;
void setSpeed(float64 speed); // 0.5 <= speed <= 2.
[[nodiscard]] bool playing() const;
[[nodiscard]] bool buffering() const;
[[nodiscard]] bool paused() const;
[[nodiscard]] bool finished() const;
private:
void parse(const QByteArray &content);
bool _initialized = false;
bool _unsupported = false;
bool _failed = false;
bool _paused = false;
crl::time _started = 0;
PlaybackOptions _options;
2019-05-09 15:11:38 +03:00
std::unique_ptr<BMScene> _scene;
2019-04-27 13:12:53 +04:00
};
} // namespace Lottie