summaryrefslogtreecommitdiffstats
path: root/web
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--web/Cargo.toml3
-rw-r--r--web/src/bus.rs4
-rw-r--r--web/src/element.rs8
-rw-r--r--web/src/lib.rs31
-rw-r--r--web/src/widget/button.rs10
-rw-r--r--web/src/widget/image.rs10
6 files changed, 34 insertions, 32 deletions
diff --git a/web/Cargo.toml b/web/Cargo.toml
index d5a987b0..473bde17 100644
--- a/web/Cargo.toml
+++ b/web/Cargo.toml
@@ -17,8 +17,7 @@ maintenance = { status = "actively-developed" }
[dependencies]
iced_core = { version = "0.1.0-alpha", path = "../core" }
dodrio = "0.1.0"
-futures-preview = "=0.3.0-alpha.18"
-wasm-bindgen = "0.2.50"
+wasm-bindgen = "0.2.51"
[dependencies.web-sys]
version = "0.3.27"
diff --git a/web/src/bus.rs b/web/src/bus.rs
index d76466f5..b4fd67c7 100644
--- a/web/src/bus.rs
+++ b/web/src/bus.rs
@@ -1,4 +1,4 @@
-use crate::Application;
+use crate::Instance;
use std::rc::Rc;
@@ -14,7 +14,7 @@ where
pub fn new() -> Self {
Self {
publish: Rc::new(Box::new(|message, root| {
- let app = root.unwrap_mut::<Application<Message>>();
+ let app = root.unwrap_mut::<Instance<Message>>();
app.update(message)
})),
diff --git a/web/src/element.rs b/web/src/element.rs
index 8270d8db..a2b78c69 100644
--- a/web/src/element.rs
+++ b/web/src/element.rs
@@ -14,6 +14,14 @@ impl<'a, Message> Element<'a, Message> {
}
}
+ pub fn node<'b>(
+ &self,
+ bump: &'b bumpalo::Bump,
+ bus: &Bus<Message>,
+ ) -> dodrio::Node<'b> {
+ self.widget.node(bump, bus)
+ }
+
pub fn explain(self, _color: Color) -> Element<'a, Message> {
self
}
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,
{
diff --git a/web/src/widget/button.rs b/web/src/widget/button.rs
index 23a4165a..257034a7 100644
--- a/web/src/widget/button.rs
+++ b/web/src/widget/button.rs
@@ -2,7 +2,10 @@ use crate::{Bus, Element, Widget};
use dodrio::bumpalo;
-pub use iced_core::button::*;
+pub use iced_core::button::State;
+
+pub type Button<'a, Message> =
+ iced_core::Button<'a, Message, Element<'a, Message>>;
impl<'a, Message> Widget<Message> for Button<'a, Message>
where
@@ -15,9 +18,8 @@ where
) -> dodrio::Node<'b> {
use dodrio::builder::*;
- let label = bumpalo::format!(in bump, "{}", self.label);
-
- let mut node = button(bump).children(vec![text(label.into_bump_str())]);
+ let mut node =
+ button(bump).children(vec![self.content.node(bump, bus)]);
if let Some(on_press) = self.on_press {
let event_bus = bus.clone();
diff --git a/web/src/widget/image.rs b/web/src/widget/image.rs
index fd4ff0df..bd3e5daf 100644
--- a/web/src/widget/image.rs
+++ b/web/src/widget/image.rs
@@ -2,9 +2,9 @@ use crate::{Bus, Element, Length, Widget};
use dodrio::bumpalo;
-pub type Image<'a> = iced_core::Image<&'a str>;
+pub use iced_core::Image;
-impl<'a, Message> Widget<Message> for Image<'a> {
+impl<Message> Widget<Message> for Image {
fn node<'b>(
&self,
bump: &'b bumpalo::Bump,
@@ -12,7 +12,7 @@ impl<'a, Message> Widget<Message> for Image<'a> {
) -> dodrio::Node<'b> {
use dodrio::builder::*;
- let src = bumpalo::format!(in bump, "{}", self.handle);
+ let src = bumpalo::format!(in bump, "{}", self.path);
let mut image = img(bump).attr("src", src.into_bump_str());
@@ -35,8 +35,8 @@ impl<'a, Message> Widget<Message> for Image<'a> {
}
}
-impl<'a, Message> From<Image<'a>> for Element<'a, Message> {
- fn from(image: Image<'a>) -> Element<'a, Message> {
+impl<'a, Message> From<Image> for Element<'a, Message> {
+ fn from(image: Image) -> Element<'a, Message> {
Element::new(image)
}
}