]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/image.h
Rework how widget ownership works in Container
[libs/gltk.git] / source / image.h
index 5f6b935d20422050df32664b5c00e71984361e61..99e0874f124e36b72ca3a08660896a9b40cc6f5c 100644 (file)
@@ -2,6 +2,7 @@
 #define MSP_GLTK_IMAGE_H_
 
 #include <msp/gl/texture2d.h>
+#include "mspgltk_api.h"
 #include "widget.h"
 
 namespace Msp {
@@ -10,24 +11,38 @@ namespace GLtk {
 /**
 A widget for displaying images.
 */
-class Image: public Widget
+class MSPGLTK_API Image: public Widget
 {
+public:
+       class Loader: public Msp::DataFile::DerivedObjectLoader<Image, Widget::Loader>
+       {
+       public:
+               Loader(Image &);
+       };
+
 private:
-       const GL::Texture2D *image;
-       bool keep_aspect;
+       const GL::Texture2D *image = nullptr;
+       std::string icon_name;
+       bool keep_aspect = true;
 
 public:
-       Image(const GL::Texture2D * = 0);
+       Image(const GL::Texture2D * = nullptr);
 
-       virtual const char *get_class() const { return "image"; }
+       const char *get_class() const override { return "image"; }
 
-       virtual void autosize();
+private:
+       void autosize_special(const Part &, Geometry &) const override;
 
+public:
        void set_image(const GL::Texture2D *);
+       void set_icon(const std::string &);
        void set_keep_aspect(bool);
 
 private:
-       virtual void render_special(const Part &) const;
+       void update_icon();
+       void rebuild_special(const Part &) override;
+       void on_style_change() override;
+       void on_reparent() override;
 };
 
 } // namespace GLtk