tawasuyu

tawasuyu/taffy

A high performance rust-powered UI layout library

HTML 5544Rust 88Markdown 11TOML 91926 Definitions

⎇ f60ac6d66a6ef25060b5a053b541ed3b7de8e3af taffy_stylo/src/t2s.rs Rust · 202 lines · 8.2 KB History Who touched what raw

Add borrowed version of taffy_stylo interop f60ac6d66 · Nico Burns ·

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// }