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,6 +1,7 @@
use crate::{quad, Primitive, Quad, Transformation};
use iced_native::{
renderer::Debugger, Background, Color, Layout, Point, Widget,
renderer::Debugger, renderer::Windowed, Background, Color, Layout,
MouseCursor, Point, Widget,
};
use raw_window_handle::HasRawWindowHandle;
@ -41,7 +42,7 @@ pub struct Target {
}
impl Renderer {
pub fn new<W: HasRawWindowHandle>(window: &W) -> Self {
fn new<W: HasRawWindowHandle>(window: &W) -> Self {
let adapter = Adapter::request(&RequestAdapterOptions {
power_preference: PowerPreference::LowPower,
backends: BackendBit::all(),
@ -79,7 +80,7 @@ impl Renderer {
}
}
pub fn target(&self, width: u16, height: u16) -> Target {
fn target(&self, width: u16, height: u16) -> Target {
Target {
width,
height,
@ -97,7 +98,11 @@ impl Renderer {
}
}
pub fn draw(&mut self, target: &mut Target, primitive: &Primitive) {
fn draw(
&mut self,
target: &mut Target,
primitive: &Primitive,
) -> MouseCursor {
log::debug!("Drawing");
let frame = target.swap_chain.get_next_texture();
@ -146,8 +151,9 @@ impl Renderer {
.expect("Draw text");
self.queue.submit(&[encoder.finish()]);
}
MouseCursor::OutOfBounds
}
fn draw_primitive(&mut self, primitive: &Primitive) {
match primitive {
Primitive::None => {}
@ -240,6 +246,26 @@ impl iced_native::Renderer for Renderer {
type Primitive = Primitive;
}
impl Windowed for Renderer {
type Target = Target;
fn new<W: HasRawWindowHandle>(window: &W) -> Self {
Self::new(window)
}
fn target(&self, width: u16, height: u16) -> Target {
self.target(width, height)
}
fn draw(
&mut self,
target: &mut Target,
primitive: &Primitive,
) -> MouseCursor {
self.draw(target, primitive)
}
}
impl Debugger for Renderer {
fn explain<Message>(
&mut self,