#![doc=include_str!("../README.md")]
#![deny(clippy::missing_const_for_fn)]
use layout::Vec2;
pub mod align;
pub mod flexbox;
pub mod grid;
pub mod layout;
pub use align::Alignment;
#[derive(Debug, Clone, Copy, PartialEq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Orientation {
Vertical,
Horizontal,
}
pub trait Layout {
fn width_for_height(&self, height: usize) -> usize;
fn height_for_width(&self, width: usize) -> usize;
fn prefered_size(&self) -> Vec2;
fn prefered_size_of_container(&self, container: Vec2) -> Vec2 {
let mut size = self.prefered_size();
if size.x > container.x {
size.x = container.x;
size.y = self.height_for_width(size.x);
}
if size.y > container.y {
size.y = container.y;
size.x = self.width_for_height(size.y);
}
size
}
}
impl<T: Layout> Layout for &T {
fn width_for_height(&self, height: usize) -> usize {
(*self).width_for_height(height)
}
fn height_for_width(&self, width: usize) -> usize {
(*self).height_for_width(width)
}
fn prefered_size(&self) -> Vec2 {
(*self).prefered_size()
}
}