summaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-07-10 01:35:58 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-07-10 01:35:58 +0200
commitf24e03eae85cb4a684eb0a28033c70c355d2c5ca (patch)
treeb7e9a6ec5ab5f9ef81bdf9b17c360e436ce52f0b /native
parent1070b61f3408539f6c9cb9d265f3295e6d055db7 (diff)
downloadiced-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.rs15
-rw-r--r--native/src/widget/pane_grid/content.rs19
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>