diff --git a/res/icons/list-add-symbolic.svg b/res/icons/list-add-symbolic.svg new file mode 100644 index 0000000..59b2fb0 --- /dev/null +++ b/res/icons/list-add-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/icons/list-remove-symbolic.svg b/res/icons/list-remove-symbolic.svg new file mode 100644 index 0000000..5b9ded7 --- /dev/null +++ b/res/icons/list-remove-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/widget/spin_button.rs b/src/widget/spin_button.rs index 1a2f3e0..9a2c59d 100644 --- a/src/widget/spin_button.rs +++ b/src/widget/spin_button.rs @@ -149,29 +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 decrement_button = icon::from_name("list-remove-symbolic") - .apply(button::icon) - .on_press((spin_button.on_press)(decrement::( - spin_button.value, - spin_button.step, - spin_button.min, - spin_button.max, - ))); - - let increment_button = icon::from_name("list-add-symbolic") - .apply(button::icon) - .on_press((spin_button.on_press)(increment::( - spin_button.value, - spin_button.step, - spin_button.min, - spin_button.max, - ))); + 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) @@ -193,23 +197,8 @@ where Message: Clone + 'static, T: Copy + Sub + Add + PartialOrd, { - let decrement_button = icon::from_name("list-remove-symbolic") - .apply(button::icon) - .on_press((spin_button.on_press)(decrement::( - spin_button.value, - spin_button.step, - spin_button.min, - spin_button.max, - ))); - - let increment_button = icon::from_name("list-add-symbolic") - .apply(button::icon) - .on_press((spin_button.on_press)(increment::( - spin_button.value, - spin_button.step, - spin_button.min, - spin_button.max, - ))); + 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) @@ -263,4 +252,4 @@ mod tests { fn decrement() { assert_eq!(super::decrement(0i32, 10, 15, 35), 15); } -} +} \ No newline at end of file diff --git a/src/widget/warning.rs b/src/widget/warning.rs index 942ffb8..92fa717 100644 --- a/src/widget/warning.rs +++ b/src/widget/warning.rs @@ -33,11 +33,21 @@ impl<'a, Message: 'static + Clone> Warning<'a, Message> { pub fn into_widget(self) -> widget::Container<'a, Message, crate::Theme, Renderer> { let label = widget::container(crate::widget::text(self.message)).width(Length::Fill); + #[cfg(target_os = "linux")] let close_button = icon::from_name("window-close-symbolic") .size(16) .apply(widget::button::icon) .on_press_maybe(self.on_close); + #[cfg(not(target_os = "linux"))] + let close_button = icon::from_svg_bytes( + include_bytes!("../../res/icons/window-close-symbolic.svg") + ) + .symbolic(true) + .apply(widget::button::icon) + .icon_size(16) + .on_press_maybe(self.on_close); + widget::row::with_capacity(2) .push(label) .push(close_button)