summaryrefslogtreecommitdiffstats
path: root/web/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'web/src/lib.rs')
-rw-r--r--web/src/lib.rs31
1 files changed, 12 insertions, 19 deletions
diff --git a/web/src/lib.rs b/web/src/lib.rs
index caf17df5..559a5af0 100644
--- a/web/src/lib.rs
+++ b/web/src/lib.rs
@@ -1,5 +1,4 @@
use dodrio::bumpalo;
-use futures::Future;
use std::cell::RefCell;
mod bus;
@@ -8,16 +7,13 @@ pub mod widget;
pub use bus::Bus;
pub use element::Element;
-pub use iced_core::{Align, Color, Justify, Length};
+pub use iced_core::{Align, Background, Color, Justify, Length};
pub use widget::*;
-pub trait UserInterface {
+pub trait Application {
type Message;
- fn update(
- &mut self,
- message: Self::Message,
- ) -> Option<Box<dyn Future<Output = Self::Message>>>;
+ fn update(&mut self, message: Self::Message);
fn view(&mut self) -> Element<Self::Message>;
@@ -25,37 +21,34 @@ pub trait UserInterface {
where
Self: 'static + Sized,
{
+ let app = Instance::new(self);
+
let window = web_sys::window().unwrap();
let document = window.document().unwrap();
let body = document.body().unwrap();
-
- let app = Application::new(self);
-
let vdom = dodrio::Vdom::new(&body, app);
+
vdom.forget();
}
}
-struct Application<Message> {
- ui: RefCell<Box<dyn UserInterface<Message = Message>>>,
+struct Instance<Message> {
+ ui: RefCell<Box<dyn Application<Message = Message>>>,
}
-impl<Message> Application<Message> {
- fn new(ui: impl UserInterface<Message = Message> + 'static) -> Self {
+impl<Message> Instance<Message> {
+ fn new(ui: impl Application<Message = Message> + 'static) -> Self {
Self {
ui: RefCell::new(Box::new(ui)),
}
}
fn update(&mut self, message: Message) {
- let mut ui = self.ui.borrow_mut();
-
- // TODO: Resolve futures and publish resulting messages
- let _ = ui.update(message);
+ self.ui.borrow_mut().update(message);
}
}
-impl<Message> dodrio::Render for Application<Message>
+impl<Message> dodrio::Render for Instance<Message>
where
Message: 'static,
{