summaryrefslogtreecommitdiffstats
path: root/src/interface.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-07-23 10:49:24 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-07-23 10:49:24 +0200
commite55ac637a9c4422b2fccfcc56c25449160e56e02 (patch)
treedabc064bf3668d3a3fb9f9e1e6ad30051ea2a522 /src/interface.rs
parenteb45c51a7b8b9a595e318048712362c8d65d77b3 (diff)
downloadiced-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.rs77
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))
- }
-}