--- a/ui/gtk/image.h Tue Feb 25 21:11:00 2025 +0100 +++ b/ui/gtk/image.h Sat Apr 05 16:46:11 2025 +0200 @@ -36,11 +36,99 @@ extern "C" { #endif +typedef struct UiImageViewer { + UiObject *obj; + GtkWidget *widget; + UiVar *var; + int padding_left; + int padding_right; + int padding_top; + int padding_bottom; + UiBool autoscale; + UiBool adjustwidgetsize; + UiBool useradjustable; + GdkPixbuf *pixbuf; + + double zoom_scale; + int transx; + int transy; + int begin_transx; + int begin_transy; + UiBool isautoscaled; + double user_scale; + double scale; + + ui_callback onbuttonpress; + void *onbuttonpressdata; + ui_callback onbuttonrelease; + void *onbuttonreleasedata; +} UiImageViewer; + +void ui_cairo_draw_image(UiImageViewer *imgviewer, cairo_t *cr, int width, int height); void* ui_imageviewer_get(UiGeneric *g); const char* ui_imageviewer_get_type(UiGeneric *g); int ui_imageviewer_set(UiGeneric *g, void *value, const char *type); +#if GTK_MAJOR_VERSION >= 4 + +gboolean ui_imageviewer_scroll( + GtkEventControllerScroll *widget, + gdouble dx, + gdouble dy, + gpointer userdata); + +void ui_imageviewer_drag_begin_cb( + GtkGestureDrag* self, + gdouble start_x, + gdouble start_y, + gpointer userdata); + +void ui_imageviewer_drag_end_cb( + GtkGestureDrag* self, + gdouble x, + gdouble y, + gpointer userdata); + +void ui_imageviewer_drag_update_cb( + GtkGestureDrag* self, + gdouble x, + gdouble y, + gpointer userdata); + +void ui_imageviewer_pressed_cb( + GtkGestureClick *self, + gint n_press, + gdouble x, + gdouble y, + gpointer userdata); + +void ui_imageviewer_released_cb( + GtkGestureClick *self, + gint n_press, + gdouble x, + gdouble y, + gpointer userdata); + +#else + +gboolean ui_imageviewer_scroll_event( + GtkWidget *widget, + GdkEventScroll event, + gpointer userdata); + +gboolean ui_imageviewer_button_press_event( + GtkWidget *widget, + GdkEventButton event, + gpointer userdata); + +gboolean ui_imageviewer_button_release_event( + GtkWidget *widget, + GdkEventButton event, + gpointer userdata); + +#endif + #ifdef __cplusplus } #endif