add ui_imageviewer_load_file/ui_imageviewer_load_data default tip

Fri, 28 Aug 2026 20:27:23 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Fri, 28 Aug 2026 20:27:23 +0200
changeset 1238
a40c1ec7883d
parent 1237
7849dc795c3a

add ui_imageviewer_load_file/ui_imageviewer_load_data

ui/gtk/image.c file | annotate | diff | comparison | revisions
ui/ui/image.h file | annotate | diff | comparison | revisions
--- a/ui/gtk/image.c	Thu Aug 27 19:57:28 2026 +0200
+++ b/ui/gtk/image.c	Fri Aug 28 20:27:23 2026 +0200
@@ -238,6 +238,48 @@
     }
 }
 
+static void imageviewer_set(UiImageViewer *imgviewer, GdkPixbuf *pixbuf) {
+    if(imgviewer->pixbuf) {
+        g_object_unref(imgviewer->pixbuf);
+    }
+    
+    g_object_ref(pixbuf);
+    imgviewer->pixbuf = pixbuf;
+    
+    imageviewer_reset(imgviewer);
+    if(imgviewer->adjustwidgetsize && !imgviewer->autoscale) {
+        int width = gdk_pixbuf_get_width(pixbuf);
+        int height = gdk_pixbuf_get_height(pixbuf);
+        gtk_widget_set_size_request(imgviewer->widget, width, height);
+    }
+    gtk_widget_queue_draw(imgviewer->widget);
+}
+
+void ui_imageviewer_load_file(UIWIDGET w, const char *path) {
+    UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer");
+    if(imgviewer) {
+        GError *error = NULL;
+        GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, &error);
+        if(pixbuf) {
+            imageviewer_set(imgviewer, pixbuf);
+        }
+    }
+}
+
+void ui_imageviewer_load_data(UIWIDGET w, const void *imgdata, size_t size) {
+    UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer");
+    if(imgviewer) {
+        GBytes *bytes = g_bytes_new_static(imgdata, size);
+        GInputStream *in = g_memory_input_stream_new_from_bytes(bytes);
+        GError *error = NULL;
+        GdkPixbuf *pixbuf = gdk_pixbuf_new_from_stream(in, NULL, &error);
+        g_object_unref(in);
+        if(pixbuf) {
+            imageviewer_set(imgviewer, pixbuf);
+        }
+    }
+}
+
 void ui_cairo_draw_image(UiImageViewer *imgviewer, cairo_t *cr, int width, int height) {
     if(!imgviewer->pixbuf) {
         return;
@@ -306,24 +348,9 @@
     }
     
     GdkPixbuf *pixbuf = value;
-    g_object_ref(pixbuf);
-    
     UiImageViewer *imgviewer = g->obj;
     g->value = pixbuf;
-    
-    imageviewer_reset(imgviewer);
-    
-    if(imgviewer->pixbuf) {
-        g_object_unref(imgviewer->pixbuf);
-    }
-    imgviewer->pixbuf = pixbuf;
-    
-    if(imgviewer->adjustwidgetsize && !imgviewer->autoscale) {
-        int width = gdk_pixbuf_get_width(pixbuf);
-        int height = gdk_pixbuf_get_height(pixbuf);
-        gtk_widget_set_size_request(imgviewer->widget, width, height);
-    }
-    gtk_widget_queue_draw(imgviewer->widget);
+    imageviewer_set(imgviewer, pixbuf);
     
     return 0;
 }
--- a/ui/ui/image.h	Thu Aug 27 19:57:28 2026 +0200
+++ b/ui/ui/image.h	Fri Aug 28 20:27:23 2026 +0200
@@ -92,6 +92,8 @@
 UIEXPORT void ui_imageviewer_set_autoscale(UIWIDGET w, UiBool set);
 UIEXPORT void ui_imageviewer_set_adjustwidgetsize(UIWIDGET w, UiBool set);
 UIEXPORT void ui_imageviewer_set_useradjustable(UIWIDGET w, UiBool set);
+UIEXPORT void ui_imageviewer_load_file(UIWIDGET w, const char *path);
+UIEXPORT void ui_imageviewer_load_data(UIWIDGET w, const void *imgdata, size_t size);
 
 UIEXPORT int ui_image_load_file(UiGeneric *obj, const char *path);
 UIEXPORT int ui_image_load_data(UiGeneric *obj, const void *imgdata, size_t size);

mercurial