summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib.rs59
-rw-r--r--src/web.rs1
-rw-r--r--src/winit.rs11
3 files changed, 71 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
index e69de29b..1bcdada2 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -0,0 +1,59 @@
+#[cfg_attr(target_arch = "wasm32", path = "web.rs")]
+#[cfg_attr(not(target_arch = "wasm32"), path = "winit.rs")]
+mod platform;
+
+pub use platform::*;
+
+pub trait Application {
+ type Message;
+
+ fn update(&mut self, message: Self::Message);
+
+ fn view(&mut self) -> Element<Self::Message>;
+
+ fn run(self)
+ where
+ Self: 'static + Sized,
+ {
+ #[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,
+{
+ type Renderer = Renderer;
+ 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()
+ }
+}
+
+#[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>;