summaryrefslogtreecommitdiffstats
path: root/native/src/window/renderer.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2020-01-10 19:10:57 +0100
committerLibravatar GitHub <noreply@github.com>2020-01-10 19:10:57 +0100
commit9b8f86f843819e1823633c5b7f4a9f020b462476 (patch)
treed63eb36d7d81aa9b403385fe1865633863832266 /native/src/window/renderer.rs
parent84f1a936db93c16255a07f079c47e351635586f4 (diff)
parente45497dfd6d401d8da74a8167b876a20690ddcac (diff)
downloadiced-9b8f86f843819e1823633c5b7f4a9f020b462476.tar.gz
iced-9b8f86f843819e1823633c5b7f4a9f020b462476.tar.bz2
iced-9b8f86f843819e1823633c5b7f4a9f020b462476.zip
Merge pull request #150 from hecrj/refactor/move-renderer-traits
Move `Debugger` and `Windowed` traits
Diffstat (limited to 'native/src/window/renderer.rs')
-rw-r--r--native/src/window/renderer.rs58
1 files changed, 58 insertions, 0 deletions
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<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: 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,
+ );
+}