diff options
| author | 2020-02-10 19:49:08 +0100 | |
|---|---|---|
| committer | 2020-02-10 19:49:08 +0100 | |
| commit | 5d16f431b3088189579cf096b3abf89578cc73f6 (patch) | |
| tree | c7efea00fabd87133a59760e902548d39822a844 /native/src | |
| 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 '')
| -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, -    ); -} | 
