From fd7fc4190fffc121b4d61dde1f31dd8cc9dfae1f Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Fri, 8 May 2026 20:56:26 +0200 Subject: [PATCH] add fn return type to widget_fn macro --- ui-rs/src/ui/button.rs | 10 +++++----- ui-rs/src/ui/text.rs | 8 ++++---- ui-rs/src/ui/widget.rs | 6 +++--- ui-rs/src/ui/window.rs | 9 ++++++++- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/ui-rs/src/ui/button.rs b/ui-rs/src/ui/button.rs index 887fb05..055f7d8 100644 --- a/ui-rs/src/ui/button.rs +++ b/ui-rs/src/ui/button.rs @@ -98,11 +98,11 @@ pub enum LinkButtonType { pub type ToggleButtonCreate = fn(*const UiObject, *const UiToggleArgs) -> *mut c_void; impl toolkit::UiObject { - widget_fn!(button, button_builder, ButtonBuilder); - widget_fn!(togglebutton, togglebutton_builder, ToggleBuilder); - widget_fn!(checkbox, checkbox_builder, ToggleBuilder); - widget_fn!(switch, switch_builder, ToggleBuilder); - widget_fn!(radiobutton, radiobutton_builder, ToggleBuilder); + widget_fn!(button, button_builder, ButtonBuilder, Button); + widget_fn!(togglebutton, togglebutton_builder, ToggleBuilder, ToggleButton); + widget_fn!(checkbox, checkbox_builder, ToggleBuilder, ToggleButton); + widget_fn!(switch, switch_builder, ToggleBuilder, ToggleButton); + widget_fn!(radiobutton, radiobutton_builder, ToggleBuilder, ToggleButton); pub fn button_builder<'a>(&'a mut self) -> ButtonBuilder<'a, T> { unsafe { diff --git a/ui-rs/src/ui/text.rs b/ui-rs/src/ui/text.rs index 30491f9..8f31900 100644 --- a/ui-rs/src/ui/text.rs +++ b/ui-rs/src/ui/text.rs @@ -97,7 +97,7 @@ pub struct TextAreaBuilder<'a, T> { } impl toolkit::UiObject { - widget_fn!(textarea, textarea_builder, TextAreaBuilder); + widget_fn!(textarea, textarea_builder, TextAreaBuilder, TextArea); pub fn textarea_builder<'a>(&'a mut self) -> TextAreaBuilder<'a, T> { unsafe { @@ -360,9 +360,9 @@ pub fn frameless_textfield_create(obj: *const UiObject, args: *const UiTextField } impl toolkit::UiObject { - widget_fn!(textfield, textfield_builder, TextFieldBuilder); - widget_fn!(passwordfield, passwordfield_builder, TextFieldBuilder); - widget_fn!(frameless_textfield, frameless_textfield_builder, TextFieldBuilder); + widget_fn!(textfield, textfield_builder, TextFieldBuilder, TextField); + widget_fn!(passwordfield, passwordfield_builder, TextFieldBuilder, TextField); + widget_fn!(frameless_textfield, frameless_textfield_builder, TextFieldBuilder, TextField); pub fn textfield_builder<'a>(&'a mut self) -> TextFieldBuilder<'a, T> { unsafe { diff --git a/ui-rs/src/ui/widget.rs b/ui-rs/src/ui/widget.rs index 0bb2337..07bdc76 100644 --- a/ui-rs/src/ui/widget.rs +++ b/ui-rs/src/ui/widget.rs @@ -87,14 +87,14 @@ extern "C" { /// } /// macro_rules! widget_fn { - ($fn_name:ident, $builder_fn:ident, $builder_ty:ident) => { - pub fn $fn_name(&mut self, build: F) + ($fn_name:ident, $builder_fn:ident, $builder_ty:ident, $widget:ident) => { + pub fn $fn_name(&mut self, build: F) -> $widget where F: Fn(&mut $builder_ty), { let mut builder = self.$builder_fn(); build(&mut builder); - builder.create(); + builder.create() } }; } diff --git a/ui-rs/src/ui/window.rs b/ui-rs/src/ui/window.rs index 6bdd6fa..ef29aff 100644 --- a/ui-rs/src/ui/window.rs +++ b/ui-rs/src/ui/window.rs @@ -228,7 +228,14 @@ impl toolkit::UiObject { } } - widget_fn!(dialog, dialog_builder, DialogBuilder); + pub fn dialog(&mut self, build: F) + where + F: Fn(&mut DialogBuilder), + { + let mut builder = self.dialog_builder(); + build(&mut builder); + builder.create(); + } } -- 2.47.3