diff options
Diffstat (limited to 'native/src/renderer.rs')
| -rw-r--r-- | native/src/renderer.rs | 56 | 
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, +        } +    }  }  | 
