Remove ambiguous text_color attributes for Checkbox and Radio

Instead, always use a `StyleSheet`.
This commit is contained in:
Héctor Ramón Jiménez 2022-01-20 18:34:15 +07:00
parent a3744ec97a
commit 93285d85b0
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
6 changed files with 21 additions and 33 deletions

View file

@ -116,6 +116,7 @@ mod dark {
dot_color: ACTIVE, dot_color: ACTIVE,
border_width: 1.0, border_width: 1.0,
border_color: ACTIVE, border_color: ACTIVE,
text_color: None,
} }
} }

View file

@ -343,6 +343,7 @@ mod style {
dot_color: ACTIVE, dot_color: ACTIVE,
border_width: 1.0, border_width: 1.0,
border_color: ACTIVE, border_color: ACTIVE,
text_color: None,
} }
} }
@ -528,10 +529,10 @@ mod style {
background: if is_checked { ACTIVE } else { SURFACE } background: if is_checked { ACTIVE } else { SURFACE }
.into(), .into(),
checkmark_color: Color::WHITE, checkmark_color: Color::WHITE,
text_color: Color::BLACK,
border_radius: 2.0, border_radius: 2.0,
border_width: 1.0, border_width: 1.0,
border_color: ACTIVE, border_color: ACTIVE,
text_color: None,
} }
} }

View file

@ -10,8 +10,8 @@ use crate::text;
use crate::touch; use crate::touch;
use crate::widget::{self, Row, Text}; use crate::widget::{self, Row, Text};
use crate::{ use crate::{
Alignment, Clipboard, Color, Element, Hasher, Layout, Length, Point, Alignment, Clipboard, Element, Hasher, Layout, Length, Point, Rectangle,
Rectangle, Shell, Widget, Shell, Widget,
}; };
pub use iced_style::checkbox::{Style, StyleSheet}; pub use iced_style::checkbox::{Style, StyleSheet};
@ -43,7 +43,6 @@ pub struct Checkbox<'a, Message, Renderer: text::Renderer> {
spacing: u16, spacing: u16,
text_size: Option<u16>, text_size: Option<u16>,
font: Renderer::Font, font: Renderer::Font,
text_color: Option<Color>,
style_sheet: Box<dyn StyleSheet + 'a>, style_sheet: Box<dyn StyleSheet + 'a>,
} }
@ -75,7 +74,6 @@ impl<'a, Message, Renderer: text::Renderer> Checkbox<'a, Message, Renderer> {
spacing: Self::DEFAULT_SPACING, spacing: Self::DEFAULT_SPACING,
text_size: None, text_size: None,
font: Renderer::Font::default(), font: Renderer::Font::default(),
text_color: None,
style_sheet: Default::default(), style_sheet: Default::default(),
} }
} }
@ -112,12 +110,6 @@ impl<'a, Message, Renderer: text::Renderer> Checkbox<'a, Message, Renderer> {
self self
} }
/// Sets the text color of the [`Checkbox`] button.
pub fn text_color(mut self, color: Color) -> Self {
self.text_color = Some(color);
self
}
/// Sets the style of the [`Checkbox`]. /// Sets the style of the [`Checkbox`].
pub fn style( pub fn style(
mut self, mut self,
@ -264,7 +256,7 @@ where
&self.label, &self.label,
self.font.clone(), self.font.clone(),
self.text_size, self.text_size,
self.text_color.or(Some(custom_style.text_color)), custom_style.text_color,
alignment::Horizontal::Left, alignment::Horizontal::Left,
alignment::Vertical::Center, alignment::Vertical::Center,
); );

View file

@ -51,7 +51,6 @@ pub struct Radio<'a, Message, Renderer: text::Renderer> {
size: u16, size: u16,
spacing: u16, spacing: u16,
text_size: Option<u16>, text_size: Option<u16>,
text_color: Option<Color>,
font: Renderer::Font, font: Renderer::Font,
style_sheet: Box<dyn StyleSheet + 'a>, style_sheet: Box<dyn StyleSheet + 'a>,
} }
@ -92,7 +91,6 @@ where
size: Self::DEFAULT_SIZE, size: Self::DEFAULT_SIZE,
spacing: Self::DEFAULT_SPACING, //15 spacing: Self::DEFAULT_SPACING, //15
text_size: None, text_size: None,
text_color: None,
font: Default::default(), font: Default::default(),
style_sheet: Default::default(), style_sheet: Default::default(),
} }
@ -122,12 +120,6 @@ where
self self
} }
/// Sets the text color of the [`Radio`] button.
pub fn text_color(mut self, color: Color) -> Self {
self.text_color = Some(color);
self
}
/// Sets the text font of the [`Radio`] button. /// Sets the text font of the [`Radio`] button.
pub fn font(mut self, font: Renderer::Font) -> Self { pub fn font(mut self, font: Renderer::Font) -> Self {
self.font = font; self.font = font;
@ -231,6 +223,12 @@ where
let mut children = layout.children(); let mut children = layout.children();
let custom_style = if is_mouse_over {
self.style_sheet.hovered()
} else {
self.style_sheet.active()
};
{ {
let layout = children.next().unwrap(); let layout = children.next().unwrap();
let bounds = layout.bounds(); let bounds = layout.bounds();
@ -238,20 +236,14 @@ where
let size = bounds.width; let size = bounds.width;
let dot_size = size / 2.0; let dot_size = size / 2.0;
let style = if is_mouse_over {
self.style_sheet.hovered()
} else {
self.style_sheet.active()
};
renderer.fill_quad( renderer.fill_quad(
renderer::Quad { renderer::Quad {
bounds, bounds,
border_radius: size / 2.0, border_radius: size / 2.0,
border_width: style.border_width, border_width: custom_style.border_width,
border_color: style.border_color, border_color: custom_style.border_color,
}, },
style.background, custom_style.background,
); );
if self.is_selected { if self.is_selected {
@ -267,7 +259,7 @@ where
border_width: 0.0, border_width: 0.0,
border_color: Color::TRANSPARENT, border_color: Color::TRANSPARENT,
}, },
style.dot_color, custom_style.dot_color,
); );
} }
} }
@ -282,7 +274,7 @@ where
&self.label, &self.label,
self.font.clone(), self.font.clone(),
self.text_size, self.text_size,
self.text_color, custom_style.text_color,
alignment::Horizontal::Left, alignment::Horizontal::Left,
alignment::Vertical::Center, alignment::Vertical::Center,
); );

View file

@ -6,10 +6,10 @@ use iced_core::{Background, Color};
pub struct Style { pub struct Style {
pub background: Background, pub background: Background,
pub checkmark_color: Color, pub checkmark_color: Color,
pub text_color: Color,
pub border_radius: f32, pub border_radius: f32,
pub border_width: f32, pub border_width: f32,
pub border_color: Color, pub border_color: Color,
pub text_color: Option<Color>,
} }
/// A set of rules that dictate the style of a checkbox. /// A set of rules that dictate the style of a checkbox.
@ -26,10 +26,10 @@ impl StyleSheet for Default {
Style { Style {
background: Background::Color(Color::from_rgb(0.95, 0.95, 0.95)), background: Background::Color(Color::from_rgb(0.95, 0.95, 0.95)),
checkmark_color: Color::from_rgb(0.3, 0.3, 0.3), checkmark_color: Color::from_rgb(0.3, 0.3, 0.3),
text_color: Color::BLACK,
border_radius: 5.0, border_radius: 5.0,
border_width: 1.0, border_width: 1.0,
border_color: Color::from_rgb(0.6, 0.6, 0.6), border_color: Color::from_rgb(0.6, 0.6, 0.6),
text_color: None,
} }
} }

View file

@ -8,6 +8,7 @@ pub struct Style {
pub dot_color: Color, pub dot_color: Color,
pub border_width: f32, pub border_width: f32,
pub border_color: Color, pub border_color: Color,
pub text_color: Option<Color>,
} }
/// A set of rules that dictate the style of a radio button. /// A set of rules that dictate the style of a radio button.
@ -26,6 +27,7 @@ impl StyleSheet for Default {
dot_color: Color::from_rgb(0.3, 0.3, 0.3), dot_color: Color::from_rgb(0.3, 0.3, 0.3),
border_width: 1.0, border_width: 1.0,
border_color: Color::from_rgb(0.6, 0.6, 0.6), border_color: Color::from_rgb(0.6, 0.6, 0.6),
text_color: None,
} }
} }