diff options
Diffstat (limited to '')
| -rw-r--r-- | widget/src/pane_grid.rs | 13 | ||||
| -rw-r--r-- | widget/src/pane_grid/content.rs | 13 | ||||
| -rw-r--r-- | widget/src/pane_grid/title_bar.rs | 18 | 
3 files changed, 31 insertions, 13 deletions
| diff --git a/widget/src/pane_grid.rs b/widget/src/pane_grid.rs index d8c98858..366d9a66 100644 --- a/widget/src/pane_grid.rs +++ b/widget/src/pane_grid.rs @@ -275,10 +275,12 @@ where      fn layout(          &self, +        tree: &Tree,          renderer: &Renderer,          limits: &layout::Limits,      ) -> layout::Node {          layout( +            tree,              renderer,              limits,              self.contents.layout(), @@ -286,7 +288,9 @@ where              self.height,              self.spacing,              self.contents.iter(), -            |content, renderer, limits| content.layout(renderer, limits), +            |content, tree, renderer, limits| { +                content.layout(tree, renderer, limits) +            },          )      } @@ -471,6 +475,7 @@ where  /// Calculates the [`Layout`] of a [`PaneGrid`].  pub fn layout<Renderer, T>( +    tree: &Tree,      renderer: &Renderer,      limits: &layout::Limits,      node: &Node, @@ -478,19 +483,21 @@ pub fn layout<Renderer, T>(      height: Length,      spacing: f32,      contents: impl Iterator<Item = (Pane, T)>, -    layout_content: impl Fn(T, &Renderer, &layout::Limits) -> layout::Node, +    layout_content: impl Fn(T, &Tree, &Renderer, &layout::Limits) -> layout::Node,  ) -> layout::Node {      let limits = limits.width(width).height(height);      let size = limits.resolve(Size::ZERO);      let regions = node.pane_regions(spacing, size);      let children = contents -        .filter_map(|(pane, content)| { +        .zip(tree.children.iter()) +        .filter_map(|((pane, content), tree)| {              let region = regions.get(&pane)?;              let size = Size::new(region.width, region.height);              let mut node = layout_content(                  content, +                tree,                  renderer,                  &layout::Limits::new(size, size),              ); diff --git a/widget/src/pane_grid/content.rs b/widget/src/pane_grid/content.rs index e890e41a..8a74b4b9 100644 --- a/widget/src/pane_grid/content.rs +++ b/widget/src/pane_grid/content.rs @@ -150,18 +150,23 @@ where      pub(crate) fn layout(          &self, +        tree: &Tree,          renderer: &Renderer,          limits: &layout::Limits,      ) -> layout::Node {          if let Some(title_bar) = &self.title_bar {              let max_size = limits.max(); -            let title_bar_layout = title_bar -                .layout(renderer, &layout::Limits::new(Size::ZERO, max_size)); +            let title_bar_layout = title_bar.layout( +                &tree.children[1], +                renderer, +                &layout::Limits::new(Size::ZERO, max_size), +            );              let title_bar_size = title_bar_layout.size();              let mut body_layout = self.body.as_widget().layout( +                &tree.children[0],                  renderer,                  &layout::Limits::new(                      Size::ZERO, @@ -179,7 +184,9 @@ where                  vec![title_bar_layout, body_layout],              )          } else { -            self.body.as_widget().layout(renderer, limits) +            self.body +                .as_widget() +                .layout(&tree.children[0], renderer, limits)          }      } diff --git a/widget/src/pane_grid/title_bar.rs b/widget/src/pane_grid/title_bar.rs index cac24e68..c0fb9936 100644 --- a/widget/src/pane_grid/title_bar.rs +++ b/widget/src/pane_grid/title_bar.rs @@ -213,23 +213,27 @@ where      pub(crate) fn layout(          &self, +        tree: &Tree,          renderer: &Renderer,          limits: &layout::Limits,      ) -> layout::Node {          let limits = limits.pad(self.padding);          let max_size = limits.max(); -        let title_layout = self -            .content -            .as_widget() -            .layout(renderer, &layout::Limits::new(Size::ZERO, max_size)); +        let title_layout = self.content.as_widget().layout( +            &tree.children[0], +            renderer, +            &layout::Limits::new(Size::ZERO, max_size), +        );          let title_size = title_layout.size();          let mut node = if let Some(controls) = &self.controls { -            let mut controls_layout = controls -                .as_widget() -                .layout(renderer, &layout::Limits::new(Size::ZERO, max_size)); +            let mut controls_layout = controls.as_widget().layout( +                &tree.children[1], +                renderer, +                &layout::Limits::new(Size::ZERO, max_size), +            );              let controls_size = controls_layout.size();              let space_before_controls = max_size.width - controls_size.width; | 
