]> uap-core.de Git - note.git/commitdiff
implement imageviewer callbacks
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Mon, 3 Aug 2026 18:28:16 +0000 (20:28 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Mon, 3 Aug 2026 18:28:16 +0000 (20:28 +0200)
ui-rs/src/ui/image.rs

index db902f50a7d06d2d7499933358b1df5b149212f1..042a2d4bbaa02e3eec01f4932c4f136e366ca303 100644 (file)
@@ -30,8 +30,8 @@
 
 use std::ffi::{c_char, c_int, c_void, CString};
 use std::path::Path;
-use crate::ui::{ffi, toolkit, ButtonBuilder, UiContext, UiImage};
-use crate::ui::ffi::{UiImageViewerArgs, UiLabelArgs};
+use crate::ui::{event, ffi, toolkit, ButtonBuilder, EventWrapper, UiContext, UiImage};
+use crate::ui::ffi::{UiCallback, UiImageViewerArgs, UiLabelArgs};
 use crate::ui::label::{Label, LabelCreate};
 use crate::ui::widget::Widget;
 
@@ -299,6 +299,28 @@ impl<'a, T> ImageViewerBuilder<'a, T> {
         self
     }
 
+    pub fn onbuttonpress<F>(&mut self, f: F) -> &mut Self
+    where F: FnMut(&mut event::Event<T>) + 'static {
+        let wrapper = Box::new(EventWrapper::new(f) );
+        let ptr = self.obj.ctx.reg_box(wrapper);
+        unsafe {
+            ui_imageviewer_args_set_onbuttonpress(self.args, Some(event::event_wrapper::<T>));
+            ui_imageviewer_args_set_onbuttonpressdata(self.args, ptr as *mut c_void);
+        }
+        self
+    }
+
+    pub fn onbuttonrelease<F>(&mut self, f: F) -> &mut Self
+    where F: FnMut(&mut event::Event<T>) + 'static {
+        let wrapper = Box::new(EventWrapper::new(f) );
+        let ptr = self.obj.ctx.reg_box(wrapper);
+        unsafe {
+            ui_imageviewer_args_set_onbuttonrelease(self.args, Some(event::event_wrapper::<T>));
+            ui_imageviewer_args_set_onbuttonreleasedata(self.args, ptr as *mut c_void);
+        }
+        self
+    }
+
     pub fn visibility_states(&mut self, states: &[i32]) -> &mut Self {
         unsafe {
             ui_imageviewer_args_set_visibility_states(self.args, states.as_ptr(), states.len() as c_int);
@@ -364,6 +386,10 @@ unsafe extern "C" {
     fn ui_imageviewer_args_set_image_padding_right(args: *mut UiImageViewerArgs, value: c_int);
     fn ui_imageviewer_args_set_image_padding_top(args: *mut UiImageViewerArgs, value: c_int);
     fn ui_imageviewer_args_set_image_padding_bottom(args: *mut UiImageViewerArgs, value: c_int);
+    fn ui_imageviewer_args_set_onbuttonpress(args: *mut UiImageViewerArgs, callback: UiCallback);
+    fn ui_imageviewer_args_set_onbuttonpressdata(args: *mut UiImageViewerArgs, data: *const c_void);
+    fn ui_imageviewer_args_set_onbuttonrelease(args: *mut UiImageViewerArgs, callback: UiCallback);
+    fn ui_imageviewer_args_set_onbuttonreleasedata(args: *mut UiImageViewerArgs, data: *const c_void);
     fn ui_imageviewer_args_set_visibility_states(args: *mut UiImageViewerArgs, states: *const c_int, numstates: c_int);
     fn ui_imageviewer_args_free(args: *mut UiImageViewerArgs);