diff options
Diffstat (limited to '')
| -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 | 
3 files changed, 57 insertions, 60 deletions
| 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, -    ); -} | 
