diff options
Diffstat (limited to '')
| -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, | 
