Improve Padding ergonomics
We expose free functions for creating a `Padding` and methods with the same name to modify its fields.
This commit is contained in:
parent
915c926c28
commit
7c3341760d
5 changed files with 70 additions and 47 deletions
|
|
@ -20,6 +20,7 @@ pub mod keyboard;
|
||||||
pub mod layout;
|
pub mod layout;
|
||||||
pub mod mouse;
|
pub mod mouse;
|
||||||
pub mod overlay;
|
pub mod overlay;
|
||||||
|
pub mod padding;
|
||||||
pub mod renderer;
|
pub mod renderer;
|
||||||
pub mod svg;
|
pub mod svg;
|
||||||
pub mod text;
|
pub mod text;
|
||||||
|
|
@ -35,7 +36,6 @@ mod color;
|
||||||
mod content_fit;
|
mod content_fit;
|
||||||
mod element;
|
mod element;
|
||||||
mod length;
|
mod length;
|
||||||
mod padding;
|
|
||||||
mod pixels;
|
mod pixels;
|
||||||
mod point;
|
mod point;
|
||||||
mod rectangle;
|
mod rectangle;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
//! Space stuff around the perimeter.
|
||||||
use crate::{Pixels, Size};
|
use crate::{Pixels, Size};
|
||||||
|
|
||||||
/// An amount of space to pad for each side of a box
|
/// An amount of space to pad for each side of a box
|
||||||
|
|
@ -9,7 +10,6 @@ use crate::{Pixels, Size};
|
||||||
/// #
|
/// #
|
||||||
/// let padding = Padding::from(20); // 20px on all sides
|
/// let padding = Padding::from(20); // 20px on all sides
|
||||||
/// let padding = Padding::from([10, 20]); // top/bottom, left/right
|
/// let padding = Padding::from([10, 20]); // top/bottom, left/right
|
||||||
/// let padding = Padding::from([5, 10, 15, 20]); // top, right, bottom, left
|
|
||||||
/// ```
|
/// ```
|
||||||
///
|
///
|
||||||
/// Normally, the `padding` method of a widget will ask for an `Into<Padding>`,
|
/// Normally, the `padding` method of a widget will ask for an `Into<Padding>`,
|
||||||
|
|
@ -31,7 +31,6 @@ use crate::{Pixels, Size};
|
||||||
///
|
///
|
||||||
/// let widget = Widget::new().padding(20); // 20px on all sides
|
/// let widget = Widget::new().padding(20); // 20px on all sides
|
||||||
/// let widget = Widget::new().padding([10, 20]); // top/bottom, left/right
|
/// let widget = Widget::new().padding([10, 20]); // top/bottom, left/right
|
||||||
/// let widget = Widget::new().padding([5, 10, 15, 20]); // top, right, bottom, left
|
|
||||||
/// ```
|
/// ```
|
||||||
#[derive(Debug, Copy, Clone)]
|
#[derive(Debug, Copy, Clone)]
|
||||||
pub struct Padding {
|
pub struct Padding {
|
||||||
|
|
@ -45,6 +44,43 @@ pub struct Padding {
|
||||||
pub left: f32,
|
pub left: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a [`Padding`] that is equal on all sides.
|
||||||
|
pub fn all(padding: impl Into<Pixels>) -> Padding {
|
||||||
|
Padding::new(padding.into().0)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create some top [`Padding`].
|
||||||
|
pub fn top(padding: impl Into<Pixels>) -> Padding {
|
||||||
|
Padding {
|
||||||
|
top: padding.into().0,
|
||||||
|
..Padding::ZERO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create some bottom [`Padding`].
|
||||||
|
pub fn bottom(padding: impl Into<Pixels>) -> Padding {
|
||||||
|
Padding {
|
||||||
|
bottom: padding.into().0,
|
||||||
|
..Padding::ZERO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create some left [`Padding`].
|
||||||
|
pub fn left(padding: impl Into<Pixels>) -> Padding {
|
||||||
|
Padding {
|
||||||
|
left: padding.into().0,
|
||||||
|
..Padding::ZERO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create some right [`Padding`].
|
||||||
|
pub fn right(padding: impl Into<Pixels>) -> Padding {
|
||||||
|
Padding {
|
||||||
|
right: padding.into().0,
|
||||||
|
..Padding::ZERO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Padding {
|
impl Padding {
|
||||||
/// Padding of zero
|
/// Padding of zero
|
||||||
pub const ZERO: Padding = Padding {
|
pub const ZERO: Padding = Padding {
|
||||||
|
|
@ -64,35 +100,43 @@ impl Padding {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create some top [`Padding`].
|
/// Sets the [`top`] of the [`Padding`].
|
||||||
pub fn top(padding: impl Into<Pixels>) -> Self {
|
///
|
||||||
|
/// [`top`]: Self::top
|
||||||
|
pub fn top(self, top: impl Into<Pixels>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
top: padding.into().0,
|
top: top.into().0,
|
||||||
..Self::ZERO
|
..self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create some right [`Padding`].
|
/// Sets the [`bottom`] of the [`Padding`].
|
||||||
pub fn right(padding: impl Into<Pixels>) -> Self {
|
///
|
||||||
|
/// [`bottom`]: Self::bottom
|
||||||
|
pub fn bottom(self, bottom: impl Into<Pixels>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
right: padding.into().0,
|
bottom: bottom.into().0,
|
||||||
..Self::ZERO
|
..self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create some bottom [`Padding`].
|
/// Sets the [`left`] of the [`Padding`].
|
||||||
pub fn bottom(padding: impl Into<Pixels>) -> Self {
|
///
|
||||||
|
/// [`left`]: Self::left
|
||||||
|
pub fn left(self, left: impl Into<Pixels>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
bottom: padding.into().0,
|
left: left.into().0,
|
||||||
..Self::ZERO
|
..self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create some left [`Padding`].
|
/// Sets the [`right`] of the [`Padding`].
|
||||||
pub fn left(padding: impl Into<Pixels>) -> Self {
|
///
|
||||||
|
/// [`right`]: Self::right
|
||||||
|
pub fn right(self, right: impl Into<Pixels>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
left: padding.into().0,
|
right: right.into().0,
|
||||||
..Self::ZERO
|
..self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -143,17 +187,6 @@ impl From<[u16; 2]> for Padding {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<[u16; 4]> for Padding {
|
|
||||||
fn from(p: [u16; 4]) -> Self {
|
|
||||||
Padding {
|
|
||||||
top: f32::from(p[0]),
|
|
||||||
right: f32::from(p[1]),
|
|
||||||
bottom: f32::from(p[2]),
|
|
||||||
left: f32::from(p[3]),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<f32> for Padding {
|
impl From<f32> for Padding {
|
||||||
fn from(p: f32) -> Self {
|
fn from(p: f32) -> Self {
|
||||||
Padding {
|
Padding {
|
||||||
|
|
@ -176,17 +209,6 @@ impl From<[f32; 2]> for Padding {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<[f32; 4]> for Padding {
|
|
||||||
fn from(p: [f32; 4]) -> Self {
|
|
||||||
Padding {
|
|
||||||
top: p[0],
|
|
||||||
right: p[1],
|
|
||||||
bottom: p[2],
|
|
||||||
left: p[3],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Padding> for Size {
|
impl From<Padding> for Size {
|
||||||
fn from(padding: Padding) -> Self {
|
fn from(padding: Padding) -> Self {
|
||||||
Self::new(padding.horizontal(), padding.vertical())
|
Self::new(padding.horizontal(), padding.vertical())
|
||||||
|
|
|
||||||
|
|
@ -170,7 +170,7 @@ impl Example {
|
||||||
column![
|
column![
|
||||||
column![
|
column![
|
||||||
button(centered_text("Screenshot!"))
|
button(centered_text("Screenshot!"))
|
||||||
.padding([10, 20, 10, 20])
|
.padding([10, 20])
|
||||||
.width(Fill)
|
.width(Fill)
|
||||||
.on_press(Message::Screenshot),
|
.on_press(Message::Screenshot),
|
||||||
if !self.png_saving {
|
if !self.png_saving {
|
||||||
|
|
@ -182,7 +182,7 @@ impl Example {
|
||||||
.style(button::secondary)
|
.style(button::secondary)
|
||||||
}
|
}
|
||||||
.style(button::secondary)
|
.style(button::secondary)
|
||||||
.padding([10, 20, 10, 20])
|
.padding([10, 20])
|
||||||
.width(Fill)
|
.width(Fill)
|
||||||
]
|
]
|
||||||
.spacing(10),
|
.spacing(10),
|
||||||
|
|
@ -191,7 +191,7 @@ impl Example {
|
||||||
button(centered_text("Crop"))
|
button(centered_text("Crop"))
|
||||||
.on_press(Message::Crop)
|
.on_press(Message::Crop)
|
||||||
.style(button::danger)
|
.style(button::danger)
|
||||||
.padding([10, 20, 10, 20])
|
.padding([10, 20])
|
||||||
.width(Fill),
|
.width(Fill),
|
||||||
]
|
]
|
||||||
.spacing(10)
|
.spacing(10)
|
||||||
|
|
|
||||||
|
|
@ -213,7 +213,7 @@ impl ScrollableDemo {
|
||||||
scroll_to_beginning_button(),
|
scroll_to_beginning_button(),
|
||||||
]
|
]
|
||||||
.align_x(Center)
|
.align_x(Center)
|
||||||
.padding([40, 0, 40, 0])
|
.padding([40, 0])
|
||||||
.spacing(40),
|
.spacing(40),
|
||||||
)
|
)
|
||||||
.direction(scrollable::Direction::Vertical(
|
.direction(scrollable::Direction::Vertical(
|
||||||
|
|
@ -239,7 +239,7 @@ impl ScrollableDemo {
|
||||||
]
|
]
|
||||||
.height(450)
|
.height(450)
|
||||||
.align_y(Center)
|
.align_y(Center)
|
||||||
.padding([0, 40, 0, 40])
|
.padding([0, 40])
|
||||||
.spacing(40),
|
.spacing(40),
|
||||||
)
|
)
|
||||||
.direction(scrollable::Direction::Horizontal(
|
.direction(scrollable::Direction::Horizontal(
|
||||||
|
|
@ -281,7 +281,7 @@ impl ScrollableDemo {
|
||||||
scroll_to_beginning_button(),
|
scroll_to_beginning_button(),
|
||||||
]
|
]
|
||||||
.align_y(Center)
|
.align_y(Center)
|
||||||
.padding([0, 40, 0, 40])
|
.padding([0, 40])
|
||||||
.spacing(40),
|
.spacing(40),
|
||||||
)
|
)
|
||||||
.direction({
|
.direction({
|
||||||
|
|
|
||||||
|
|
@ -196,6 +196,7 @@ pub use crate::core::alignment;
|
||||||
pub use crate::core::border;
|
pub use crate::core::border;
|
||||||
pub use crate::core::color;
|
pub use crate::core::color;
|
||||||
pub use crate::core::gradient;
|
pub use crate::core::gradient;
|
||||||
|
pub use crate::core::padding;
|
||||||
pub use crate::core::theme;
|
pub use crate::core::theme;
|
||||||
pub use crate::core::{
|
pub use crate::core::{
|
||||||
Alignment, Background, Border, Color, ContentFit, Degrees, Gradient,
|
Alignment, Background, Border, Color, ContentFit, Degrees, Gradient,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue