Photon 1.0.0
Loading...
Searching...
No Matches
cairo_images_cache.h
Go to the documentation of this file.
1#ifndef LITEHTML_CAIRO_IMAGES_CACHE_H
2#define LITEHTML_CAIRO_IMAGES_CACHE_H
3
4#include <mutex>
5#include <map>
6#include <string>
7#include <cairo.h>
8
10{
11 cairo_surface_t* surface;
12public:
15 {
16 if(v.surface)
17 {
18 surface = cairo_surface_reference(v.surface);
19 }
20 }
21 explicit cairo_surface_wrapper(cairo_surface_t* v) : surface(v) {}
23 {
24 surface = v.surface;
25 v.surface = nullptr;
26 }
28 {
29 if(surface != v.surface)
30 {
31 if(surface)
32 {
33 cairo_surface_destroy(surface);
34 }
35 surface = cairo_surface_reference(v.surface);
36 }
37 return *this;
38 }
40 {
41 if(surface)
42 {
43 cairo_surface_destroy(surface);
44 }
45 }
46 cairo_surface_t* get() { return cairo_surface_reference(surface); }
47};
48
50{
51 std::mutex m_mutex;
52 std::map<std::string, cairo_surface_wrapper> m_images;
53public:
54 void add_image(const std::string& url, cairo_surface_t* image)
55 {
56 std::unique_lock<std::mutex> lock(m_mutex);
58 }
59
60 cairo_surface_t* get_image(const std::string& url)
61 {
62 std::unique_lock<std::mutex> lock(m_mutex);
63 auto iter = m_images.find(url);
64 if(iter != m_images.end())
65 {
66 return iter->second.get();
67 }
68 return nullptr;
69 }
70
71 bool reserve(const std::string& url)
72 {
73 std::unique_lock<std::mutex> lock(m_mutex);
74 auto iter = m_images.find(url);
75 if (iter == m_images.end())
76 {
78 return true;
79 }
80 return false;
81 }
82
83 bool exists(const std::string& url)
84 {
85 std::unique_lock<std::mutex> lock(m_mutex);
86 auto iter = m_images.find(url);
87 return iter != m_images.end();
88 }
89};
90
91#endif //LITEHTML_CAIRO_IMAGES_CACHE_H
Definition cairo_images_cache.h:50
std::mutex m_mutex
Definition cairo_images_cache.h:51
bool reserve(const std::string &url)
Definition cairo_images_cache.h:71
bool exists(const std::string &url)
Definition cairo_images_cache.h:83
void add_image(const std::string &url, cairo_surface_t *image)
Definition cairo_images_cache.h:54
std::map< std::string, cairo_surface_wrapper > m_images
Definition cairo_images_cache.h:52
cairo_surface_t * get_image(const std::string &url)
Definition cairo_images_cache.h:60
Definition cairo_images_cache.h:10
cairo_surface_t * surface
Definition cairo_images_cache.h:11
~cairo_surface_wrapper()
Definition cairo_images_cache.h:39
cairo_surface_wrapper(cairo_surface_t *v)
Definition cairo_images_cache.h:21
cairo_surface_wrapper()
Definition cairo_images_cache.h:13
cairo_surface_wrapper(const cairo_surface_wrapper &v)
Definition cairo_images_cache.h:14
cairo_surface_wrapper(cairo_surface_wrapper &&v) noexcept
Definition cairo_images_cache.h:22
cairo_surface_wrapper & operator=(const cairo_surface_wrapper &v)
Definition cairo_images_cache.h:27
cairo_surface_t * get()
Definition cairo_images_cache.h:46
image
Definition tag_strings.h:74