diff options
author | 2020-07-10 01:35:58 +0200 | |
---|---|---|
committer | 2020-07-10 01:35:58 +0200 | |
commit | f24e03eae85cb4a684eb0a28033c70c355d2c5ca (patch) | |
tree | b7e9a6ec5ab5f9ef81bdf9b17c360e436ce52f0b /native | |
parent | 1070b61f3408539f6c9cb9d265f3295e6d055db7 (diff) | |
download | iced-f24e03eae85cb4a684eb0a28033c70c355d2c5ca.tar.gz iced-f24e03eae85cb4a684eb0a28033c70c355d2c5ca.tar.bz2 iced-f24e03eae85cb4a684eb0a28033c70c355d2c5ca.zip |
Implement `Widget::overlay` for `PaneGrid`
Diffstat (limited to 'native')
-rw-r--r-- | native/src/widget/pane_grid.rs | 15 | ||||
-rw-r--r-- | native/src/widget/pane_grid/content.rs | 19 |
2 files changed, 32 insertions, 2 deletions
diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs index 8fc423af..a8e1f852 100644 --- a/native/src/widget/pane_grid.rs +++ b/native/src/widget/pane_grid.rs @@ -29,8 +29,8 @@ pub use state::{Focus, State}; pub use title_bar::TitleBar; use crate::{ - container, keyboard, layout, mouse, row, text, Clipboard, Element, Event, - Hasher, Layout, Length, Point, Rectangle, Size, Vector, Widget, + container, keyboard, layout, mouse, overlay, row, text, Clipboard, Element, + Event, Hasher, Layout, Length, Point, Rectangle, Size, Vector, Widget, }; /// A collection of panes distributed using either vertical or horizontal splits @@ -636,6 +636,17 @@ where element.hash_layout(state); } } + + fn overlay( + &mut self, + layout: Layout<'_>, + ) -> Option<overlay::Element<'_, Message, Renderer>> { + self.elements + .iter_mut() + .zip(layout.children()) + .filter_map(|((_, pane), layout)| pane.overlay(layout)) + .next() + } } /// The renderer of a [`PaneGrid`]. diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index 1f5ce640..39a92186 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -1,5 +1,6 @@ use crate::container; use crate::layout; +use crate::overlay; use crate::pane_grid::{self, TitleBar}; use crate::{Clipboard, Element, Event, Hasher, Layout, Point, Size}; @@ -184,6 +185,24 @@ where pub(crate) fn hash_layout(&self, state: &mut Hasher) { self.body.hash_layout(state); } + + pub(crate) fn overlay( + &mut self, + layout: Layout<'_>, + ) -> Option<overlay::Element<'_, Message, Renderer>> { + let body_layout = if self.title_bar.is_some() { + let mut children = layout.children(); + + // Overlays only allowed in the pane body, for now at least. + let _title_bar_layout = children.next(); + + children.next()? + } else { + layout + }; + + self.body.overlay(body_layout) + } } impl<'a, T, Message, Renderer> From<T> for Content<'a, Message, Renderer> |