diff options
author | 2023-01-17 10:12:51 -0800 | |
---|---|---|
committer | 2023-01-17 10:18:39 -0800 | |
commit | b2a3a85acb2a0722e90c46b70d574f1d676da9d1 (patch) | |
tree | b0e892439dba8ada5b64d920be3411f325ac2a5d /native/src | |
parent | 3c866c15aa1db944a2056f01449a2fbdda2f5abb (diff) | |
download | iced-b2a3a85acb2a0722e90c46b70d574f1d676da9d1.tar.gz iced-b2a3a85acb2a0722e90c46b70d574f1d676da9d1.tar.bz2 iced-b2a3a85acb2a0722e90c46b70d574f1d676da9d1.zip |
Use group overlay for containers w/ children
Diffstat (limited to 'native/src')
-rw-r--r-- | native/src/overlay.rs | 8 | ||||
-rw-r--r-- | native/src/widget/pane_grid.rs | 13 |
2 files changed, 13 insertions, 8 deletions
diff --git a/native/src/overlay.rs b/native/src/overlay.rs index 0b1e8daf..e7394494 100644 --- a/native/src/overlay.rs +++ b/native/src/overlay.rs @@ -91,7 +91,7 @@ where } } -/// Obtains the first overlay [`Element`] found in the given children. +/// Returns a [`Group`] of overlay [`Element`] children. /// /// This method will generally only be used by advanced users that are /// implementing the [`Widget`](crate::Widget) trait. @@ -104,12 +104,14 @@ pub fn from_children<'a, Message, Renderer>( where Renderer: crate::Renderer, { - children + let children = children .iter_mut() .zip(&mut tree.children) .zip(layout.children()) .filter_map(|((child, state), layout)| { child.as_widget_mut().overlay(state, layout, renderer) }) - .next() + .collect::<Vec<_>>(); + + (!children.is_empty()).then(|| Group::with_children(children).overlay()) } diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs index 8dbd1825..eb04c0ba 100644 --- a/native/src/widget/pane_grid.rs +++ b/native/src/widget/pane_grid.rs @@ -35,7 +35,7 @@ pub use iced_style::pane_grid::{Line, StyleSheet}; use crate::event::{self, Event}; use crate::layout; use crate::mouse; -use crate::overlay; +use crate::overlay::{self, Group}; use crate::renderer; use crate::touch; use crate::widget; @@ -450,14 +450,17 @@ where layout: Layout<'_>, renderer: &Renderer, ) -> Option<overlay::Element<'_, Message, Renderer>> { - self.contents + let children = self + .contents .iter_mut() .zip(&mut tree.children) .zip(layout.children()) - .filter_map(|(((_, pane), tree), layout)| { - pane.overlay(tree, layout, renderer) + .filter_map(|(((_, content), state), layout)| { + content.overlay(state, layout, renderer) }) - .next() + .collect::<Vec<_>>(); + + (!children.is_empty()).then(|| Group::with_children(children).overlay()) } } |