#pragma once #include #include // handles both static and animated class CellRendererPixbufAnimation : public Gtk::CellRenderer { public: CellRendererPixbufAnimation(); virtual ~CellRendererPixbufAnimation(); Glib::PropertyProxy> property_pixbuf(); Glib::PropertyProxy> property_pixbuf_animation(); protected: void get_preferred_width_vfunc(Gtk::Widget &widget, int &minimum_width, int &natural_width) const override; void get_preferred_width_for_height_vfunc(Gtk::Widget &widget, int height, int &minimum_width, int &natural_width) const override; void get_preferred_height_vfunc(Gtk::Widget &widget, int &minimum_height, int &natural_height) const override; void get_preferred_height_for_width_vfunc(Gtk::Widget &widget, int width, int &minimum_height, int &natural_height) const override; void render_vfunc(const Cairo::RefPtr &cr, Gtk::Widget &widget, const Gdk::Rectangle &background_area, const Gdk::Rectangle &cell_area, Gtk::CellRendererState flag) override; private: Glib::Property> m_property_pixbuf; Glib::Property> m_property_pixbuf_animation; /* one cellrenderer is used for every animation and i dont know how to store data per-pixbuf (in this case the iter) so this little map thing will have to do i would try set_data on the pixbuf but i dont know if that will cause memory leaks this would mean if a row's pixbuf animation is changed more than once then it wont be released immediately but thats not a problem for me in this case unordered_map doesnt compile cuz theres no hash overload, i guess */ std::map, Glib::RefPtr> m_pixbuf_animation_iters; };