Improve Border ergonomics
This commit is contained in:
parent
7c3341760d
commit
ab392cee94
13 changed files with 204 additions and 95 deletions
|
|
@ -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)
|
||||
}
|
||||
|
||||
/// Updates the [`Color`] of the [`Border`].
|
||||
pub fn with_color(self, color: impl Into<Color>) -> Self {
|
||||
/// 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)
|
||||
}
|
||||
|
||||
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,
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue