diff options
author | 2024-03-07 21:02:17 +0100 | |
---|---|---|
committer | 2024-03-07 21:02:17 +0100 | |
commit | 7ece5eea509f3595432babfc7729701f2e063b21 (patch) | |
tree | 42502a52270f24d1d323a268a36c689cd92aec82 | |
parent | b8f05eb8dd0394e308385796c229cfc5bc4f3a73 (diff) | |
download | iced-7ece5eea509f3595432babfc7729701f2e063b21.tar.gz iced-7ece5eea509f3595432babfc7729701f2e063b21.tar.bz2 iced-7ece5eea509f3595432babfc7729701f2e063b21.zip |
Implement additional helpers for `Border` and `container::Appearance`
-rw-r--r-- | core/src/border.rs | 35 | ||||
-rw-r--r-- | examples/custom_widget/src/main.rs | 2 | ||||
-rw-r--r-- | examples/gradient/src/main.rs | 19 | ||||
-rw-r--r-- | widget/src/button.rs | 2 | ||||
-rw-r--r-- | widget/src/container.rs | 26 | ||||
-rw-r--r-- | widget/src/overlay/menu.rs | 2 | ||||
-rw-r--r-- | widget/src/progress_bar.rs | 4 | ||||
-rw-r--r-- | widget/src/radio.rs | 2 | ||||
-rw-r--r-- | widget/src/rule.rs | 2 | ||||
-rw-r--r-- | widget/src/scrollable.rs | 4 | ||||
-rw-r--r-- | widget/src/slider.rs | 4 | ||||
-rw-r--r-- | widget/src/vertical_slider.rs | 4 |
12 files changed, 71 insertions, 35 deletions
diff --git a/core/src/border.rs b/core/src/border.rs index 64262471..2df24988 100644 --- a/core/src/border.rs +++ b/core/src/border.rs @@ -1,5 +1,5 @@ //! Draw lines around containers. -use crate::Color; +use crate::{Color, Pixels}; /// A border. #[derive(Debug, Clone, Copy, PartialEq, Default)] @@ -15,11 +15,38 @@ pub struct Border { } impl Border { - /// Creates a new default [`Border`] with the given [`Radius`]. - pub fn with_radius(radius: impl Into<Radius>) -> Self { + /// Creates a new default rounded [`Border`] with the given [`Radius`]. + /// + /// ``` + /// # use iced_core::Border; + /// # + /// assert_eq!(Border::rounded(10), Border::default().with_radius(10)); + /// ``` + pub fn rounded(radius: impl Into<Radius>) -> Self { + Self::default().with_radius(radius) + } + + /// Updates the [`Color`] of the [`Border`]. + pub fn with_color(self, color: impl Into<Color>) -> Self { + Self { + color: color.into(), + ..self + } + } + + /// Updates the [`Radius`] of the [`Border`]. + pub fn with_radius(self, radius: impl Into<Radius>) -> Self { Self { radius: radius.into(), - ..Self::default() + ..self + } + } + + /// Updates the width of the [`Border`]. + pub fn with_width(self, width: impl Into<Pixels>) -> Self { + Self { + width: width.into().0, + ..self } } } diff --git a/examples/custom_widget/src/main.rs b/examples/custom_widget/src/main.rs index 25c0bb39..305ef7dd 100644 --- a/examples/custom_widget/src/main.rs +++ b/examples/custom_widget/src/main.rs @@ -62,7 +62,7 @@ mod circle { renderer.fill_quad( renderer::Quad { bounds: layout.bounds(), - border: Border::with_radius(self.radius), + border: Border::rounded(self.radius), ..renderer::Quad::default() }, Color::BLACK, diff --git a/examples/gradient/src/main.rs b/examples/gradient/src/main.rs index 6d3ff125..4a8b2fa5 100644 --- a/examples/gradient/src/main.rs +++ b/examples/gradient/src/main.rs @@ -4,8 +4,7 @@ use iced::widget::{ }; use iced::{gradient, window}; use iced::{ - Alignment, Background, Color, Element, Length, Radians, Sandbox, Settings, - Theme, + Alignment, Color, Element, Length, Radians, Sandbox, Settings, Theme, }; pub fn main() -> iced::Result { @@ -71,20 +70,12 @@ impl Sandbox for Gradient { transparent, } = *self; - let appearance = { - let gradient = gradient::Linear::new(angle) - .add_stop(0.0, start) - .add_stop(1.0, end) - .into(); - - container::Appearance { - background: Some(Background::Gradient(gradient)), - ..Default::default() - } - }; + let gradient = gradient::Linear::new(angle) + .add_stop(0.0, start) + .add_stop(1.0, end); let gradient_box = themer( - appearance, + gradient, container(horizontal_space()) .width(Length::Fill) .height(Length::Fill), diff --git a/widget/src/button.rs b/widget/src/button.rs index 12716acd..9ce856bb 100644 --- a/widget/src/button.rs +++ b/widget/src/button.rs @@ -543,7 +543,7 @@ fn styled(pair: palette::Pair) -> Appearance { Appearance { background: Some(Background::Color(pair.color)), text_color: pair.text, - border: Border::with_radius(2), + border: Border::rounded(2), ..Appearance::default() } } diff --git a/widget/src/container.rs b/widget/src/container.rs index 5e16312c..81b9a29e 100644 --- a/widget/src/container.rs +++ b/widget/src/container.rs @@ -1,6 +1,7 @@ //! Decorate content and apply alignment. use crate::core::alignment::{self, Alignment}; use crate::core::event::{self, Event}; +use crate::core::gradient::{self, Gradient}; use crate::core::layout; use crate::core::mouse; use crate::core::overlay; @@ -510,8 +511,7 @@ pub struct Appearance { } impl Appearance { - /// Derives a new [`Appearance`] with a border of the given [`Color`] and - /// `width`. + /// Updates the border of the [`Appearance`] with the given [`Color`] and `width`. pub fn with_border( self, color: impl Into<Color>, @@ -527,7 +527,7 @@ impl Appearance { } } - /// Derives a new [`Appearance`] with the given [`Background`]. + /// Updates the background of the [`Appearance`]. pub fn with_background(self, background: impl Into<Background>) -> Self { Self { background: Some(background.into()), @@ -566,6 +566,24 @@ impl DefaultStyle for Appearance { } } +impl DefaultStyle for Color { + fn default_style() -> Style<Self> { + |color, _status| Appearance::default().with_background(*color) + } +} + +impl DefaultStyle for Gradient { + fn default_style() -> Style<Self> { + |gradient, _status| Appearance::default().with_background(*gradient) + } +} + +impl DefaultStyle for gradient::Linear { + fn default_style() -> Style<Self> { + |gradient, _status| Appearance::default().with_background(*gradient) + } +} + /// A transparent [`Container`]. pub fn transparent<Theme>(_theme: &Theme, _status: Status) -> Appearance { Appearance::default() @@ -577,7 +595,7 @@ pub fn box_(theme: &Theme, _status: Status) -> Appearance { Appearance { background: Some(palette.background.weak.color.into()), - border: Border::with_radius(2), + border: Border::rounded(2), ..Appearance::default() } } diff --git a/widget/src/overlay/menu.rs b/widget/src/overlay/menu.rs index e855fc14..746407c6 100644 --- a/widget/src/overlay/menu.rs +++ b/widget/src/overlay/menu.rs @@ -539,7 +539,7 @@ where width: bounds.width - appearance.border.width * 2.0, ..bounds }, - border: Border::with_radius(appearance.border.radius), + border: Border::rounded(appearance.border.radius), ..renderer::Quad::default() }, appearance.selected_background, diff --git a/widget/src/progress_bar.rs b/widget/src/progress_bar.rs index f945a7b5..7b0ea63f 100644 --- a/widget/src/progress_bar.rs +++ b/widget/src/progress_bar.rs @@ -134,7 +134,7 @@ where width: active_progress_width, ..bounds }, - border: Border::with_radius(appearance.border.radius), + border: Border::rounded(appearance.border.radius), ..renderer::Quad::default() }, appearance.bar, @@ -230,6 +230,6 @@ fn styled( Appearance { background: background.into(), bar: bar.into(), - border: Border::with_radius(2), + border: Border::rounded(2), } } diff --git a/widget/src/radio.rs b/widget/src/radio.rs index e8f1eb1f..34c3b3a0 100644 --- a/widget/src/radio.rs +++ b/widget/src/radio.rs @@ -328,7 +328,7 @@ where width: bounds.width - dot_size, height: bounds.height - dot_size, }, - border: Border::with_radius(dot_size / 2.0), + border: Border::rounded(dot_size / 2.0), ..renderer::Quad::default() }, appearance.dot_color, diff --git a/widget/src/rule.rs b/widget/src/rule.rs index 384baed4..8580d4c7 100644 --- a/widget/src/rule.rs +++ b/widget/src/rule.rs @@ -118,7 +118,7 @@ where renderer.fill_quad( renderer::Quad { bounds, - border: Border::with_radius(appearance.radius), + border: Border::rounded(appearance.radius), ..renderer::Quad::default() }, appearance.color, diff --git a/widget/src/scrollable.rs b/widget/src/scrollable.rs index 8d2b2057..6cd2048f 100644 --- a/widget/src/scrollable.rs +++ b/widget/src/scrollable.rs @@ -1692,10 +1692,10 @@ pub fn default(theme: &Theme, status: Status) -> Appearance { let scrollbar = Scrollbar { background: Some(palette.background.weak.color.into()), - border: Border::with_radius(2), + border: Border::rounded(2), scroller: Scroller { color: palette.background.strong.color, - border: Border::with_radius(2), + border: Border::rounded(2), }, }; diff --git a/widget/src/slider.rs b/widget/src/slider.rs index 6449b18e..c37607a8 100644 --- a/widget/src/slider.rs +++ b/widget/src/slider.rs @@ -392,7 +392,7 @@ where width: offset + handle_width / 2.0, height: style.rail.width, }, - border: Border::with_radius(style.rail.border_radius), + border: Border::rounded(style.rail.border_radius), ..renderer::Quad::default() }, style.rail.colors.0, @@ -406,7 +406,7 @@ where width: bounds.width - offset - handle_width / 2.0, height: style.rail.width, }, - border: Border::with_radius(style.rail.border_radius), + border: Border::rounded(style.rail.border_radius), ..renderer::Quad::default() }, style.rail.colors.1, diff --git a/widget/src/vertical_slider.rs b/widget/src/vertical_slider.rs index 103c3b7d..67a9f4e6 100644 --- a/widget/src/vertical_slider.rs +++ b/widget/src/vertical_slider.rs @@ -397,7 +397,7 @@ where width: style.rail.width, height: offset + handle_width / 2.0, }, - border: Border::with_radius(style.rail.border_radius), + border: Border::rounded(style.rail.border_radius), ..renderer::Quad::default() }, style.rail.colors.1, @@ -411,7 +411,7 @@ where width: style.rail.width, height: bounds.height - offset - handle_width / 2.0, }, - border: Border::with_radius(style.rail.border_radius), + border: Border::rounded(style.rail.border_radius), ..renderer::Quad::default() }, style.rail.colors.0, |