diff options
author | 2019-09-15 17:43:15 +0200 | |
---|---|---|
committer | 2019-09-15 17:43:15 +0200 | |
commit | 8834772fa70850559f7bd82cc8432394e3fd9db7 (patch) | |
tree | 84522dca905c8a3803dc728726975c7095c06557 /web/src/element.rs | |
parent | 27ac85a9d98474904c422a891e54888376dec00a (diff) | |
download | iced-8834772fa70850559f7bd82cc8432394e3fd9db7.tar.gz iced-8834772fa70850559f7bd82cc8432394e3fd9db7.tar.bz2 iced-8834772fa70850559f7bd82cc8432394e3fd9db7.zip |
Draft widget nodes and wire interaction
Diffstat (limited to 'web/src/element.rs')
-rw-r--r-- | web/src/element.rs | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/web/src/element.rs b/web/src/element.rs index c0c9ce5d..8270d8db 100644 --- a/web/src/element.rs +++ b/web/src/element.rs @@ -1,4 +1,7 @@ -use crate::{Color, Widget}; +use crate::{Bus, Color, Widget}; + +use dodrio::bumpalo; +use std::rc::Rc; pub struct Element<'a, Message> { pub(crate) widget: Box<dyn Widget<Message> + 'a>, @@ -11,7 +14,7 @@ impl<'a, Message> Element<'a, Message> { } } - pub fn explain(self, color: Color) -> Element<'a, Message> { + pub fn explain(self, _color: Color) -> Element<'a, Message> { self } @@ -29,7 +32,7 @@ impl<'a, Message> Element<'a, Message> { struct Map<'a, A, B> { widget: Box<dyn Widget<A> + 'a>, - mapper: Box<dyn Fn(A) -> B>, + mapper: Rc<Box<dyn Fn(A) -> B>>, } impl<'a, A, B> Map<'a, A, B> { @@ -39,9 +42,21 @@ impl<'a, A, B> Map<'a, A, B> { { Map { widget, - mapper: Box::new(mapper), + mapper: Rc::new(Box::new(mapper)), } } } -impl<'a, A, B> Widget<B> for Map<'a, A, B> {} +impl<'a, A, B> Widget<B> for Map<'a, A, B> +where + A: 'static, + B: 'static, +{ + fn node<'b>( + &self, + bump: &'b bumpalo::Bump, + bus: &Bus<B>, + ) -> dodrio::Node<'b> { + self.widget.node(bump, &bus.map(self.mapper.clone())) + } +} |