diff options
author | 2020-04-16 13:22:00 +0200 | |
---|---|---|
committer | 2020-07-08 10:41:16 +0200 | |
commit | f064f0482b653a1fbee4afbddcecf91e3a399004 (patch) | |
tree | 2a468e4dc80be13cbf0ae7dd703607010e16697c /native/src/overlay.rs | |
parent | c901f40fd6c5aa39f4dc056b2b59bc7133b287e6 (diff) | |
download | iced-f064f0482b653a1fbee4afbddcecf91e3a399004.tar.gz iced-f064f0482b653a1fbee4afbddcecf91e3a399004.tar.bz2 iced-f064f0482b653a1fbee4afbddcecf91e3a399004.zip |
Introduce `Layer` trait
Diffstat (limited to '')
-rw-r--r-- | native/src/overlay.rs | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/native/src/overlay.rs b/native/src/overlay.rs index d34432a4..a4bd5ea3 100644 --- a/native/src/overlay.rs +++ b/native/src/overlay.rs @@ -1,26 +1,41 @@ -use crate::{layout, Clipboard, Event, Hasher, Layout, Point}; +use crate::{layout, Clipboard, Event, Hasher, Layer, Layout, Point, Size}; -pub trait Overlay<Message, Renderer> +#[allow(missing_debug_implementations)] +pub struct Overlay<'a, Message, Renderer> { + position: Point, + layer: Box<dyn Layer<Message, Renderer> + 'a>, +} + +impl<'a, Message, Renderer> Overlay<'a, Message, Renderer> where Renderer: crate::Renderer, { - fn layout( - &self, - renderer: &Renderer, - limits: &layout::Limits, - ) -> layout::Node; + pub fn new( + position: Point, + layer: Box<dyn Layer<Message, Renderer> + 'a>, + ) -> Self { + Self { position, layer } + } - fn draw( + pub fn layout(&self, renderer: &Renderer, bounds: Size) -> layout::Node { + self.layer.layout(renderer, bounds, self.position) + } + + pub fn draw( &self, renderer: &mut Renderer, defaults: &Renderer::Defaults, layout: Layout<'_>, cursor_position: Point, - ) -> Renderer::Output; + ) -> Renderer::Output { + self.layer.draw(renderer, defaults, layout, cursor_position) + } - fn hash_layout(&self, state: &mut Hasher); + pub fn hash_layout(&self, state: &mut Hasher) { + self.layer.hash_layout(state, self.position); + } - fn on_event( + pub fn on_event( &mut self, _event: Event, _layout: Layout<'_>, |