summaryrefslogtreecommitdiffstats
path: root/native/src/element.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2020-07-16 05:00:37 +0200
committerLibravatar GitHub <noreply@github.com>2020-07-16 05:00:37 +0200
commitda5da3958e3b7fe85e371846a795c4ae05cb2df7 (patch)
treecd9f353e005ebc9c49d987125ba168a87982c629 /native/src/element.rs
parent62ec03a0afe8566a8f0b06675990a83fd65de1a9 (diff)
parent31c30fedd5e5ad74cc1f66162d7e5c0e5e3cf420 (diff)
downloadiced-da5da3958e3b7fe85e371846a795c4ae05cb2df7.tar.gz
iced-da5da3958e3b7fe85e371846a795c4ae05cb2df7.tar.bz2
iced-da5da3958e3b7fe85e371846a795c4ae05cb2df7.zip
Merge pull request #444 from hecrj/feature/overlay
Overlay support and `PickList` widget
Diffstat (limited to 'native/src/element.rs')
-rw-r--r--native/src/element.rs37
1 files changed, 34 insertions, 3 deletions
diff --git a/native/src/element.rs b/native/src/element.rs
index 73e39012..514a135b 100644
--- a/native/src/element.rs
+++ b/native/src/element.rs
@@ -1,5 +1,6 @@
use crate::{
- layout, Clipboard, Color, Event, Hasher, Layout, Length, Point, Widget,
+ layout, overlay, Clipboard, Color, Event, Hasher, Layout, Length, Point,
+ Widget,
};
/// A generic [`Widget`].
@@ -22,7 +23,7 @@ impl<'a, Message, Renderer> Element<'a, Message, Renderer>
where
Renderer: crate::Renderer,
{
- /// Create a new [`Element`] containing the given [`Widget`].
+ /// Creates a new [`Element`] containing the given [`Widget`].
///
/// [`Element`]: struct.Element.html
/// [`Widget`]: widget/trait.Widget.html
@@ -270,6 +271,16 @@ where
pub fn hash_layout(&self, state: &mut Hasher) {
self.widget.hash_layout(state);
}
+
+ /// Returns the overlay of the [`Element`], if there is any.
+ ///
+ /// [`Element`]: struct.Element.html
+ pub fn overlay<'b>(
+ &'b mut self,
+ layout: Layout<'_>,
+ ) -> Option<overlay::Element<'b, Message, Renderer>> {
+ self.widget.overlay(layout)
+ }
}
struct Map<'a, A, B, Renderer> {
@@ -294,7 +305,9 @@ impl<'a, A, B, Renderer> Map<'a, A, B, Renderer> {
impl<'a, A, B, Renderer> Widget<B, Renderer> for Map<'a, A, B, Renderer>
where
- Renderer: crate::Renderer,
+ Renderer: crate::Renderer + 'a,
+ A: 'static,
+ B: 'static,
{
fn width(&self) -> Length {
self.widget.width()
@@ -351,6 +364,17 @@ where
fn hash_layout(&self, state: &mut Hasher) {
self.widget.hash_layout(state);
}
+
+ fn overlay(
+ &mut self,
+ layout: Layout<'_>,
+ ) -> Option<overlay::Element<'_, B, Renderer>> {
+ let mapper = &self.mapper;
+
+ self.widget
+ .overlay(layout)
+ .map(move |overlay| overlay.map(mapper))
+ }
}
struct Explain<'a, Message, Renderer: crate::Renderer> {
@@ -426,4 +450,11 @@ where
fn hash_layout(&self, state: &mut Hasher) {
self.element.widget.hash_layout(state);
}
+
+ fn overlay(
+ &mut self,
+ layout: Layout<'_>,
+ ) -> Option<overlay::Element<'_, Message, Renderer>> {
+ self.element.overlay(layout)
+ }
}