diff options
author | 2020-04-14 12:11:10 +0200 | |
---|---|---|
committer | 2020-07-08 10:34:14 +0200 | |
commit | c901f40fd6c5aa39f4dc056b2b59bc7133b287e6 (patch) | |
tree | ef71165b0c0958e517ccac0e234cbb20aa385afa /native/src | |
parent | 5c4f5ae5ecb36703a95cafb2cd58692529c9466d (diff) | |
download | iced-c901f40fd6c5aa39f4dc056b2b59bc7133b287e6.tar.gz iced-c901f40fd6c5aa39f4dc056b2b59bc7133b287e6.tar.bz2 iced-c901f40fd6c5aa39f4dc056b2b59bc7133b287e6.zip |
Introduce `Widget::overlay` :tada:
Diffstat (limited to 'native/src')
-rw-r--r-- | native/src/element.rs | 21 | ||||
-rw-r--r-- | native/src/layout/debugger.rs | 2 | ||||
-rw-r--r-- | native/src/lib.rs | 4 | ||||
-rw-r--r-- | native/src/overlay.rs | 33 | ||||
-rw-r--r-- | native/src/widget.rs | 8 | ||||
-rw-r--r-- | native/src/widget/button.rs | 2 | ||||
-rw-r--r-- | native/src/widget/checkbox.rs | 2 | ||||
-rw-r--r-- | native/src/widget/column.rs | 2 | ||||
-rw-r--r-- | native/src/widget/container.rs | 2 | ||||
-rw-r--r-- | native/src/widget/image.rs | 2 | ||||
-rw-r--r-- | native/src/widget/pane_grid.rs | 2 | ||||
-rw-r--r-- | native/src/widget/progress_bar.rs | 3 | ||||
-rw-r--r-- | native/src/widget/radio.rs | 3 | ||||
-rw-r--r-- | native/src/widget/row.rs | 2 | ||||
-rw-r--r-- | native/src/widget/scrollable.rs | 2 | ||||
-rw-r--r-- | native/src/widget/slider.rs | 2 | ||||
-rw-r--r-- | native/src/widget/space.rs | 2 | ||||
-rw-r--r-- | native/src/widget/svg.rs | 2 | ||||
-rw-r--r-- | native/src/widget/text.rs | 2 | ||||
-rw-r--r-- | native/src/widget/text_input.rs | 2 |
20 files changed, 74 insertions, 26 deletions
diff --git a/native/src/element.rs b/native/src/element.rs index 73e39012..c6d65550 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, Clipboard, Color, Event, Hasher, Layout, Length, Overlay, Point, + Widget, }; /// A generic [`Widget`]. @@ -15,7 +16,7 @@ use crate::{ /// [`Element`]: struct.Element.html #[allow(missing_debug_implementations)] pub struct Element<'a, Message, Renderer> { - pub(crate) widget: Box<dyn Widget<Message, Renderer> + 'a>, + pub(crate) widget: Box<dyn Widget<'a, Message, Renderer> + 'a>, } impl<'a, Message, Renderer> Element<'a, Message, Renderer> @@ -27,7 +28,7 @@ where /// [`Element`]: struct.Element.html /// [`Widget`]: widget/trait.Widget.html pub fn new( - widget: impl Widget<Message, Renderer> + 'a, + widget: impl Widget<'a, Message, Renderer> + 'a, ) -> Element<'a, Message, Renderer> { Element { widget: Box::new(widget), @@ -270,16 +271,22 @@ where pub fn hash_layout(&self, state: &mut Hasher) { self.widget.hash_layout(state); } + + pub fn overlay( + &mut self, + ) -> Option<Box<dyn Overlay<Message, Renderer> + 'a>> { + self.widget.overlay() + } } struct Map<'a, A, B, Renderer> { - widget: Box<dyn Widget<A, Renderer> + 'a>, + widget: Box<dyn Widget<'a, A, Renderer> + 'a>, mapper: Box<dyn Fn(A) -> B>, } impl<'a, A, B, Renderer> Map<'a, A, B, Renderer> { pub fn new<F>( - widget: Box<dyn Widget<A, Renderer> + 'a>, + widget: Box<dyn Widget<'a, A, Renderer> + 'a>, mapper: F, ) -> Map<'a, A, B, Renderer> where @@ -292,7 +299,7 @@ impl<'a, A, B, Renderer> Map<'a, A, B, Renderer> { } } -impl<'a, A, B, Renderer> Widget<B, Renderer> for Map<'a, A, B, Renderer> +impl<'a, A, B, Renderer> Widget<'a, B, Renderer> for Map<'a, A, B, Renderer> where Renderer: crate::Renderer, { @@ -367,7 +374,7 @@ where } } -impl<'a, Message, Renderer> Widget<Message, Renderer> +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Explain<'a, Message, Renderer> where Renderer: crate::Renderer + layout::Debugger, diff --git a/native/src/layout/debugger.rs b/native/src/layout/debugger.rs index e4b21609..9c58f4f1 100644 --- a/native/src/layout/debugger.rs +++ b/native/src/layout/debugger.rs @@ -18,7 +18,7 @@ pub trait Debugger: Renderer { fn explain<Message>( &mut self, defaults: &Self::Defaults, - widget: &dyn Widget<Message, Self>, + widget: &dyn Widget<'_, Message, Self>, layout: Layout<'_>, cursor_position: Point, color: Color, diff --git a/native/src/lib.rs b/native/src/lib.rs index b67ff2a1..dbec068d 100644 --- a/native/src/lib.rs +++ b/native/src/lib.rs @@ -30,7 +30,7 @@ //! [`Widget`]: widget/trait.Widget.html //! [`UserInterface`]: struct.UserInterface.html //! [renderer]: renderer/index.html -#![deny(missing_docs)] +//#![deny(missing_docs)] #![deny(missing_debug_implementations)] #![deny(unused_results)] #![forbid(unsafe_code)] @@ -48,6 +48,7 @@ mod clipboard; mod element; mod event; mod hasher; +mod overlay; mod runtime; mod user_interface; @@ -75,6 +76,7 @@ pub use element::Element; pub use event::Event; pub use hasher::Hasher; pub use layout::Layout; +pub use overlay::Overlay; pub use program::Program; pub use renderer::Renderer; pub use runtime::Runtime; diff --git a/native/src/overlay.rs b/native/src/overlay.rs new file mode 100644 index 00000000..d34432a4 --- /dev/null +++ b/native/src/overlay.rs @@ -0,0 +1,33 @@ +use crate::{layout, Clipboard, Event, Hasher, Layout, Point}; + +pub trait Overlay<Message, Renderer> +where + Renderer: crate::Renderer, +{ + fn layout( + &self, + renderer: &Renderer, + limits: &layout::Limits, + ) -> layout::Node; + + fn draw( + &self, + renderer: &mut Renderer, + defaults: &Renderer::Defaults, + layout: Layout<'_>, + cursor_position: Point, + ) -> Renderer::Output; + + fn hash_layout(&self, state: &mut Hasher); + + fn on_event( + &mut self, + _event: Event, + _layout: Layout<'_>, + _cursor_position: Point, + _messages: &mut Vec<Message>, + _renderer: &Renderer, + _clipboard: Option<&dyn Clipboard>, + ) { + } +} diff --git a/native/src/widget.rs b/native/src/widget.rs index 4453145b..dd1a97d2 100644 --- a/native/src/widget.rs +++ b/native/src/widget.rs @@ -67,7 +67,7 @@ pub use text::Text; #[doc(no_inline)] pub use text_input::TextInput; -use crate::{layout, Clipboard, Event, Hasher, Layout, Length, Point}; +use crate::{layout, Clipboard, Event, Hasher, Layout, Length, Overlay, Point}; /// A component that displays information and allows interaction. /// @@ -94,7 +94,7 @@ use crate::{layout, Clipboard, Event, Hasher, Layout, Length, Point}; /// [`geometry`]: https://github.com/hecrj/iced/tree/0.1/examples/geometry /// [`lyon`]: https://github.com/nical/lyon /// [`iced_wgpu`]: https://github.com/hecrj/iced/tree/0.1/wgpu -pub trait Widget<Message, Renderer> +pub trait Widget<'a, Message, Renderer> where Renderer: crate::Renderer, { @@ -175,4 +175,8 @@ where _clipboard: Option<&dyn Clipboard>, ) { } + + fn overlay(&mut self) -> Option<Box<dyn Overlay<Message, Renderer> + 'a>> { + None + } } diff --git a/native/src/widget/button.rs b/native/src/widget/button.rs index c932da2b..72db808b 100644 --- a/native/src/widget/button.rs +++ b/native/src/widget/button.rs @@ -139,7 +139,7 @@ impl State { } } -impl<'a, Message, Renderer> Widget<Message, Renderer> +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Button<'a, Message, Renderer> where Renderer: self::Renderer, diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs index 44962288..82fd6d1f 100644 --- a/native/src/widget/checkbox.rs +++ b/native/src/widget/checkbox.rs @@ -106,7 +106,7 @@ impl<Message, Renderer: self::Renderer + text::Renderer> } } -impl<Message, Renderer> Widget<Message, Renderer> +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Checkbox<Message, Renderer> where Renderer: self::Renderer + text::Renderer + row::Renderer, diff --git a/native/src/widget/column.rs b/native/src/widget/column.rs index 259a7e6e..6afc94d6 100644 --- a/native/src/widget/column.rs +++ b/native/src/widget/column.rs @@ -121,7 +121,7 @@ impl<'a, Message, Renderer> Column<'a, Message, Renderer> { } } -impl<'a, Message, Renderer> Widget<Message, Renderer> +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Column<'a, Message, Renderer> where Renderer: self::Renderer, diff --git a/native/src/widget/container.rs b/native/src/widget/container.rs index 2590fe3b..3ad12eeb 100644 --- a/native/src/widget/container.rs +++ b/native/src/widget/container.rs @@ -129,7 +129,7 @@ where } } -impl<'a, Message, Renderer> Widget<Message, Renderer> +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Container<'a, Message, Renderer> where Renderer: self::Renderer, diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs index 132f249d..b7c8f4ff 100644 --- a/native/src/widget/image.rs +++ b/native/src/widget/image.rs @@ -54,7 +54,7 @@ impl Image { } } -impl<Message, Renderer> Widget<Message, Renderer> for Image +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Image where Renderer: self::Renderer, { diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs index a8deef0b..faf8da4e 100644 --- a/native/src/widget/pane_grid.rs +++ b/native/src/widget/pane_grid.rs @@ -387,7 +387,7 @@ pub struct KeyPressEvent { pub modifiers: keyboard::ModifiersState, } -impl<'a, Message, Renderer> Widget<Message, Renderer> +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for PaneGrid<'a, Message, Renderer> where Renderer: self::Renderer, diff --git a/native/src/widget/progress_bar.rs b/native/src/widget/progress_bar.rs index 5ab76d47..93d86371 100644 --- a/native/src/widget/progress_bar.rs +++ b/native/src/widget/progress_bar.rs @@ -70,7 +70,8 @@ impl<Renderer: self::Renderer> ProgressBar<Renderer> { } } -impl<Message, Renderer> Widget<Message, Renderer> for ProgressBar<Renderer> +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> + for ProgressBar<Renderer> where Renderer: self::Renderer, { diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs index 5b8d00e9..0d88c740 100644 --- a/native/src/widget/radio.rs +++ b/native/src/widget/radio.rs @@ -121,7 +121,8 @@ impl<Message, Renderer: self::Renderer + text::Renderer> } } -impl<Message, Renderer> Widget<Message, Renderer> for Radio<Message, Renderer> +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> + for Radio<Message, Renderer> where Renderer: self::Renderer + text::Renderer + row::Renderer, Message: Clone, diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs index 31f7472f..1ebbac6b 100644 --- a/native/src/widget/row.rs +++ b/native/src/widget/row.rs @@ -122,7 +122,7 @@ impl<'a, Message, Renderer> Row<'a, Message, Renderer> { } } -impl<'a, Message, Renderer> Widget<Message, Renderer> +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Row<'a, Message, Renderer> where Renderer: self::Renderer, diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs index 3c8e5e5b..d7ad98e6 100644 --- a/native/src/widget/scrollable.rs +++ b/native/src/widget/scrollable.rs @@ -110,7 +110,7 @@ impl<'a, Message, Renderer: self::Renderer> Scrollable<'a, Message, Renderer> { } } -impl<'a, Message, Renderer> Widget<Message, Renderer> +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Scrollable<'a, Message, Renderer> where Renderer: self::Renderer + column::Renderer, diff --git a/native/src/widget/slider.rs b/native/src/widget/slider.rs index 70f2b6ac..e0193342 100644 --- a/native/src/widget/slider.rs +++ b/native/src/widget/slider.rs @@ -154,7 +154,7 @@ impl State { } } -impl<'a, T, Message, Renderer> Widget<Message, Renderer> +impl<'a, T, Message, Renderer> Widget<'a, Message, Renderer> for Slider<'a, T, Message, Renderer> where T: Copy + Into<f64> + num_traits::FromPrimitive, diff --git a/native/src/widget/space.rs b/native/src/widget/space.rs index e56a8fe1..8ada40ed 100644 --- a/native/src/widget/space.rs +++ b/native/src/widget/space.rs @@ -43,7 +43,7 @@ impl Space { } } -impl<'a, Message, Renderer> Widget<Message, Renderer> for Space +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Space where Renderer: self::Renderer, { diff --git a/native/src/widget/svg.rs b/native/src/widget/svg.rs index 114d5e41..3e45aaf6 100644 --- a/native/src/widget/svg.rs +++ b/native/src/widget/svg.rs @@ -60,7 +60,7 @@ impl Svg { } } -impl<Message, Renderer> Widget<Message, Renderer> for Svg +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Svg where Renderer: self::Renderer, { diff --git a/native/src/widget/text.rs b/native/src/widget/text.rs index 48a69e34..7f75eb9c 100644 --- a/native/src/widget/text.rs +++ b/native/src/widget/text.rs @@ -112,7 +112,7 @@ impl<Renderer: self::Renderer> Text<Renderer> { } } -impl<Message, Renderer> Widget<Message, Renderer> for Text<Renderer> +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Text<Renderer> where Renderer: self::Renderer, { diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index 3f415101..63be6019 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -165,7 +165,7 @@ impl<'a, Message, Renderer: self::Renderer> TextInput<'a, Message, Renderer> { } } -impl<'a, Message, Renderer> Widget<Message, Renderer> +impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for TextInput<'a, Message, Renderer> where Renderer: self::Renderer, |