summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-03-07 21:02:17 +0100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-03-07 21:02:17 +0100
commit7ece5eea509f3595432babfc7729701f2e063b21 (patch)
tree42502a52270f24d1d323a268a36c689cd92aec82
parentb8f05eb8dd0394e308385796c229cfc5bc4f3a73 (diff)
downloadiced-7ece5eea509f3595432babfc7729701f2e063b21.tar.gz
iced-7ece5eea509f3595432babfc7729701f2e063b21.tar.bz2
iced-7ece5eea509f3595432babfc7729701f2e063b21.zip
Implement additional helpers for `Border` and `container::Appearance`
-rw-r--r--core/src/border.rs35
-rw-r--r--examples/custom_widget/src/main.rs2
-rw-r--r--examples/gradient/src/main.rs19
-rw-r--r--widget/src/button.rs2
-rw-r--r--widget/src/container.rs26
-rw-r--r--widget/src/overlay/menu.rs2
-rw-r--r--widget/src/progress_bar.rs4
-rw-r--r--widget/src/radio.rs2
-rw-r--r--widget/src/rule.rs2
-rw-r--r--widget/src/scrollable.rs4
-rw-r--r--widget/src/slider.rs4
-rw-r--r--widget/src/vertical_slider.rs4
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,