ori_core/layout/
padding.rsuse super::{Size, Vector};
#[derive(Clone, Copy, Debug, Default, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Padding {
pub top: f32,
pub right: f32,
pub bottom: f32,
pub left: f32,
}
impl Padding {
pub const fn new(top: f32, right: f32, bottom: f32, left: f32) -> Self {
Self {
top,
right,
bottom,
left,
}
}
pub const fn all(value: f32) -> Self {
Self::new(value, value, value, value)
}
pub fn size(&self) -> Size {
Size::new(self.left + self.right, self.top + self.bottom)
}
pub fn offset(&self) -> Vector {
Vector::new(self.left, self.top)
}
}
impl From<(f32, f32, f32, f32)> for Padding {
fn from(value: (f32, f32, f32, f32)) -> Self {
Self::new(value.0, value.1, value.2, value.3)
}
}
impl From<[f32; 4]> for Padding {
fn from(value: [f32; 4]) -> Self {
Self::new(value[0], value[1], value[2], value[3])
}
}
impl From<(f32, f32)> for Padding {
fn from((horizontal, vertical): (f32, f32)) -> Self {
Self::new(vertical, horizontal, vertical, horizontal)
}
}
impl From<[f32; 2]> for Padding {
fn from([horizontal, vertical]: [f32; 2]) -> Self {
Self::new(vertical, horizontal, vertical, horizontal)
}
}
impl From<f32> for Padding {
fn from(value: f32) -> Self {
Self::all(value)
}
}