Implement composable, type-safe renderer fallback
This commit is contained in:
parent
7e4ae8450e
commit
3645d34d6a
35 changed files with 1474 additions and 1210 deletions
|
|
@ -11,17 +11,41 @@ use crate::{
|
|||
|
||||
/// A component that can be used by widgets to draw themselves on a screen.
|
||||
pub trait Renderer {
|
||||
/// Starts recording a new layer.
|
||||
fn start_layer(&mut self);
|
||||
|
||||
/// Ends recording a new layer.
|
||||
///
|
||||
/// The new layer will clip its contents to the provided `bounds`.
|
||||
fn end_layer(&mut self, bounds: Rectangle);
|
||||
|
||||
/// Draws the primitives recorded in the given closure in a new layer.
|
||||
///
|
||||
/// The layer will clip its contents to the provided `bounds`.
|
||||
fn with_layer(&mut self, bounds: Rectangle, f: impl FnOnce(&mut Self));
|
||||
fn with_layer(&mut self, bounds: Rectangle, f: impl FnOnce(&mut Self)) {
|
||||
self.start_layer();
|
||||
f(self);
|
||||
self.end_layer(bounds);
|
||||
}
|
||||
|
||||
/// Starts recording with a new [`Transformation`].
|
||||
fn start_transformation(&mut self);
|
||||
|
||||
/// Ends recording a new layer.
|
||||
///
|
||||
/// The new layer will clip its contents to the provided `bounds`.
|
||||
fn end_transformation(&mut self, transformation: Transformation);
|
||||
|
||||
/// Applies a [`Transformation`] to the primitives recorded in the given closure.
|
||||
fn with_transformation(
|
||||
&mut self,
|
||||
transformation: Transformation,
|
||||
f: impl FnOnce(&mut Self),
|
||||
);
|
||||
) {
|
||||
self.start_transformation();
|
||||
f(self);
|
||||
self.end_transformation(transformation);
|
||||
}
|
||||
|
||||
/// Applies a translation to the primitives recorded in the given closure.
|
||||
fn with_translation(
|
||||
|
|
|
|||
|
|
@ -21,14 +21,13 @@ impl Null {
|
|||
}
|
||||
|
||||
impl Renderer for Null {
|
||||
fn with_layer(&mut self, _bounds: Rectangle, _f: impl FnOnce(&mut Self)) {}
|
||||
fn start_layer(&mut self) {}
|
||||
|
||||
fn with_transformation(
|
||||
&mut self,
|
||||
_transformation: Transformation,
|
||||
_f: impl FnOnce(&mut Self),
|
||||
) {
|
||||
}
|
||||
fn end_layer(&mut self, _bounds: Rectangle) {}
|
||||
|
||||
fn start_transformation(&mut self) {}
|
||||
|
||||
fn end_transformation(&mut self, _transformation: Transformation) {}
|
||||
|
||||
fn clear(&mut self) {}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue