Move winit logic from iced to iced_winit

- Added new `renderer::Windowed` trait. This shoud allow users to easily
  try different renderers by simply changing one line.
- Renamed `UserInterface` traits to `Application`, as the `run` method
  takes total control of the current thread.
- Moved `MouseCursor` back to `iced_native`. The new
  `renderer::Windowed` trait returns one on `draw`.
- Split `iced_native` renderer in multiple modules, for consistency.
This commit is contained in:
Héctor Ramón Jiménez 2019-10-09 05:36:49 +02:00
parent 1a93f0ef4a
commit a92a0b73ed
13 changed files with 245 additions and 155 deletions

View file

@ -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)
})),

View file

@ -11,7 +11,7 @@ pub use element::Element;
pub use iced_core::{Align, Color, Justify, Length};
pub use widget::*;
pub trait UserInterface {
pub trait Application {
type Message;
fn update(
@ -25,23 +25,23 @@ 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)),
}
@ -55,7 +55,7 @@ impl<Message> Application<Message> {
}
}
impl<Message> dodrio::Render for Application<Message>
impl<Message> dodrio::Render for Instance<Message>
where
Message: 'static,
{