#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct Rect {
pub x: f32,
pub y: f32,
pub width: f32,
pub height: f32,
}
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct EdgeSizes {
pub top: f32,
pub right: f32,
pub bottom: f32,
pub left: f32,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum FragmentPosition {
#[default]
Whole,
First,
Middle,
Last,
}
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct Layout {
pub content: Rect,
pub padding: EdgeSizes,
pub border: EdgeSizes,
pub margin: EdgeSizes,
pub fragment: FragmentPosition,
}
impl Layout {
pub fn margin_box_height(&self) -> f32 {
self.margin.top
+ self.border.top
+ self.padding.top
+ self.content.height
+ self.padding.bottom
+ self.border.bottom
+ self.margin.bottom
}
pub fn border_box(&self) -> Rect {
Rect {
x: self.content.x - self.padding.left - self.border.left,
y: self.content.y - self.padding.top - self.border.top,
width: self.border.left
+ self.padding.left
+ self.content.width
+ self.padding.right
+ self.border.right,
height: self.border.top
+ self.padding.top
+ self.content.height
+ self.padding.bottom
+ self.border.bottom,
}
}
pub fn padding_box(&self) -> Rect {
Rect {
x: self.content.x - self.padding.left,
y: self.content.y - self.padding.top,
width: self.padding.left + self.content.width + self.padding.right,
height: self.padding.top + self.content.height + self.padding.bottom,
}
}
}