Add borrowed version of taffy_stylo interop
1use super::stylo;
2
3#[inline]
4pub(crate) fn length_percentage(val: &stylo::LengthPercentage) -> taffy::LengthPercentage {
5 if let Some(length) = val.to_length() {
6 taffy::LengthPercentage::Length(length.px())
7 } else if let Some(val) = val.to_percentage() {
8 taffy::LengthPercentage::Percent(val.0)
9 } else {
10 // TODO: Support calc
11 taffy::LengthPercentage::Percent(0.0)
12 }
13}
14
15#[inline]
16pub(crate) fn length_percentage_auto(val: &stylo::LengthPercentageAuto) -> taffy::LengthPercentageAuto {
17 match val {
18 stylo::LengthPercentageAuto::Auto => taffy::LengthPercentageAuto::Auto,
19 stylo::LengthPercentageAuto::LengthPercentage(val) => length_percentage(val).into(),
20 }
21}
22
23#[inline]
24pub(crate) fn dimension(val: &stylo::Size) -> taffy::Dimension {
25 match val {
26 stylo::Size::LengthPercentage(val) => length_percentage(&val.0).into(),
27 stylo::Size::Auto => taffy::Dimension::Auto,
28 // TODO: implement other values in Taffy (and servo configuration of stylo)
29 // _ => taffy::Dimension::Auto,
30 }
31}
32
33#[inline]
34pub(crate) fn max_size_dimension(val: &stylo::MaxSize) -> taffy::Dimension {
35 match val {
36 stylo::MaxSize::LengthPercentage(val) => length_percentage(&val.0).into(),
37 stylo::MaxSize::None => taffy::Dimension::Auto,
38 // TODO: implement other values in Taffy (and servo configuration of stylo)
39 // _ => taffy::Dimension::Auto,
40 }
41}
42
43#[inline]
44pub(crate) fn is_block(input: stylo::Display) -> bool {
45 matches!(input.outside(), stylo::DisplayOutside::Block)
46 // && matches!(input.inside(), stylo::DisplayInside::Flow | stylo::DisplayInside::FlowRoot)
47}
48
49#[inline]
50pub(crate) fn box_generation_mode(input: stylo::Display) -> taffy::BoxGenerationMode {
51 match input.inside() {
52 stylo::DisplayInside::None => taffy::BoxGenerationMode::None,
53 // stylo::DisplayInside::Contents => display = taffy::BoxGenerationMode::Contents,
54 _ => taffy::BoxGenerationMode::Normal,
55 }
56}
57
58#[inline]
59pub(crate) fn position(input: stylo::Position) -> taffy::Position {
60 match input {
61 // TODO: support position:static
62 stylo::Position::Relative => taffy::Position::Relative,
63 stylo::Position::Static => taffy::Position::Relative,
64
65 // TODO: support position:fixed and sticky
66 stylo::Position::Absolute => taffy::Position::Absolute,
67 stylo::Position::Fixed => taffy::Position::Absolute,
68 stylo::Position::Sticky => taffy::Position::Absolute,
69 }
70}
71
72#[inline]
73pub(crate) fn overflow(input: stylo::Overflow) -> taffy::Overflow {
74 // TODO: Enable Overflow::Clip in servo configuration of stylo
75 match input {
76 stylo::Overflow::Visible => taffy::Overflow::Visible,
77 stylo::Overflow::Hidden => taffy::Overflow::Hidden,
78 stylo::Overflow::Scroll => taffy::Overflow::Scroll,
79 // TODO: Support Overflow::Auto in Taffy
80 stylo::Overflow::Auto => taffy::Overflow::Scroll,
81 }
82}
83
84#[inline]
85pub(crate) fn aspect_ratio(input: stylo::AspectRatio) -> Option<f32> {
86 match input.ratio {
87 stylo::PreferredRatio::None => None,
88 stylo::PreferredRatio::Ratio(val) => Some(val.0 .0 / val.1 .0),
89 }
90}
91
92#[inline]
93pub(crate) fn gap(input: &stylo::Gap) -> taffy::LengthPercentage {
94 match input {
95 // For Flexbox and CSS Grid the "normal" value is 0px. This may need to be updated
96 // if we ever implement multi-column layout.
97 stylo::Gap::Normal => taffy::LengthPercentage::Length(0.0),
98 stylo::Gap::LengthPercentage(val) => length_percentage(&val.0),
99 }
100}
101
102#[inline]
103pub(crate) fn flex_basis(input: &stylo::FlexBasis) -> taffy::Dimension {
104 // TODO: Support flex-basis: content in Taffy
105 match input {
106 stylo::FlexBasis::Content => taffy::Dimension::Auto,
107 stylo::FlexBasis::Size(size) => dimension(&size).into(),
108 }
109}
110
111#[inline]
112pub(crate) fn flex_direction(input: stylo::FlexDirection) -> taffy::FlexDirection {
113 match input {
114 stylo::FlexDirection::Row => taffy::FlexDirection::Row,
115 stylo::FlexDirection::RowReverse => taffy::FlexDirection::RowReverse,
116 stylo::FlexDirection::Column => taffy::FlexDirection::Column,
117 stylo::FlexDirection::ColumnReverse => taffy::FlexDirection::ColumnReverse,
118 }
119}
120
121#[inline]
122pub(crate) fn flex_wrap(input: stylo::FlexWrap) -> taffy::FlexWrap {
123 match input {
124 stylo::FlexWrap::Wrap => taffy::FlexWrap::Wrap,
125 stylo::FlexWrap::WrapReverse => taffy::FlexWrap::WrapReverse,
126 stylo::FlexWrap::Nowrap => taffy::FlexWrap::NoWrap,
127 }
128}
129
130#[inline]
131pub(crate) fn justify_content(input: stylo::JustifyContent) -> Option<taffy::JustifyContent> {
132 match input {
133 stylo::JustifyContent::Start => Some(taffy::JustifyContent::Start),
134 stylo::JustifyContent::End => Some(taffy::JustifyContent::End),
135 stylo::JustifyContent::FlexStart => Some(taffy::JustifyContent::FlexStart),
136 stylo::JustifyContent::FlexEnd => Some(taffy::JustifyContent::FlexEnd),
137 stylo::JustifyContent::Stretch => Some(taffy::JustifyContent::Stretch),
138 stylo::JustifyContent::Center => Some(taffy::JustifyContent::Center),
139 stylo::JustifyContent::SpaceBetween => Some(taffy::JustifyContent::SpaceBetween),
140 stylo::JustifyContent::SpaceAround => Some(taffy::JustifyContent::SpaceAround),
141 stylo::JustifyContent::SpaceEvenly => Some(taffy::JustifyContent::SpaceEvenly),
142 }
143}
144
145#[inline]
146pub(crate) fn align_content(input: stylo::AlignContent) -> Option<taffy::AlignContent> {
147 match input {
148 stylo::AlignContent::Start => Some(taffy::AlignContent::Start),
149 stylo::AlignContent::End => Some(taffy::AlignContent::End),
150 stylo::AlignContent::FlexStart => Some(taffy::AlignContent::FlexStart),
151 stylo::AlignContent::FlexEnd => Some(taffy::AlignContent::FlexEnd),
152 stylo::AlignContent::Center => Some(taffy::AlignContent::Center),
153 stylo::AlignContent::Stretch => Some(taffy::AlignContent::Stretch),
154 stylo::AlignContent::SpaceBetween => Some(taffy::AlignContent::SpaceBetween),
155 stylo::AlignContent::SpaceAround => Some(taffy::AlignContent::SpaceAround),
156 stylo::AlignContent::SpaceEvenly => Some(taffy::AlignContent::SpaceEvenly),
157 }
158}
159
160#[inline]
161pub(crate) fn align_items(input: stylo::AlignItems) -> Option<taffy::AlignItems> {
162 match input {
163 stylo::AlignItems::Stretch => Some(taffy::AlignItems::Stretch),
164 stylo::AlignItems::FlexStart => Some(taffy::AlignItems::FlexStart),
165 stylo::AlignItems::FlexEnd => Some(taffy::AlignItems::FlexEnd),
166 stylo::AlignItems::Center => Some(taffy::AlignItems::Center),
167 stylo::AlignItems::Baseline => Some(taffy::AlignItems::Baseline),
168 }
169}
170
171#[inline]
172pub(crate) fn align_self(input: stylo::AlignSelf) -> Option<taffy::AlignSelf> {
173 match input {
174 stylo::AlignSelf::Auto => None,
175 stylo::AlignSelf::Stretch => Some(taffy::AlignSelf::Stretch),
176 stylo::AlignSelf::FlexStart => Some(taffy::AlignSelf::FlexStart),
177 stylo::AlignSelf::FlexEnd => Some(taffy::AlignSelf::FlexEnd),
178 stylo::AlignSelf::Center => Some(taffy::AlignSelf::Center),
179 stylo::AlignSelf::Baseline => Some(taffy::AlignSelf::Baseline),
180 }
181}
182
183// pub(crate) fn justify_items(input: stylo::JustifyItems) -> Option<taffy::JustifyItems> {
184// match input {
185// stylo::JustifyItems::Stretch => Some(taffy::JustifyItems::Stretch),
186// stylo::JustifyItems::FlexStart => Some(taffy::JustifyItems::FlexStart),
187// stylo::JustifyItems::FlexEnd => Some(taffy::JustifyItems::FlexEnd),
188// stylo::JustifyItems::Center => Some(taffy::JustifyItems::Center),
189// stylo::JustifyItems::Baseline => Some(taffy::JustifyItems::Baseline),
190// }
191// }
192
193// pub(crate) fn justify_self(input: stylo::JustifySelf) -> Option<taffy::JustifySelf> {
194// match input {
195// stylo::JustifySelf::Auto => None,
196// stylo::JustifySelf::Stretch => Some(taffy::JustifySelf::Stretch),
197// stylo::JustifySelf::FlexStart => Some(taffy::JustifySelf::FlexStart),
198// stylo::JustifySelf::FlexEnd => Some(taffy::JustifySelf::FlexEnd),
199// stylo::JustifySelf::Center => Some(taffy::JustifySelf::Center),
200// stylo::JustifySelf::Baseline => Some(taffy::JustifySelf::Baseline),
201// }
202// }