1use nalgebra::Vector2;
2pub use taffy::{
3 AlignContent, AlignItems, AlignSelf, Dimension, Display, FlexDirection, FlexWrap, GridAutoFlow,
4 GridPlacement, JustifyContent, JustifyItems, JustifySelf, Layout, LengthPercentage,
5 LengthPercentageAuto, Line, Overflow, Position, Rect,
6};
7
8#[derive(Clone, PartialEq, Debug)]
10pub struct LayoutStyle {
11 pub display: Display,
13
14 pub overflow: (Overflow, Overflow),
16
17 pub scrollbar_width: f32,
19
20 pub position: Position,
22
23 pub inset: Rect<LengthPercentageAuto>,
25
26 pub size: Vector2<Dimension>,
28
29 pub min_size: Vector2<Dimension>,
31
32 pub max_size: Vector2<Dimension>,
34
35 pub aspect_ratio: Option<f32>,
39
40 pub margin: Rect<LengthPercentageAuto>,
42
43 pub padding: Rect<LengthPercentage>,
45
46 pub border: Rect<LengthPercentage>,
48
49 pub align_items: Option<AlignItems>,
51
52 pub align_self: Option<AlignSelf>,
55
56 pub justify_items: Option<AlignItems>,
58
59 pub justify_self: Option<AlignSelf>,
62
63 pub align_content: Option<AlignContent>,
65
66 pub justify_content: Option<JustifyContent>,
68
69 pub gap: Vector2<LengthPercentage>,
71
72 pub flex_direction: FlexDirection,
74
75 pub flex_wrap: FlexWrap,
77
78 pub flex_basis: Dimension,
80
81 pub flex_grow: f32,
85
86 pub flex_shrink: f32,
90
91 pub grid_auto_flow: GridAutoFlow,
93
94 pub grid_row: Line<GridPlacement>,
96
97 pub grid_column: Line<GridPlacement>,
99}
100
101impl Default for LayoutStyle {
102 fn default() -> Self {
103 LayoutStyle {
104 display: Display::default(),
105 overflow: (Overflow::Visible, Overflow::Visible),
106 scrollbar_width: 0.0,
107 position: Position::Relative,
108 inset: Rect::auto(),
109 margin: Rect::zero(),
110 padding: Rect::zero(),
111 border: Rect::zero(),
112 size: Vector2::new(Dimension::Auto, Dimension::Auto),
113 min_size: Vector2::new(Dimension::Auto, Dimension::Auto),
114 max_size: Vector2::new(Dimension::Auto, Dimension::Auto),
115 aspect_ratio: None,
116 gap: Vector2::new(LengthPercentage::Length(0.0), LengthPercentage::Length(0.0)),
117 align_items: None,
118 align_self: None,
119 justify_items: None,
120 justify_self: None,
121 align_content: None,
122 justify_content: None,
123 flex_direction: FlexDirection::Row,
124 flex_wrap: FlexWrap::NoWrap,
125 flex_grow: 0.0,
126 flex_shrink: 1.0,
127 flex_basis: Dimension::Auto,
128 grid_auto_flow: GridAutoFlow::Row,
129 grid_row: Line {
130 start: GridPlacement::Auto,
131 end: GridPlacement::Auto,
132 },
133 grid_column: Line {
134 start: GridPlacement::Auto,
135 end: GridPlacement::Auto,
136 },
137 }
138 }
139}
140
141impl From<LayoutStyle> for taffy::Style {
142 fn from(value: LayoutStyle) -> Self {
143 taffy::Style {
144 display: value.display,
145 overflow: taffy::Point {
146 x: value.overflow.0,
147 y: value.overflow.1,
148 },
149 scrollbar_width: value.scrollbar_width,
150 position: value.position,
151 inset: value.inset,
152 margin: value.margin,
153 padding: value.padding,
154 border: value.border,
155 size: taffy::Size {
156 width: value.size.x,
157 height: value.size.y,
158 },
159 min_size: taffy::Size {
160 width: value.min_size.x,
161 height: value.min_size.y,
162 },
163 max_size: taffy::Size {
164 width: value.max_size.x,
165 height: value.max_size.y,
166 },
167 aspect_ratio: value.aspect_ratio,
168 gap: taffy::Size {
169 width: value.gap.x,
170 height: value.gap.y,
171 },
172 align_items: value.align_items,
173 align_self: value.align_self,
174 justify_items: value.justify_items,
175 justify_self: value.justify_self,
176 align_content: value.align_content,
177 justify_content: value.justify_content,
178 flex_direction: value.flex_direction,
179 flex_wrap: value.flex_wrap,
180 flex_grow: value.flex_grow,
181 flex_shrink: value.flex_shrink,
182 flex_basis: value.flex_basis,
183 grid_auto_flow: value.grid_auto_flow,
184 grid_row: value.grid_row,
185 grid_column: value.grid_column,
186 ..Default::default()
187 }
188 }
189}
190
191#[derive(Debug)]
193pub struct LayoutNode {
194 pub layout: Layout,
196 pub children: Vec<LayoutNode>,
198}
199
200pub struct StyleNode {
202 pub style: LayoutStyle,
204 pub children: Vec<StyleNode>,
206}