Fix rink compilation with Taffy 0.3

This commit is contained in:
Nico Burns committed 2023-05-17 10:47:31 +01:00
1 parent 67d99b3a16
commit 2d40e0a261
2 files changed
+57 -35

No files matched your search

+56 -34
View File
@@ -81,10 +81,11 @@ impl State for TaffyLayout {
}; };
if let PossiblyUninitalized::Initialized(n) = self.node { if let PossiblyUninitalized::Initialized(n) = self.node {
if self.style != style { if self.style != style {
taffy.set_style(n, style).unwrap(); taffy.set_style(n, style.clone()).unwrap();
} }
} else { } else {
self.node = PossiblyUninitalized::Initialized(taffy.new_leaf(style).unwrap()); self.node =
PossiblyUninitalized::Initialized(taffy.new_leaf(style.clone()).unwrap());
changed = true; changed = true;
} }
} else { } else {
@@ -117,69 +118,90 @@ impl State for TaffyLayout {
child_layout.push(l.node.unwrap()); child_layout.push(l.node.unwrap());
} }
fn scale_dimention(d: Dimension) -> Dimension { fn scale_dimension(d: Dimension) -> Dimension {
match d { match d {
Dimension::Points(p) => Dimension::Points(unit_to_layout_space(p)), Dimension::Points(p) => Dimension::Points(unit_to_layout_space(p)),
Dimension::Percent(p) => Dimension::Percent(p), Dimension::Percent(p) => Dimension::Percent(p),
Dimension::Auto => Dimension::Auto, Dimension::Auto => Dimension::Auto,
Dimension::Undefined => Dimension::Undefined,
} }
} }
let style = Style {
position: Rect { fn scale_length_percentage_auto(d: LengthPercentageAuto) -> LengthPercentageAuto {
left: scale_dimention(style.position.left), match d {
right: scale_dimention(style.position.right), LengthPercentageAuto::Points(p) => {
top: scale_dimention(style.position.top), LengthPercentageAuto::Points(unit_to_layout_space(p))
bottom: scale_dimention(style.position.bottom), }
LengthPercentageAuto::Percent(p) => LengthPercentageAuto::Percent(p),
LengthPercentageAuto::Auto => LengthPercentageAuto::Auto,
}
}
fn scale_length_percentage(d: LengthPercentage) -> LengthPercentage {
match d {
LengthPercentage::Points(p) => {
LengthPercentage::Points(unit_to_layout_space(p))
}
LengthPercentage::Percent(p) => LengthPercentage::Percent(p),
}
}
let scaled_style = Style {
inset: Rect {
left: scale_length_percentage_auto(style.inset.left),
right: scale_length_percentage_auto(style.inset.right),
top: scale_length_percentage_auto(style.inset.top),
bottom: scale_length_percentage_auto(style.inset.bottom),
}, },
margin: Rect { margin: Rect {
left: scale_dimention(style.margin.left), left: scale_length_percentage_auto(style.margin.left),
right: scale_dimention(style.margin.right), right: scale_length_percentage_auto(style.margin.right),
top: scale_dimention(style.margin.top), top: scale_length_percentage_auto(style.margin.top),
bottom: scale_dimention(style.margin.bottom), bottom: scale_length_percentage_auto(style.margin.bottom),
}, },
padding: Rect { padding: Rect {
left: scale_dimention(style.padding.left), left: scale_length_percentage(style.padding.left),
right: scale_dimention(style.padding.right), right: scale_length_percentage(style.padding.right),
top: scale_dimention(style.padding.top), top: scale_length_percentage(style.padding.top),
bottom: scale_dimention(style.padding.bottom), bottom: scale_length_percentage(style.padding.bottom),
}, },
border: Rect { border: Rect {
left: scale_dimention(style.border.left), left: scale_length_percentage(style.border.left),
right: scale_dimention(style.border.right), right: scale_length_percentage(style.border.right),
top: scale_dimention(style.border.top), top: scale_length_percentage(style.border.top),
bottom: scale_dimention(style.border.bottom), bottom: scale_length_percentage(style.border.bottom),
}, },
gap: Size { gap: Size {
width: scale_dimention(style.gap.width), width: scale_length_percentage(style.gap.width),
height: scale_dimention(style.gap.height), height: scale_length_percentage(style.gap.height),
}, },
flex_basis: scale_dimention(style.flex_basis), flex_basis: scale_dimension(style.flex_basis),
size: Size { size: Size {
width: scale_dimention(style.size.width), width: scale_dimension(style.size.width),
height: scale_dimention(style.size.height), height: scale_dimension(style.size.height),
}, },
min_size: Size { min_size: Size {
width: scale_dimention(style.min_size.width), width: scale_dimension(style.min_size.width),
height: scale_dimention(style.min_size.height), height: scale_dimension(style.min_size.height),
}, },
max_size: Size { max_size: Size {
width: scale_dimention(style.max_size.width), width: scale_dimension(style.max_size.width),
height: scale_dimention(style.max_size.height), height: scale_dimension(style.max_size.height),
}, },
..style ..style.clone()
}; };
if let PossiblyUninitalized::Initialized(n) = self.node { if let PossiblyUninitalized::Initialized(n) = self.node {
if self.style != style { if self.style != style {
taffy.set_style(n, style).unwrap(); taffy.set_style(n, scaled_style).unwrap();
} }
if taffy.children(n).unwrap() != child_layout { if taffy.children(n).unwrap() != child_layout {
taffy.set_children(n, &child_layout).unwrap(); taffy.set_children(n, &child_layout).unwrap();
} }
} else { } else {
self.node = PossiblyUninitalized::Initialized( self.node = PossiblyUninitalized::Initialized(
taffy.new_with_children(style, &child_layout).unwrap(), taffy
.new_with_children(scaled_style, &child_layout)
.unwrap(),
); );
changed = true; changed = true;
} }
+1 -1
View File
@@ -172,7 +172,7 @@ pub fn render<R: Driver>(
.unwrap(); .unwrap();
// the root node fills the entire area // the root node fills the entire area
let mut style = *taffy.style(root_node).unwrap(); let mut style = taffy.style(root_node).unwrap().clone();
let new_size = Size { let new_size = Size {
width: Dimension::Points(width), width: Dimension::Points(width),
height: Dimension::Points(height), height: Dimension::Points(height),