From e45497dfd6d401d8da74a8167b876a20690ddcac Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 10 Jan 2020 01:58:55 +0100 Subject: Move `Debugger` and `Windowed` to a better location We move `renderer::Debugger` to `layout::Debugger` and `renderer::Windowed` to `window::Renderer`. --- native/src/element.rs | 7 +++-- native/src/layout.rs | 2 ++ native/src/layout/debugger.rs | 26 ++++++++++++++++++ native/src/lib.rs | 4 +-- native/src/renderer.rs | 6 ----- native/src/renderer/debugger.rs | 26 ------------------ native/src/renderer/windowed.rs | 58 ----------------------------------------- native/src/window.rs | 2 ++ native/src/window/renderer.rs | 58 +++++++++++++++++++++++++++++++++++++++++ 9 files changed, 93 insertions(+), 96 deletions(-) create mode 100644 native/src/layout/debugger.rs delete mode 100644 native/src/renderer/debugger.rs delete mode 100644 native/src/renderer/windowed.rs create mode 100644 native/src/window/renderer.rs (limited to 'native') diff --git a/native/src/element.rs b/native/src/element.rs index 9b5adb9c..fab73f77 100644 --- a/native/src/element.rs +++ b/native/src/element.rs @@ -1,6 +1,5 @@ use crate::{ - layout, renderer, Clipboard, Color, Event, Hasher, Layout, Length, Point, - Widget, + layout, Clipboard, Color, Event, Hasher, Layout, Length, Point, Widget, }; /// A generic [`Widget`]. @@ -195,7 +194,7 @@ where ) -> Element<'a, Message, Renderer> where Message: 'static, - Renderer: 'a + renderer::Debugger, + Renderer: 'a + layout::Debugger, { Element { widget: Box::new(Explain::new(self, color.into())), @@ -348,7 +347,7 @@ where impl<'a, Message, Renderer> Widget for Explain<'a, Message, Renderer> where - Renderer: crate::Renderer + renderer::Debugger, + Renderer: crate::Renderer + layout::Debugger, { fn width(&self) -> Length { self.element.widget.width() diff --git a/native/src/layout.rs b/native/src/layout.rs index e945706b..4a3ab94a 100644 --- a/native/src/layout.rs +++ b/native/src/layout.rs @@ -1,9 +1,11 @@ //! Position your widgets properly. +mod debugger; mod limits; mod node; pub mod flex; +pub use debugger::Debugger; pub use limits::Limits; pub use node::Node; diff --git a/native/src/layout/debugger.rs b/native/src/layout/debugger.rs new file mode 100644 index 00000000..e4b21609 --- /dev/null +++ b/native/src/layout/debugger.rs @@ -0,0 +1,26 @@ +use crate::{Color, Layout, Point, Renderer, Widget}; + +/// A renderer able to graphically explain a [`Layout`]. +/// +/// [`Layout`]: struct.Layout.html +pub trait Debugger: Renderer { + /// Explains the [`Layout`] of an [`Element`] for debugging purposes. + /// + /// This will be called when [`Element::explain`] has been used. It should + /// _explain_ the given [`Layout`] graphically. + /// + /// A common approach consists in recursively rendering the bounds of the + /// [`Layout`] and its children. + /// + /// [`Layout`]: struct.Layout.html + /// [`Element`]: ../struct.Element.html + /// [`Element::explain`]: ../struct.Element.html#method.explain + fn explain( + &mut self, + defaults: &Self::Defaults, + widget: &dyn Widget, + layout: Layout<'_>, + cursor_position: Point, + color: Color, + ) -> Self::Output; +} diff --git a/native/src/lib.rs b/native/src/lib.rs index e65c6596..340b9ea7 100644 --- a/native/src/lib.rs +++ b/native/src/lib.rs @@ -14,7 +14,7 @@ //! - A [`Widget`] trait, which is used to implement new widgets: from layout //! requirements to event and drawing logic. //! - A bunch of `Renderer` traits, meant to keep the crate renderer-agnostic. -//! - A [`Windowed`] trait, leveraging [`raw-window-handle`], which can be +//! - A [`window::Renderer`] trait, leveraging [`raw-window-handle`], which can be //! implemented by graphical renderers that target _windows_. Window-based //! shells (like [`iced_winit`]) can use this trait to stay renderer-agnostic. //! @@ -31,7 +31,7 @@ //! [`druid`]: https://github.com/xi-editor/druid //! [`raw-window-handle`]: https://github.com/rust-windowing/raw-window-handle //! [`Widget`]: widget/trait.Widget.html -//! [`Windowed`]: renderer/trait.Windowed.html +//! [`window::Renderer`]: window/trait.Renderer.html //! [`UserInterface`]: struct.UserInterface.html //! [renderer]: renderer/index.html #![deny(missing_docs)] diff --git a/native/src/renderer.rs b/native/src/renderer.rs index 284c95f6..ff90fdd9 100644 --- a/native/src/renderer.rs +++ b/native/src/renderer.rs @@ -20,12 +20,6 @@ //! [`Checkbox`]: ../widget/checkbox/struct.Checkbox.html //! [`checkbox::Renderer`]: ../widget/checkbox/trait.Renderer.html -mod debugger; -mod windowed; - -pub use debugger::Debugger; -pub use windowed::{Target, Windowed}; - #[cfg(debug_assertions)] mod null; #[cfg(debug_assertions)] diff --git a/native/src/renderer/debugger.rs b/native/src/renderer/debugger.rs deleted file mode 100644 index 30f3d9a0..00000000 --- a/native/src/renderer/debugger.rs +++ /dev/null @@ -1,26 +0,0 @@ -use crate::{Color, Layout, Point, Widget}; - -/// A renderer able to graphically explain a [`Layout`]. -/// -/// [`Layout`]: ../struct.Layout.html -pub trait Debugger: super::Renderer { - /// Explains the [`Layout`] of an [`Element`] for debugging purposes. - /// - /// This will be called when [`Element::explain`] has been used. It should - /// _explain_ the given [`Layout`] graphically. - /// - /// A common approach consists in recursively rendering the bounds of the - /// [`Layout`] and its children. - /// - /// [`Layout`]: struct.Layout.html - /// [`Element`]: struct.Element.html - /// [`Element::explain`]: struct.Element.html#method.explain - fn explain( - &mut self, - defaults: &Self::Defaults, - widget: &dyn Widget, - layout: Layout<'_>, - cursor_position: Point, - color: Color, - ) -> Self::Output; -} diff --git a/native/src/renderer/windowed.rs b/native/src/renderer/windowed.rs deleted file mode 100644 index ee020ab1..00000000 --- a/native/src/renderer/windowed.rs +++ /dev/null @@ -1,58 +0,0 @@ -use crate::MouseCursor; - -use raw_window_handle::HasRawWindowHandle; - -/// A renderer that can target windows. -pub trait Windowed: super::Renderer + Sized { - /// The settings of the renderer. - type Settings: Default; - - /// The type of target. - type Target: Target; - - /// Creates a new [`Windowed`] renderer. - /// - /// [`Windowed`]: trait.Windowed.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>( - &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( - window: &W, - width: u16, - height: u16, - dpi: f32, - renderer: &Self::Renderer, - ) -> Self; - - /// Resizes the current [`Target`]. - /// - /// [`Target`]: trait.Target.html - fn resize( - &mut self, - width: u16, - height: u16, - dpi: f32, - renderer: &Self::Renderer, - ); -} diff --git a/native/src/window.rs b/native/src/window.rs index 220bb3be..db9226dc 100644 --- a/native/src/window.rs +++ b/native/src/window.rs @@ -1,4 +1,6 @@ //! Build window-based GUI applications. mod event; +mod renderer; pub use event::Event; +pub use renderer::{Renderer, Target}; diff --git a/native/src/window/renderer.rs b/native/src/window/renderer.rs new file mode 100644 index 00000000..be9765fa --- /dev/null +++ b/native/src/window/renderer.rs @@ -0,0 +1,58 @@ +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; + + /// 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>( + &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( + window: &W, + width: u16, + height: u16, + dpi: f32, + renderer: &Self::Renderer, + ) -> Self; + + /// Resizes the current [`Target`]. + /// + /// [`Target`]: trait.Target.html + fn resize( + &mut self, + width: u16, + height: u16, + dpi: f32, + renderer: &Self::Renderer, + ); +} -- cgit