blob: 0f424657097de4aa631e211d6bb573e41a74c765 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#pragma once
#include <SFML/Graphics/RenderWindow.hpp>
#include <SFML/Graphics/Sprite.hpp>
#include <SFML/Graphics/Texture.hpp>
#include <SFML/Window/Event.hpp>
#include <SFML/System/Clock.hpp>
#include <string>
namespace dchat
{
class Gif;
class ImagePreview
{
public:
// set @texture to nullptr if you wish to end preview
static void preview(sf::Texture *texture, const std::string &url = "");
// set gif to nullptr if you wish to end preview
static void preview(Gif *gif, const std::string &url = "");
static void* getPreviewContentPtr();
static sf::Int32 getTimeSinceLastSeenMs();
static void processEvent(const sf::Event &event);
static void draw(sf::RenderWindow &window);
private:
enum class ContentType
{
NONE,
TEXTURE,
GIF
};
ImagePreview() : texture(nullptr), contentType(ContentType::NONE) {}
ImagePreview(const ImagePreview&) = delete;
ImagePreview& operator=(const ImagePreview&) = delete;
static ImagePreview* getInstance();
sf::Vector2u calculateImageSize(sf::Vector2u windowSize) const;
private:
sf::Vector2f position;
sf::Sprite sprite;
sf::Vector2u size;
sf::Clock lastSeenTimer;
union
{
sf::Texture *texture;
Gif *gif;
};
ContentType contentType;
};
}
|