taffy/compute/common/
alignment.rsuse crate::style::AlignContent;
pub(crate) fn compute_alignment_offset(
free_space: f32,
num_items: usize,
gap: f32,
alignment_mode: AlignContent,
layout_is_flex_reversed: bool,
is_first: bool,
) -> f32 {
if is_first {
match alignment_mode {
AlignContent::Start => 0.0,
AlignContent::FlexStart => {
if layout_is_flex_reversed {
free_space
} else {
0.0
}
}
AlignContent::End => free_space,
AlignContent::FlexEnd => {
if layout_is_flex_reversed {
0.0
} else {
free_space
}
}
AlignContent::Center => free_space / 2.0,
AlignContent::Stretch => 0.0,
AlignContent::SpaceBetween => 0.0,
AlignContent::SpaceAround => {
if free_space >= 0.0 {
(free_space / num_items as f32) / 2.0
} else {
free_space / 2.0
}
}
AlignContent::SpaceEvenly => {
if free_space >= 0.0 {
free_space / (num_items + 1) as f32
} else {
free_space / 2.0
}
}
}
} else {
let free_space = free_space.max(0.0);
gap + match alignment_mode {
AlignContent::Start => 0.0,
AlignContent::FlexStart => 0.0,
AlignContent::End => 0.0,
AlignContent::FlexEnd => 0.0,
AlignContent::Center => 0.0,
AlignContent::Stretch => 0.0,
AlignContent::SpaceBetween => free_space / (num_items - 1) as f32,
AlignContent::SpaceAround => free_space / num_items as f32,
AlignContent::SpaceEvenly => free_space / (num_items + 1) as f32,
}
}
}