#pragma once #include "StringView.hpp" #include #include #include #include #include #include extern "C" { #include } namespace dchat { class GifLoadException : public std::runtime_error { public: GifLoadException(const std::string &errMsg) : std::runtime_error(errMsg) {} }; class Gif { public: // Throws GifLoadException on error Gif(const boost::filesystem::path &filepath); Gif(StringView &&fileContent); ~Gif(); sf::Vector2u getSize() const; void setPosition(const sf::Vector2f &position); sf::Vector2f getPosition() const; void setScale(const sf::Vector2f &scale); void setColor(sf::Color color); void draw(sf::RenderTarget &target, const sf::RenderStates &renderStates = sf::RenderStates::Default); static bool isDataGif(const StringView &data); private: void init(); private: gif_animation gif; StringView fileContent; unsigned int currentFrame; sf::Sprite sprite; sf::Texture texture; double timeElapsedCs; sf::Clock frameTimer; }; }