From 929aa1e33f40d87743a8529098f7800e6f735681 Mon Sep 17 00:00:00 2001 From: Mia McMahill <84749759+electricbrass@users.noreply.github.com> Date: Sat, 10 May 2025 17:02:53 -0500 Subject: [PATCH] Move make_button into a macro --- src/widget/spin_button.rs | 65 +++++++++++++++------------------------ 1 file changed, 24 insertions(+), 41 deletions(-) diff --git a/src/widget/spin_button.rs b/src/widget/spin_button.rs index 6edfac59..9a2c59d7 100644 --- a/src/widget/spin_button.rs +++ b/src/widget/spin_button.rs @@ -149,32 +149,33 @@ where } } } +macro_rules! make_button { + ($spin_button:expr, $icon:expr, $operation:expr) => {{ + #[cfg(target_os = "linux")] + let button = icon::from_name($icon); + + #[cfg(not(target_os = "linux"))] + let button = icon::from_svg_bytes( + include_bytes!(concat!["../../res/icons/", $icon ,".svg"]) + ).symbolic(true); + + button.apply(button::icon) + .on_press(($spin_button.on_press)($operation( + $spin_button.value, + $spin_button.step, + $spin_button.min, + $spin_button.max, + ))) + }}; +} fn horizontal_variant(spin_button: SpinButton<'_, T, Message>) -> Element<'_, Message> where Message: Clone + 'static, T: Copy + Sub + Add + PartialOrd, { - let make_button = | icon, operation: fn(T,T,T,T)->T | { - #[cfg(target_os = "linux")] - let button = icon::from_name(icon); - - #[cfg(not(target_os = "linux"))] - let button = icon::from_svg_bytes( - include_bytes!(concat!["../../res/icons/", icon ,".svg"]) - ).symbolic(true); - - button.apply(button::icon) - .on_press((spin_button.on_press)(operation( - spin_button.value, - spin_button.step, - spin_button.min, - spin_button.max, - ))) - }; - - let decrement_button = make_button("list-remove-symbolic", decrement); - let increment_button = make_button("list-add-symbolic", increment); + let decrement_button = make_button!(spin_button, "list-remove-symbolic", decrement); + let increment_button = make_button!(spin_button, "list-add-symbolic", increment); let label = text::title4(spin_button.label) .apply(container) @@ -196,26 +197,8 @@ where Message: Clone + 'static, T: Copy + Sub + Add + PartialOrd, { - let make_button = | icon, operation: fn(T,T,T,T)->T | { - #[cfg(target_os = "linux")] - let button = icon::from_name(icon); - - #[cfg(not(target_os = "linux"))] - let button = icon::from_svg_bytes( - include_bytes!(concat!["../../res/icons/", icon ,".svg"]) - ).symbolic(true); - - button.apply(button::icon) - .on_press((spin_button.on_press)(operation( - spin_button.value, - spin_button.step, - spin_button.min, - spin_button.max, - ))) - }; - - let decrement_button = make_button("list-remove-symbolic", decrement); - let increment_button = make_button("list-add-symbolic", increment); + let decrement_button = make_button!(spin_button, "list-remove-symbolic", decrement); + let increment_button = make_button!(spin_button, "list-add-symbolic", increment); let label = text::title4(spin_button.label) .apply(container) @@ -269,4 +252,4 @@ mod tests { fn decrement() { assert_eq!(super::decrement(0i32, 10, 15, 35), 15); } -} +} \ No newline at end of file