summaryrefslogtreecommitdiffstats
path: root/web/src/element.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-09-15 17:43:15 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-09-15 17:43:15 +0200
commit8834772fa70850559f7bd82cc8432394e3fd9db7 (patch)
tree84522dca905c8a3803dc728726975c7095c06557 /web/src/element.rs
parent27ac85a9d98474904c422a891e54888376dec00a (diff)
downloadiced-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.rs25
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()))
+ }
+}