summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-10-23 02:33:07 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-10-23 02:33:07 +0200
commitc7ef9d0da705d8f27011fe41d2103c73aae42d2d (patch)
treebbd2baf6ac62426d278c8babef18e1cce49b3872
parent871eb414303804233ed50d43bb9b98a7037cbd4c (diff)
downloadiced-c7ef9d0da705d8f27011fe41d2103c73aae42d2d.tar.gz
iced-c7ef9d0da705d8f27011fe41d2103c73aae42d2d.tar.bz2
iced-c7ef9d0da705d8f27011fe41d2103c73aae42d2d.zip
Connect `iced_web` with `iced` properly
-rw-r--r--src/lib.rs36
-rw-r--r--src/web.rs1
-rw-r--r--src/winit.rs11
-rw-r--r--web/Cargo.toml3
-rw-r--r--web/src/lib.rs13
5 files changed, 42 insertions, 22 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 46574285..1bcdada2 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,13 +1,8 @@
-pub use iced_wgpu::{Primitive, Renderer};
-pub use iced_winit::{
- button, slider, text, winit, Align, Background, Checkbox, Color, Image,
- Justify, Length, Radio, Slider, Text,
-};
+#[cfg_attr(target_arch = "wasm32", path = "web.rs")]
+#[cfg_attr(not(target_arch = "wasm32"), path = "winit.rs")]
+mod platform;
-pub type Element<'a, Message> = iced_winit::Element<'a, Message, Renderer>;
-pub type Row<'a, Message> = iced_winit::Row<'a, Message, Renderer>;
-pub type Column<'a, Message> = iced_winit::Column<'a, Message, Renderer>;
-pub type Button<'a, Message> = iced_winit::Button<'a, Message, Renderer>;
+pub use platform::*;
pub trait Application {
type Message;
@@ -20,12 +15,17 @@ pub trait Application {
where
Self: 'static + Sized,
{
- iced_winit::Application::run(Instance(self))
+ #[cfg(not(target_arch = "wasm32"))]
+ iced_winit::Application::run(Instance(self));
+
+ #[cfg(target_arch = "wasm32")]
+ iced_web::Application::run(Instance(self));
}
}
struct Instance<A: Application>(A);
+#[cfg(not(target_arch = "wasm32"))]
impl<A> iced_winit::Application for Instance<A>
where
A: Application,
@@ -41,3 +41,19 @@ where
self.0.view()
}
}
+
+#[cfg(target_arch = "wasm32")]
+impl<A> iced_web::Application for Instance<A>
+where
+ A: Application,
+{
+ type Message = A::Message;
+
+ fn update(&mut self, message: Self::Message) {
+ self.0.update(message);
+ }
+
+ fn view(&mut self) -> Element<Self::Message> {
+ self.0.view()
+ }
+}
diff --git a/src/web.rs b/src/web.rs
new file mode 100644
index 00000000..31f1a6fc
--- /dev/null
+++ b/src/web.rs
@@ -0,0 +1 @@
+pub use iced_web::*;
diff --git a/src/winit.rs b/src/winit.rs
new file mode 100644
index 00000000..64e301f4
--- /dev/null
+++ b/src/winit.rs
@@ -0,0 +1,11 @@
+pub use iced_wgpu::{Primitive, Renderer};
+
+pub use iced_winit::{
+ button, slider, text, winit, Align, Background, Checkbox, Color, Image,
+ Justify, Length, Radio, Slider, Text,
+};
+
+pub type Element<'a, Message> = iced_winit::Element<'a, Message, Renderer>;
+pub type Row<'a, Message> = iced_winit::Row<'a, Message, Renderer>;
+pub type Column<'a, Message> = iced_winit::Column<'a, Message, Renderer>;
+pub type Button<'a, Message> = iced_winit::Button<'a, Message, Renderer>;
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/lib.rs b/web/src/lib.rs
index 04848d07..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 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>;
@@ -48,10 +44,7 @@ impl<Message> Instance<Message> {
}
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);
}
}