diff options
author | 2020-02-10 19:49:08 +0100 | |
---|---|---|
committer | 2020-02-10 19:49:08 +0100 | |
commit | 5d16f431b3088189579cf096b3abf89578cc73f6 (patch) | |
tree | c7efea00fabd87133a59760e902548d39822a844 /native | |
parent | 95880ca74bddb6a23774621ef766b91956d40a61 (diff) | |
parent | 4337daddb2a02a2c60dfc5beb896e3059588312a (diff) | |
download | iced-5d16f431b3088189579cf096b3abf89578cc73f6.tar.gz iced-5d16f431b3088189579cf096b3abf89578cc73f6.tar.bz2 iced-5d16f431b3088189579cf096b3abf89578cc73f6.zip |
Merge pull request #183 from hecrj/feature/wgpu-integration
Integration with existing `wgpu` projects
Diffstat (limited to 'native')
-rw-r--r-- | native/src/user_interface.rs | 8 | ||||
-rw-r--r-- | native/src/window.rs | 4 | ||||
-rw-r--r-- | native/src/window/backend.rs | 55 | ||||
-rw-r--r-- | native/src/window/renderer.rs | 58 |
4 files changed, 61 insertions, 64 deletions
diff --git a/native/src/user_interface.rs b/native/src/user_interface.rs index 53b36240..08914bed 100644 --- a/native/src/user_interface.rs +++ b/native/src/user_interface.rs @@ -162,7 +162,7 @@ where /// ); /// /// // Update the user interface - /// let messages = user_interface.update(&renderer, None, events.drain(..)); + /// let messages = user_interface.update(events.drain(..), None, &renderer); /// /// cache = user_interface.into_cache(); /// @@ -174,9 +174,9 @@ where /// ``` pub fn update( &mut self, - renderer: &Renderer, - clipboard: Option<&dyn Clipboard>, events: impl IntoIterator<Item = Event>, + clipboard: Option<&dyn Clipboard>, + renderer: &Renderer, ) -> Vec<Message> { let mut messages = Vec::new(); @@ -246,7 +246,7 @@ where /// &mut renderer, /// ); /// - /// let messages = user_interface.update(&renderer, None, events.drain(..)); + /// let messages = user_interface.update(events.drain(..), None, &renderer); /// /// // Draw the user interface /// let mouse_cursor = user_interface.draw(&mut renderer); diff --git a/native/src/window.rs b/native/src/window.rs index db9226dc..4dcae62f 100644 --- a/native/src/window.rs +++ b/native/src/window.rs @@ -1,6 +1,6 @@ //! Build window-based GUI applications. +mod backend; mod event; -mod renderer; +pub use backend::Backend; pub use event::Event; -pub use renderer::{Renderer, Target}; diff --git a/native/src/window/backend.rs b/native/src/window/backend.rs new file mode 100644 index 00000000..3bc691cd --- /dev/null +++ b/native/src/window/backend.rs @@ -0,0 +1,55 @@ +use crate::MouseCursor; + +use raw_window_handle::HasRawWindowHandle; + +/// A graphics backend that can render to windows. +pub trait Backend: Sized { + /// The settings of the backend. + type Settings: Default; + + /// The iced renderer of the backend. + type Renderer: crate::Renderer; + + /// The surface of the backend. + type Surface; + + /// The swap chain of the backend. + type SwapChain; + + /// Creates a new [`Backend`] and an associated iced renderer. + /// + /// [`Backend`]: trait.Backend.html + fn new(settings: Self::Settings) -> (Self, Self::Renderer); + + /// Crates a new [`Surface`] for the given window. + /// + /// [`Surface`]: #associatedtype.Surface + fn create_surface<W: HasRawWindowHandle>( + &mut self, + window: &W, + ) -> Self::Surface; + + /// Crates a new [`SwapChain`] for the given [`Surface`]. + /// + /// [`SwapChain`]: #associatedtype.SwapChain + /// [`Surface`]: #associatedtype.Surface + fn create_swap_chain( + &mut self, + surface: &Self::Surface, + width: u32, + height: u32, + ) -> Self::SwapChain; + + /// Draws the output primitives to the next frame of the given [`SwapChain`]. + /// + /// [`SwapChain`]: #associatedtype.SwapChain + /// [`Surface`]: #associatedtype.Surface + fn draw<T: AsRef<str>>( + &mut self, + renderer: &mut Self::Renderer, + swap_chain: &mut Self::SwapChain, + output: &<Self::Renderer as crate::Renderer>::Output, + scale_factor: f64, + overlay: &[T], + ) -> MouseCursor; +} diff --git a/native/src/window/renderer.rs b/native/src/window/renderer.rs deleted file mode 100644 index a3cbb8ce..00000000 --- a/native/src/window/renderer.rs +++ /dev/null @@ -1,58 +0,0 @@ -use crate::MouseCursor; - -use raw_window_handle::HasRawWindowHandle; - -/// A renderer that can target windows. -pub trait Renderer: crate::Renderer + Sized { - /// The settings of the renderer. - type Settings: Default; - - /// The type of target. - type Target: Target<Renderer = Self>; - - /// Creates a new window [`Renderer`]. - /// - /// [`Renderer`]: trait.Renderer.html - fn new(settings: Self::Settings) -> Self; - - /// Performs the drawing operations described in the output on the given - /// target. - /// - /// The overlay can be a bunch of debug text logs. It should be rendered on - /// top of the GUI on most scenarios. - fn draw<T: AsRef<str>>( - &mut self, - output: &Self::Output, - overlay: &[T], - target: &mut Self::Target, - ) -> MouseCursor; -} - -/// A rendering target. -pub trait Target { - /// The renderer of this target. - type Renderer; - - /// Creates a new rendering [`Target`] from the given window handle, width, - /// height and dpi factor. - /// - /// [`Target`]: trait.Target.html - fn new<W: HasRawWindowHandle>( - window: &W, - width: u32, - height: u32, - scale_factor: f64, - renderer: &Self::Renderer, - ) -> Self; - - /// Resizes the current [`Target`]. - /// - /// [`Target`]: trait.Target.html - fn resize( - &mut self, - width: u32, - height: u32, - scale_factor: f64, - renderer: &Self::Renderer, - ); -} |