Skip to content

Commit d31dd6a

Browse files
committed
feat: allow toggler to be disabled
1 parent 71cd25c commit d31dd6a

File tree

4 files changed

+27
-3
lines changed

4 files changed

+27
-3
lines changed

src/theme/style/iced.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
66
use crate::theme::{CosmicComponent, Theme, TRANSPARENT_COMPONENT};
77
use cosmic_theme::composite::over;
8+
use iced::color;
89
use iced_core::{Background, Border, Color, Shadow, Vector};
910
use iced_style::application;
1011
use iced_style::button as iced_button;
@@ -858,6 +859,29 @@ impl toggler::StyleSheet for Theme {
858859
..self.active(style, is_active)
859860
}
860861
}
862+
863+
fn disabled(&self, style: &Self::Style, is_active: bool) -> toggler::Appearance {
864+
let theme = self.cosmic();
865+
const HANDLE_MARGIN: f32 = 2.0;
866+
let background: Color = if is_active {
867+
theme.accent.base.into()
868+
} else {
869+
theme.palette.neutral_5.into()
870+
};
871+
let foreground: Color = theme.palette.neutral_2.into();
872+
toggler::Appearance {
873+
background: Color::from_rgba(background.r, background.g, background.b, 0.5),
874+
background_border: None,
875+
foreground: Color::from_rgba(foreground.r, foreground.g, foreground.b, 0.5),
876+
foreground_border: None,
877+
border_radius: theme.radius_xl().into(),
878+
handle_radius: theme
879+
.radius_xl()
880+
.map(|x| (x - HANDLE_MARGIN).max(0.0))
881+
.into(),
882+
handle_margin: HANDLE_MARGIN,
883+
}
884+
}
861885
}
862886

863887
/*

src/widget/settings/item.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,6 @@ impl<'a, Message: 'static> Item<'a, Message> {
123123
is_checked: bool,
124124
message: impl Fn(bool) -> Message + 'static,
125125
) -> Row<'a, Message> {
126-
self.control(crate::widget::toggler(None, is_checked, message))
126+
self.control(crate::widget::toggler(None, is_checked, Some(message)))
127127
}
128128
}

src/widget/toggler.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use iced_core::text;
77
pub fn toggler<'a, Message, Theme: iced_widget::toggler::StyleSheet, Renderer>(
88
label: impl Into<Option<String>>,
99
is_checked: bool,
10-
f: impl Fn(bool) -> Message + 'a,
10+
f: Option<impl Fn(bool) -> Message + 'a>,
1111
) -> widget::Toggler<'a, Message, Theme, Renderer>
1212
where
1313
Renderer: iced_core::Renderer + text::Renderer,

0 commit comments

Comments
 (0)