diff options
author | 2019-11-23 20:23:38 +0100 | |
---|---|---|
committer | 2019-11-23 20:23:38 +0100 | |
commit | d0f79d2779d00752eef78cd98b6904cd888d59e3 (patch) | |
tree | 436e757d7b24ae9791dc554d341b38d6646285d3 /web/src/lib.rs | |
parent | 3a678561f2da92e089390ee79bd4f9efc2c1a8c7 (diff) | |
download | iced-d0f79d2779d00752eef78cd98b6904cd888d59e3.tar.gz iced-d0f79d2779d00752eef78cd98b6904cd888d59e3.tar.bz2 iced-d0f79d2779d00752eef78cd98b6904cd888d59e3.zip |
Make `tour` work with `iced_web` again :tada:
- Implements `TextInput`, `Scrollable`, and `Container`
- Adds basic style generation
Diffstat (limited to 'web/src/lib.rs')
-rw-r--r-- | web/src/lib.rs | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/web/src/lib.rs b/web/src/lib.rs index 77a963ba..ac7f570c 100644 --- a/web/src/lib.rs +++ b/web/src/lib.rs @@ -61,15 +61,18 @@ use std::cell::RefCell; mod bus; mod element; + +pub mod style; pub mod widget; pub use bus::Bus; pub use dodrio; pub use element::Element; pub use iced_core::{ - Align, Background, Color, Font, HorizontalAlignment, Length, + Align, Background, Color, Command, Font, HorizontalAlignment, Length, VerticalAlignment, }; +pub use style::Style; pub use widget::*; /// An interactive web application. @@ -86,6 +89,28 @@ pub trait Application { /// [`Application`]: trait.Application.html type Message; + /// Initializes the [`Application`]. + /// + /// Here is where you should return the initial state of your app. + /// + /// Additionally, you can return a [`Command`](struct.Command.html) if you + /// need to perform some async action in the background on startup. This is + /// useful if you want to load state from a file, perform an initial HTTP + /// request, etc. + /// + /// [`Application`]: trait.Application.html + fn new() -> (Self, Command<Self::Message>) + where + Self: Sized; + + /// Returns the current title of the [`Application`]. + /// + /// This title can be dynamic! The runtime will automatically update the + /// title of your application when necessary. + /// + /// [`Application`]: trait.Application.html + fn title(&self) -> String; + /// Handles a __message__ and updates the state of the [`Application`]. /// /// This is where you define your __update logic__. All the __messages__, @@ -96,7 +121,7 @@ pub trait Application { /// /// [`Application`]: trait.Application.html /// [`Command`]: struct.Command.html - fn update(&mut self, message: Self::Message); + fn update(&mut self, message: Self::Message) -> Command<Self::Message>; /// Returns the widgets to display in the [`Application`]. /// @@ -108,16 +133,19 @@ pub trait Application { /// Runs the [`Application`]. /// /// [`Application`]: trait.Application.html - fn run(self) + fn run() where Self: 'static + Sized, { - let app = Instance::new(self); + // TODO: Spawn command + let (app, _command) = Self::new(); + + let instance = Instance::new(app); let window = web_sys::window().unwrap(); let document = window.document().unwrap(); let body = document.body().unwrap(); - let vdom = dodrio::Vdom::new(&body, app); + let vdom = dodrio::Vdom::new(&body, instance); vdom.forget(); } @@ -135,7 +163,8 @@ impl<Message> Instance<Message> { } fn update(&mut self, message: Message) { - self.ui.borrow_mut().update(message); + // TODO: Spawn command + let _command = self.ui.borrow_mut().update(message); } } @@ -150,9 +179,17 @@ where where 'a: 'bump, { + use dodrio::builder::*; + let mut ui = self.ui.borrow_mut(); let element = ui.view(); + let mut style_sheet = style::Sheet::new(); + + let node = element.widget.node(bump, &Bus::new(), &mut style_sheet); - element.widget.node(bump, &Bus::new()) + div(bump) + .attr("style", "width: 100%; height: 100%") + .children(vec![style_sheet.node(bump), node]) + .finish() } } |