diff options
author | 2020-07-10 01:31:56 +0200 | |
---|---|---|
committer | 2020-07-10 01:35:46 +0200 | |
commit | 1070b61f3408539f6c9cb9d265f3295e6d055db7 (patch) | |
tree | a4cb2a93b1f008ca251e2742e812b2bd8b1e41f6 /native/src/overlay.rs | |
parent | ce8cb228ef608b247c8a84f9d3a4a7faff68b355 (diff) | |
download | iced-1070b61f3408539f6c9cb9d265f3295e6d055db7.tar.gz iced-1070b61f3408539f6c9cb9d265f3295e6d055db7.tar.bz2 iced-1070b61f3408539f6c9cb9d265f3295e6d055db7.zip |
Rename `overlay::Content` trait to `Overlay`
The `Overlay` struct is now `overlay::Element`.
Diffstat (limited to 'native/src/overlay.rs')
-rw-r--r-- | native/src/overlay.rs | 143 |
1 files changed, 17 insertions, 126 deletions
diff --git a/native/src/overlay.rs b/native/src/overlay.rs index b8c8bb48..b6cbbec3 100644 --- a/native/src/overlay.rs +++ b/native/src/overlay.rs @@ -1,101 +1,13 @@ -mod content; +mod element; pub mod menu; -pub use content::Content; +pub use element::Element; pub use menu::Menu; -use crate::{layout, Clipboard, Event, Hasher, Layout, Point, Size, Vector}; -use std::rc::Rc; +use crate::{layout, Clipboard, Event, Hasher, Layout, Point, Size}; -#[allow(missing_debug_implementations)] -pub struct Overlay<'a, Message, Renderer> { - position: Point, - content: Box<dyn Content<Message, Renderer> + 'a>, -} - -impl<'a, Message, Renderer> Overlay<'a, Message, Renderer> -where - Renderer: crate::Renderer, -{ - pub fn new( - position: Point, - content: Box<dyn Content<Message, Renderer> + 'a>, - ) -> Self { - Self { position, content } - } - - pub fn translate(mut self, translation: Vector) -> Self { - self.position = self.position + translation; - self - } - - pub fn map<B>(self, f: Rc<dyn Fn(Message) -> B>) -> Overlay<'a, B, Renderer> - where - Message: 'a, - Renderer: 'a, - B: 'static, - { - Overlay { - position: self.position, - content: Box::new(Map::new(self.content, f)), - } - } - - pub fn layout(&self, renderer: &Renderer, bounds: Size) -> layout::Node { - self.content.layout(renderer, bounds, self.position) - } - - pub fn draw( - &self, - renderer: &mut Renderer, - defaults: &Renderer::Defaults, - layout: Layout<'_>, - cursor_position: Point, - ) -> Renderer::Output { - self.content - .draw(renderer, defaults, layout, cursor_position) - } - - pub fn hash_layout(&self, state: &mut Hasher) { - self.content.hash_layout(state, self.position); - } - - pub fn on_event( - &mut self, - event: Event, - layout: Layout<'_>, - cursor_position: Point, - messages: &mut Vec<Message>, - renderer: &Renderer, - clipboard: Option<&dyn Clipboard>, - ) { - self.content.on_event( - event, - layout, - cursor_position, - messages, - renderer, - clipboard, - ) - } -} - -struct Map<'a, A, B, Renderer> { - content: Box<dyn Content<A, Renderer> + 'a>, - mapper: Rc<dyn Fn(A) -> B>, -} - -impl<'a, A, B, Renderer> Map<'a, A, B, Renderer> { - pub fn new( - content: Box<dyn Content<A, Renderer> + 'a>, - mapper: Rc<dyn Fn(A) -> B + 'static>, - ) -> Map<'a, A, B, Renderer> { - Map { content, mapper } - } -} - -impl<'a, A, B, Renderer> Content<B, Renderer> for Map<'a, A, B, Renderer> +pub trait Overlay<Message, Renderer> where Renderer: crate::Renderer, { @@ -104,34 +16,7 @@ where renderer: &Renderer, bounds: Size, position: Point, - ) -> layout::Node { - self.content.layout(renderer, bounds, position) - } - - fn on_event( - &mut self, - event: Event, - layout: Layout<'_>, - cursor_position: Point, - messages: &mut Vec<B>, - renderer: &Renderer, - clipboard: Option<&dyn Clipboard>, - ) { - let mut original_messages = Vec::new(); - - self.content.on_event( - event, - layout, - cursor_position, - &mut original_messages, - renderer, - clipboard, - ); - - original_messages - .drain(..) - .for_each(|message| messages.push((self.mapper)(message))); - } + ) -> layout::Node; fn draw( &self, @@ -139,12 +24,18 @@ where defaults: &Renderer::Defaults, layout: Layout<'_>, cursor_position: Point, - ) -> Renderer::Output { - self.content - .draw(renderer, defaults, layout, cursor_position) - } + ) -> Renderer::Output; + + fn hash_layout(&self, state: &mut Hasher, position: Point); - fn hash_layout(&self, state: &mut Hasher, position: Point) { - self.content.hash_layout(state, position); + fn on_event( + &mut self, + _event: Event, + _layout: Layout<'_>, + _cursor_position: Point, + _messages: &mut Vec<Message>, + _renderer: &Renderer, + _clipboard: Option<&dyn Clipboard>, + ) { } } |