taffy/compute/common/
alignment.rs1use crate::style::AlignContent;
3
4pub(crate) fn apply_alignment_fallback(
9 free_space: f32,
10 num_items: usize,
11 mut alignment_mode: AlignContent,
12 mut is_safe: bool,
13) -> AlignContent {
14 if num_items <= 1 || free_space <= 0.0 {
19 (alignment_mode, is_safe) = match alignment_mode {
20 AlignContent::Stretch => (AlignContent::FlexStart, true),
21 AlignContent::SpaceBetween => (AlignContent::FlexStart, true),
22 AlignContent::SpaceAround => (AlignContent::Center, true),
23 AlignContent::SpaceEvenly => (AlignContent::Center, true),
24 _ => (alignment_mode, is_safe),
25 }
26 };
27
28 if free_space <= 0.0 && is_safe {
30 alignment_mode = AlignContent::Start;
31 }
32
33 alignment_mode
34}
35
36pub(crate) fn compute_alignment_offset(
43 free_space: f32,
44 num_items: usize,
45 gap: f32,
46 alignment_mode: AlignContent,
47 layout_is_flex_reversed: bool,
48 is_first: bool,
49) -> f32 {
50 if is_first {
51 match alignment_mode {
52 AlignContent::Start => 0.0,
53 AlignContent::FlexStart => {
54 if layout_is_flex_reversed {
55 free_space
56 } else {
57 0.0
58 }
59 }
60 AlignContent::End => free_space,
61 AlignContent::FlexEnd => {
62 if layout_is_flex_reversed {
63 0.0
64 } else {
65 free_space
66 }
67 }
68 AlignContent::Center => free_space / 2.0,
69 AlignContent::Stretch => 0.0,
70 AlignContent::SpaceBetween => 0.0,
71 AlignContent::SpaceAround => {
72 if free_space >= 0.0 {
73 (free_space / num_items as f32) / 2.0
74 } else {
75 free_space / 2.0
76 }
77 }
78 AlignContent::SpaceEvenly => {
79 if free_space >= 0.0 {
80 free_space / (num_items + 1) as f32
81 } else {
82 free_space / 2.0
83 }
84 }
85 }
86 } else {
87 let free_space = free_space.max(0.0);
88 gap + match alignment_mode {
89 AlignContent::Start => 0.0,
90 AlignContent::FlexStart => 0.0,
91 AlignContent::End => 0.0,
92 AlignContent::FlexEnd => 0.0,
93 AlignContent::Center => 0.0,
94 AlignContent::Stretch => 0.0,
95 AlignContent::SpaceBetween => free_space / (num_items - 1) as f32,
96 AlignContent::SpaceAround => free_space / num_items as f32,
97 AlignContent::SpaceEvenly => free_space / (num_items + 1) as f32,
98 }
99 }
100}