diff options
author | 2019-07-23 10:49:24 +0200 | |
---|---|---|
committer | 2019-07-23 10:49:24 +0200 | |
commit | e55ac637a9c4422b2fccfcc56c25449160e56e02 (patch) | |
tree | dabc064bf3668d3a3fb9f9e1e6ad30051ea2a522 /src/interface.rs | |
parent | eb45c51a7b8b9a595e318048712362c8d65d77b3 (diff) | |
download | iced-e55ac637a9c4422b2fccfcc56c25449160e56e02.tar.gz iced-e55ac637a9c4422b2fccfcc56c25449160e56e02.tar.bz2 iced-e55ac637a9c4422b2fccfcc56c25449160e56e02.zip |
Add `Runtime` concept to abstract caching
Diffstat (limited to 'src/interface.rs')
-rw-r--r-- | src/interface.rs | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/src/interface.rs b/src/interface.rs deleted file mode 100644 index 6c4982e5..00000000 --- a/src/interface.rs +++ /dev/null @@ -1,77 +0,0 @@ -use std::hash::Hasher; -use stretch::result; - -use crate::{Element, Event, Layout, MouseCursor, Point}; - -pub struct Interface<'a, Message, Renderer> { - hash: u64, - root: Element<'a, Message, Renderer>, - layout: result::Layout, -} - -pub struct Cache { - hash: u64, - layout: result::Layout, -} - -impl<'a, Message, Renderer> Interface<'a, Message, Renderer> { - pub fn compute( - root: Element<'a, Message, Renderer>, - renderer: &Renderer, - ) -> Interface<'a, Message, Renderer> { - let hasher = &mut crate::Hasher::default(); - root.hash(hasher); - - let hash = hasher.finish(); - let layout = root.compute_layout(renderer); - - Interface { hash, root, layout } - } - - pub fn compute_with_cache( - root: Element<'a, Message, Renderer>, - renderer: &Renderer, - cache: Cache, - ) -> Interface<'a, Message, Renderer> { - let hasher = &mut crate::Hasher::default(); - root.hash(hasher); - - let hash = hasher.finish(); - - let layout = if hash == cache.hash { - cache.layout - } else { - root.compute_layout(renderer) - }; - - Interface { hash, root, layout } - } - - pub fn on_event(&mut self, event: Event, cursor_position: Point, messages: &mut Vec<Message>) { - let Interface { root, layout, .. } = self; - - root.widget - .on_event(event, Self::layout(layout), cursor_position, messages); - } - - pub fn draw(&self, renderer: &mut Renderer, cursor_position: Point) -> MouseCursor { - let Interface { root, layout, .. } = self; - - let cursor = root - .widget - .draw(renderer, Self::layout(layout), cursor_position); - - cursor - } - - pub fn cache(self) -> Cache { - Cache { - hash: self.hash, - layout: self.layout, - } - } - - fn layout(layout: &result::Layout) -> Layout<'_> { - Layout::new(layout, Point::new(0.0, 0.0)) - } -} |