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 Appearances 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?