use crate::layout::LayoutInfo;
#[derive(Debug, Clone, Copy, PartialEq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Alignment {
Begin,
Center,
End,
Expand,
}
impl Alignment {
pub const fn align(
&self,
mut outer: LayoutInfo,
size: usize,
) -> LayoutInfo {
match self {
Alignment::Expand => outer,
Alignment::End => {
outer.start = outer.end.saturating_sub(size);
outer
}
Alignment::Begin => {
outer.end = outer.start + size;
outer
}
Alignment::Center => {
let centre = (outer.start + outer.end) / 2;
LayoutInfo {
start: centre.saturating_sub(size / 2),
end: centre + (size / 2) + (size % 2),
}
}
}
}
}