I noticed that Text supports a default appearance, whereas Checkbox doesn’t.
Is there a specific reason for this? What should I do if I want to change the font color of a checkbox to white, but leave everything else as-is?
I noticed that Text supports a default appearance, whereas Checkbox doesn’t.
Is there a specific reason for this? What should I do if I want to change the font color of a checkbox to white, but leave everything else as-is?
I believe yes, the text::Appearance
is defined as:
pub struct Appearance {
pub color: Option<Color>,
}
Here having color
set to None
means to use inherited color which is
the most common thing to do for some Text
.
In comparison checkbox::Appearance
is defined as:
pub struct Appearance {
pub background: Background,
pub icon_color: Color,
pub border_radius: BorderRadius,
pub border_width: f32,
pub border_color: Color,
pub text_color: Option<Color>,
}
Here defining a default for each of those values, seems more a question of taste than a logical one.
I’m not sure if I’m phrasing my question clearly. With container
, I can do this:
container(/* ... */)
.style(move |_: &_| container::Appearance {
background: Some(Background::Color(Color::new(0.27, 0.02, 0.15, 1.0))),
..Default::default()
})
I tried something similar for checkbox:
checkbox(/* ... */)
.style(move |_: &_| container::Appearance {
..Default::default()
}),
Then I get this error:
the trait
From<[closure@src\main.rs:93:24: 93:36]>
is not implemented foriced::theme::Checkbox
I opened the documentation and noticed that the Appearance
s of text
and container
implement the Default trait, whereas Checkbox
doesn’t.
So is there a simple way to override only the text color for checkbox
? So without implementing checkbox::StyleSheet
for a custom theme?
Yes you can create your own Style
and apply it to your checkbox
:
Yes you can use the Custom style for checkbox
.
struct MyStyle;
checkbox(/* ... */)
.style(iced::theme::Checkbox::Custom(Box::new(MyStyle)))
Which requires the implementation of StyleSheet in iced::widget::checkbox - Rust.
use iced::widget::checkbox;
impl checkbox::StyleSheet for MyStyle {
type Style = iced::Theme;
fn active(&self, style: &Self::Style, is_checked: bool) -> checkbox::Appearance {...}
fn hovered(&self, style: &Self::Style, is_checked: bool) -> checkbox::Appearance {...}
}
Here the “style” you are given to your active
and hovered
methods are actually.
The current theme, this means you can base your checkbox style on the Theme.
as iced::Theme
implements checkbox::StyleSheet
.
I hope this answers your question !
Okay, so with Checkbox I unfortunately cannot use Default::default()
inline then. Can I load default values within the stylesheet implementation? I.e. override the text color and leave everything else at its system default value?