summaryrefslogtreecommitdiffstats
path: root/native/src/overlay.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2023-01-24 02:14:50 +0100
committerLibravatar GitHub <noreply@github.com>2023-01-24 02:14:50 +0100
commit2dea5fe058f825db1a03cfce1fa84efbcb46a906 (patch)
tree1991b0c69784d37671686776a0296f047ac16731 /native/src/overlay.rs
parenteb4fcba05fb54741289a28ec9b921c90c9acc7fd (diff)
parent01c484245be54c1aeb6605659fb0f222856c28da (diff)
downloadiced-2dea5fe058f825db1a03cfce1fa84efbcb46a906.tar.gz
iced-2dea5fe058f825db1a03cfce1fa84efbcb46a906.tar.bz2
iced-2dea5fe058f825db1a03cfce1fa84efbcb46a906.zip
Merge pull request #1655 from tarkah/feat/group-overlay
Group Overlay
Diffstat (limited to 'native/src/overlay.rs')
-rw-r--r--native/src/overlay.rs18
1 files changed, 15 insertions, 3 deletions
diff --git a/native/src/overlay.rs b/native/src/overlay.rs
index 22f8b6ec..6cada416 100644
--- a/native/src/overlay.rs
+++ b/native/src/overlay.rs
@@ -1,9 +1,11 @@
//! Display interactive elements on top of other widgets.
mod element;
+mod group;
pub mod menu;
pub use element::Element;
+pub use group::Group;
pub use menu::Menu;
use crate::event::{self, Event};
@@ -87,9 +89,17 @@ where
) -> mouse::Interaction {
mouse::Interaction::Idle
}
+
+ /// Returns true if the cursor is over the [`Overlay`].
+ ///
+ /// By default, it returns true if the bounds of the `layout` contain
+ /// the `cursor_position`.
+ fn is_over(&self, layout: Layout<'_>, cursor_position: Point) -> bool {
+ layout.bounds().contains(cursor_position)
+ }
}
-/// 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.
@@ -102,12 +112,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())
}