#pragma once #include #include #include #include #include #include "filecache.hpp" class ImageManager { public: ImageManager(); using callback_anim_type = sigc::slot)>; using callback_type = sigc::slot)>; void ClearCache(); void LoadFromURL(const std::string &url, const callback_type &cb); // animations need dimensions before loading since there is no (easy) way to scale a PixbufAnimation void LoadAnimationFromURL(const std::string &url, int w, int h, const callback_anim_type &cb); void Prefetch(const std::string &url); Glib::RefPtr GetPlaceholder(int size); private: static Glib::RefPtr ReadFileToPixbuf(std::string path); static Glib::RefPtr ReadFileToPixbufAnimation(std::string path, int w, int h); mutable std::mutex m_load_mutex; void RunCallbacks(); Glib::Dispatcher m_cb_dispatcher; mutable std::mutex m_cb_mutex; std::queue> m_cb_queue; std::unordered_map> m_pixs; Cache m_cache; };