summaryrefslogtreecommitdiffstats
path: root/core/src
diff options
context:
space:
mode:
Diffstat (limited to 'core/src')
-rw-r--r--core/src/border.rs164
-rw-r--r--core/src/padding.rs22
2 files changed, 141 insertions, 45 deletions
diff --git a/core/src/border.rs b/core/src/border.rs
index 2df24988..05e74ac6 100644
--- a/core/src/border.rs
+++ b/core/src/border.rs
@@ -10,40 +10,64 @@ pub struct Border {
/// The width of the border.
pub width: f32,
- /// The radius of the border.
+ /// The [`Radius`] of the border.
pub radius: Radius,
}
-impl Border {
- /// 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)
- }
+/// Creates a new [`Border`] with the given [`Radius`].
+///
+/// ```
+/// # use iced_core::border::{self, Border};
+/// #
+/// assert_eq!(border::rounded(10), Border::default().rounded(10));
+/// ```
+pub fn rounded(radius: impl Into<Radius>) -> Border {
+ Border::default().rounded(radius)
+}
+
+/// Creates a new [`Border`] with the given [`Color`].
+///
+/// ```
+/// # use iced_core::border::{self, Border};
+/// # use iced_core::Color;
+/// #
+/// assert_eq!(border::color(Color::BLACK), Border::default().color(Color::BLACK));
+/// ```
+pub fn color(color: impl Into<Color>) -> Border {
+ Border::default().color(color)
+}
+
+/// Creates a new [`Border`] with the given `width`.
+///
+/// ```
+/// # use iced_core::border::{self, Border};
+/// # use iced_core::Color;
+/// #
+/// assert_eq!(border::width(10), Border::default().width(10));
+/// ```
+pub fn width(width: impl Into<Pixels>) -> Border {
+ Border::default().width(width)
+}
- /// Updates the [`Color`] of the [`Border`].
- pub fn with_color(self, color: impl Into<Color>) -> Self {
+impl Border {
+ /// Sets the [`Color`] of the [`Border`].
+ pub fn 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 {
+ /// Sets the [`Radius`] of the [`Border`].
+ pub fn rounded(self, radius: impl Into<Radius>) -> Self {
Self {
radius: radius.into(),
..self
}
}
- /// Updates the width of the [`Border`].
- pub fn with_width(self, width: impl Into<Pixels>) -> Self {
+ /// Sets the width of the [`Border`].
+ pub fn width(self, width: impl Into<Pixels>) -> Self {
Self {
width: width.into().0,
..self
@@ -54,11 +78,96 @@ impl Border {
/// The border radii for the corners of a graphics primitive in the order:
/// top-left, top-right, bottom-right, bottom-left.
#[derive(Debug, Clone, Copy, PartialEq, Default)]
-pub struct Radius([f32; 4]);
+pub struct Radius {
+ /// Top left radius
+ pub top_left: f32,
+ /// Top right radius
+ pub top_right: f32,
+ /// Bottom right radius
+ pub bottom_right: f32,
+ /// Bottom left radius
+ pub bottom_left: f32,
+}
+
+/// Creates a new [`Radius`] with the same value for each corner.
+pub fn radius(value: impl Into<Pixels>) -> Radius {
+ Radius::new(value)
+}
+
+/// Creates a new [`Radius`] with the given top left value.
+pub fn top_left(value: impl Into<Pixels>) -> Radius {
+ Radius::default().top_left(value)
+}
+
+/// Creates a new [`Radius`] with the given top right value.
+pub fn top_right(value: impl Into<Pixels>) -> Radius {
+ Radius::default().top_right(value)
+}
+
+/// Creates a new [`Radius`] with the given bottom right value.
+pub fn bottom_right(value: impl Into<Pixels>) -> Radius {
+ Radius::default().bottom_right(value)
+}
+
+/// Creates a new [`Radius`] with the given bottom left value.
+pub fn bottom_left(value: impl Into<Pixels>) -> Radius {
+ Radius::default().bottom_left(value)
+}
+
+impl Radius {
+ /// Creates a new [`Radius`] with the same value for each corner.
+ pub fn new(value: impl Into<Pixels>) -> Self {
+ let value = value.into().0;
+
+ Self {
+ top_left: value,
+ top_right: value,
+ bottom_right: value,
+ bottom_left: value,
+ }
+ }
+
+ /// Sets the top left value of the [`Radius`].
+ pub fn top_left(self, value: impl Into<Pixels>) -> Self {
+ Self {
+ top_left: value.into().0,
+ ..self
+ }
+ }
+
+ /// Sets the top right value of the [`Radius`].
+ pub fn top_right(self, value: impl Into<Pixels>) -> Self {
+ Self {
+ top_right: value.into().0,
+ ..self
+ }
+ }
+
+ /// Sets the bottom right value of the [`Radius`].
+ pub fn bottom_right(self, value: impl Into<Pixels>) -> Self {
+ Self {
+ bottom_right: value.into().0,
+ ..self
+ }
+ }
+
+ /// Sets the bottom left value of the [`Radius`].
+ pub fn bottom_left(self, value: impl Into<Pixels>) -> Self {
+ Self {
+ bottom_left: value.into().0,
+ ..self
+ }
+ }
+}
impl From<f32> for Radius {
- fn from(w: f32) -> Self {
- Self([w; 4])
+ fn from(radius: f32) -> Self {
+ Self {
+ top_left: radius,
+ top_right: radius,
+ bottom_right: radius,
+ bottom_left: radius,
+ }
}
}
@@ -80,14 +189,13 @@ impl From<i32> for Radius {
}
}
-impl From<[f32; 4]> for Radius {
- fn from(radi: [f32; 4]) -> Self {
- Self(radi)
- }
-}
-
impl From<Radius> for [f32; 4] {
fn from(radi: Radius) -> Self {
- radi.0
+ [
+ radi.top_left,
+ radi.top_right,
+ radi.bottom_right,
+ radi.bottom_left,
+ ]
}
}
diff --git a/core/src/padding.rs b/core/src/padding.rs
index a0915fbc..fdaa0236 100644
--- a/core/src/padding.rs
+++ b/core/src/padding.rs
@@ -32,7 +32,7 @@ use crate::{Pixels, Size};
/// let widget = Widget::new().padding(20); // 20px on all sides
/// let widget = Widget::new().padding([10, 20]); // top/bottom, left/right
/// ```
-#[derive(Debug, Copy, Clone)]
+#[derive(Debug, Copy, Clone, Default)]
pub struct Padding {
/// Top padding
pub top: f32,
@@ -51,34 +51,22 @@ pub fn all(padding: impl Into<Pixels>) -> Padding {
/// Create some top [`Padding`].
pub fn top(padding: impl Into<Pixels>) -> Padding {
- Padding {
- top: padding.into().0,
- ..Padding::ZERO
- }
+ Padding::default().top(padding)
}
/// Create some bottom [`Padding`].
pub fn bottom(padding: impl Into<Pixels>) -> Padding {
- Padding {
- bottom: padding.into().0,
- ..Padding::ZERO
- }
+ Padding::default().bottom(padding)
}
/// Create some left [`Padding`].
pub fn left(padding: impl Into<Pixels>) -> Padding {
- Padding {
- left: padding.into().0,
- ..Padding::ZERO
- }
+ Padding::default().left(padding)
}
/// Create some right [`Padding`].
pub fn right(padding: impl Into<Pixels>) -> Padding {
- Padding {
- right: padding.into().0,
- ..Padding::ZERO
- }
+ Padding::default().right(padding)
}
impl Padding {