summaryrefslogtreecommitdiffstats
path: root/native/src/renderer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'native/src/renderer.rs')
-rw-r--r--native/src/renderer.rs56
1 files changed, 36 insertions, 20 deletions
diff --git a/native/src/renderer.rs b/native/src/renderer.rs
index 39a6cff1..1e518936 100644
--- a/native/src/renderer.rs
+++ b/native/src/renderer.rs
@@ -19,28 +19,17 @@
//! [`text::Renderer`]: crate::widget::text::Renderer
//! [`Checkbox`]: crate::widget::Checkbox
//! [`checkbox::Renderer`]: crate::widget::checkbox::Renderer
-
#[cfg(debug_assertions)]
mod null;
#[cfg(debug_assertions)]
pub use null::Null;
-use crate::{layout, Element, Rectangle};
+use crate::layout;
+use crate::{Background, Color, Element, Rectangle, Vector};
/// A component that can take the state of a user interface and produce an
/// output for its users.
pub trait Renderer: Sized {
- /// The type of output of the [`Renderer`].
- ///
- /// If you are implementing a graphical renderer, your output will most
- /// likely be a tree of visual primitives.
- type Output;
-
- /// The default styling attributes of the [`Renderer`].
- ///
- /// This type can be leveraged to implement style inheritance.
- type Defaults: Default;
-
/// Lays out the elements of a user interface.
///
/// You should override this if you need to perform any operations before or
@@ -53,12 +42,39 @@ pub trait Renderer: Sized {
element.layout(self, limits)
}
- /// Overlays the `overlay` output with the given bounds on top of the `base`
- /// output.
- fn overlay(
+ fn with_layer(&mut self, bounds: Rectangle, f: impl FnOnce(&mut Self));
+
+ fn with_translation(
&mut self,
- base: Self::Output,
- overlay: Self::Output,
- overlay_bounds: Rectangle,
- ) -> Self::Output;
+ translation: Vector,
+ f: impl FnOnce(&mut Self),
+ );
+
+ fn clear(&mut self);
+
+ fn fill_rectangle(&mut self, quad: Quad);
+}
+
+#[derive(Debug, Clone, Copy, PartialEq)]
+pub struct Quad {
+ pub bounds: Rectangle,
+ pub background: Background,
+ pub border_radius: f32,
+ pub border_width: f32,
+ pub border_color: Color,
+}
+
+/// The styling attributes of a [`Renderer`].
+#[derive(Debug, Clone, Copy, PartialEq)]
+pub struct Style {
+ /// The text color
+ pub text_color: Color,
+}
+
+impl Default for Style {
+ fn default() -> Self {
+ Style {
+ text_color: Color::BLACK,
+ }
+ }
}