use druid::kurbo::Size;
use druid::BoxConstraints;
#[derive(Copy, Clone, Debug, PartialEq)]
pub struct FlexContainerParams {
pub cross_alignment: CrossAxisAlignment,
pub main_alignment: MainAxisAlignment,
pub fill_major_axis: bool,
}
#[derive(Copy, Clone, Default, Debug, PartialEq)]
pub struct FlexParams {
pub flex: f64,
pub alignment: Option<CrossAxisAlignment>,
}
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum Axis {
Horizontal,
Vertical,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum CrossAxisAlignment {
Start,
Center,
End,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum MainAxisAlignment {
Start,
Center,
End,
SpaceBetween,
SpaceEvenly,
SpaceAround,
}
impl FlexParams {
pub fn new(flex: f64, alignment: impl Into<Option<CrossAxisAlignment>>) -> Self {
FlexParams {
flex,
alignment: alignment.into(),
}
}
}
impl Axis {
pub(crate) fn major(self, coords: Size) -> f64 {
match self {
Axis::Horizontal => coords.width,
Axis::Vertical => coords.height,
}
}
pub(crate) fn minor(self, coords: Size) -> f64 {
match self {
Axis::Horizontal => coords.height,
Axis::Vertical => coords.width,
}
}
pub(crate) fn pack(self, major: f64, minor: f64) -> (f64, f64) {
match self {
Axis::Horizontal => (major, minor),
Axis::Vertical => (minor, major),
}
}
pub(crate) fn constraints(
self,
bc: &BoxConstraints,
min_major: f64,
major: f64,
) -> BoxConstraints {
match self {
Axis::Horizontal => BoxConstraints::new(
Size::new(min_major, bc.min().height),
Size::new(major, bc.max().height),
),
Axis::Vertical => BoxConstraints::new(
Size::new(bc.min().width, min_major),
Size::new(bc.max().width, major),
),
}
}
}
impl From<f64> for FlexParams {
fn from(flex: f64) -> FlexParams {
FlexParams {
flex,
alignment: None,
}
}
}