chore: update to 0.12

This commit is contained in:
Ashley Wulber 2023-11-30 14:01:42 -05:00 committed by Ashley Wulber
parent 35fea09344
commit 9202383596
34 changed files with 712 additions and 454 deletions

View file

@ -4,6 +4,7 @@
use super::widget::Assignment;
use crate::{Element, Renderer};
use iced_core::layout::{Limits, Node};
use iced_core::widget::Tree;
use iced_core::{Alignment, Length, Padding, Point, Size};
use taffy::geometry::{Line, Rect};
@ -24,6 +25,7 @@ pub fn resolve<Message>(
row_alignment: Alignment,
column_spacing: f32,
row_spacing: f32,
tree: &mut [Tree],
) -> Node {
let max_size = limits.max();
@ -33,10 +35,10 @@ pub fn resolve<Message>(
let mut taffy = TaffyTree::<()>::with_capacity(items.len() + 1);
// Attach widgets as child nodes.
for (child, assignment) in items.iter().zip(assignments.iter()) {
for ((child, assignment), tree) in items.iter().zip(assignments.iter()).zip(tree.iter_mut()) {
// Calculate the dimensions of the item.
let child_widget = child.as_widget();
let child_node = child_widget.layout(renderer, limits);
let child_node = child_widget.layout(tree, renderer, limits);
let size = child_node.size();
nodes.push(child_node);
@ -155,12 +157,18 @@ pub fn resolve<Message>(
}
};
for (leaf, (child, node)) in leafs.into_iter().zip(items.iter().zip(nodes.iter_mut())) {
for (((leaf, child), node), tree) in leafs
.into_iter()
.zip(items.iter())
.zip(nodes.iter_mut())
.zip(tree)
{
if let Ok(leaf_layout) = taffy.layout(leaf) {
let child_widget = child.as_widget();
match child_widget.width() {
Length::Fill | Length::FillPortion(_) => {
*node = child_widget.layout(renderer, &limits.width(leaf_layout.size.width));
*node =
child_widget.layout(tree, renderer, &limits.width(leaf_layout.size.width));
}
_ => (),
}

View file

@ -120,7 +120,12 @@ impl<'a, Message: 'static + Clone> Widget<Message, Renderer> for Grid<'a, Messag
self.height
}
fn layout(&self, renderer: &Renderer, limits: &layout::Limits) -> layout::Node {
fn layout(
&self,
tree: &mut Tree,
renderer: &Renderer,
limits: &layout::Limits,
) -> layout::Node {
let limits = limits
.max_width(self.max_width)
.width(self.width())
@ -138,6 +143,7 @@ impl<'a, Message: 'static + Clone> Widget<Message, Renderer> for Grid<'a, Messag
self.row_alignment,
f32::from(self.column_spacing),
f32::from(self.row_spacing),
&mut tree.children,
)
}