Here is what I came up with

import gdkpixbuf.Pixbuf;
GdkPixbuf*[string] __ImageCache;

void SetImage(string imgName)(gtk.Image T)
{
        import std.path, std.conv, gdkpixbuf.Pixbuf;
        GError* err = null;
        if (imgName !in __ImageCache)
        {
                GdkPixbufLoader* __PixbufLoader;
                writeln("Image not cached, caching: "~imgName);
                enum imgData = cast(ubyte[])(import(baseName(imgName)).ptr);
                
                if (__PixbufLoader == null)             
                        __PixbufLoader = gdk_pixbuf_loader_new();
                
                assert(__PixbufLoader, "Error: Cannot create pixbuf loader!");

if (!gdk_pixbuf_loader_write(__PixbufLoader, cast(char*)imgData.ptr, imgData.length, &err))
                        assert(__PixbufLoader, "Error: Cannot load pixbuf 
loader!");
                if (!gdk_pixbuf_loader_close(__PixbufLoader, &err))
                        assert(__PixbufLoader, "Error: Cannot create pixbuf!");

                auto pixbuf = gdk_pixbuf_loader_get_pixbuf(__PixbufLoader);     
        
                if (pixbuf == null)
                        assert("Error: Cannot load pixbuf!");

                __ImageCache[imgName] = pixbuf;                         
        }

        import gtk.c.functions;
gtk_image_set_from_pixbuf(T.getImageStruct(), __ImageCache[imgName]);

}

Maybe that will help someone. Not sure if it is the best way but seems to work.

Reply via email to