From: Olaf Wintermann Date: Mon, 3 Aug 2026 18:28:16 +0000 (+0200) Subject: implement imageviewer callbacks X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=9556dfc561be89dc10ae289cbd17cfc64ee2d06d;p=note.git implement imageviewer callbacks --- diff --git a/ui-rs/src/ui/image.rs b/ui-rs/src/ui/image.rs index db902f5..042a2d4 100644 --- a/ui-rs/src/ui/image.rs +++ b/ui-rs/src/ui/image.rs @@ -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(&mut self, f: F) -> &mut Self + where F: FnMut(&mut event::Event) + '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::)); + ui_imageviewer_args_set_onbuttonpressdata(self.args, ptr as *mut c_void); + } + self + } + + pub fn onbuttonrelease(&mut self, f: F) -> &mut Self + where F: FnMut(&mut event::Event) + '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::)); + 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);