diff options
Diffstat (limited to 'renderer')
-rw-r--r-- | renderer/Cargo.toml | 1 | ||||
-rw-r--r-- | renderer/src/fallback.rs | 43 |
2 files changed, 29 insertions, 15 deletions
diff --git a/renderer/Cargo.toml b/renderer/Cargo.toml index 6fdb4228..458681dd 100644 --- a/renderer/Cargo.toml +++ b/renderer/Cargo.toml @@ -19,7 +19,6 @@ tiny-skia = ["iced_tiny_skia"] image = ["iced_tiny_skia?/image", "iced_wgpu?/image"] svg = ["iced_tiny_skia?/svg", "iced_wgpu?/svg"] geometry = ["iced_graphics/geometry", "iced_tiny_skia?/geometry", "iced_wgpu?/geometry"] -tracing = ["iced_wgpu?/tracing"] web-colors = ["iced_wgpu?/web-colors"] webgl = ["iced_wgpu?/webgl"] fira-sans = ["iced_graphics/fira-sans"] diff --git a/renderer/src/fallback.rs b/renderer/src/fallback.rs index 85ac3d93..2676ba87 100644 --- a/renderer/src/fallback.rs +++ b/renderer/src/fallback.rs @@ -47,16 +47,20 @@ where delegate!(self, renderer, renderer.clear()); } - fn start_layer(&mut self) { - delegate!(self, renderer, renderer.start_layer()); + fn start_layer(&mut self, bounds: Rectangle) { + delegate!(self, renderer, renderer.start_layer(bounds)); } fn end_layer(&mut self, bounds: Rectangle) { delegate!(self, renderer, renderer.end_layer(bounds)); } - fn start_transformation(&mut self) { - delegate!(self, renderer, renderer.start_transformation()); + fn start_transformation(&mut self, transformation: Transformation) { + delegate!( + self, + renderer, + renderer.start_transformation(transformation) + ); } fn end_transformation(&mut self, transformation: Transformation) { @@ -421,7 +425,7 @@ where #[cfg(feature = "geometry")] mod geometry { use super::Renderer; - use crate::core::{Point, Radians, Size, Vector}; + use crate::core::{Point, Radians, Rectangle, Size, Vector}; use crate::graphics::geometry::{self, Fill, Path, Stroke, Text}; use crate::graphics::Cached; @@ -457,7 +461,7 @@ mod geometry { } } - #[derive(Debug)] + #[derive(Debug, Clone)] pub enum Geometry<A, B> { Primary(A), Secondary(B), @@ -477,12 +481,23 @@ mod geometry { } } - fn cache(self) -> Self::Cache { - match self { - Self::Primary(geometry) => Geometry::Primary(geometry.cache()), - Self::Secondary(geometry) => { - Geometry::Secondary(geometry.cache()) + fn cache(self, previous: Option<Self::Cache>) -> Self::Cache { + match (self, previous) { + ( + Self::Primary(geometry), + Some(Geometry::Primary(previous)), + ) => Geometry::Primary(geometry.cache(Some(previous))), + (Self::Primary(geometry), None) => { + Geometry::Primary(geometry.cache(None)) } + ( + Self::Secondary(geometry), + Some(Geometry::Secondary(previous)), + ) => Geometry::Secondary(geometry.cache(Some(previous))), + (Self::Secondary(geometry), None) => { + Geometry::Secondary(geometry.cache(None)) + } + _ => unreachable!(), } } } @@ -545,10 +560,10 @@ mod geometry { delegate!(self, frame, frame.pop_transform()); } - fn draft(&mut self, size: Size) -> Self { + fn draft(&mut self, bounds: Rectangle) -> Self { match self { - Self::Primary(frame) => Self::Primary(frame.draft(size)), - Self::Secondary(frame) => Self::Secondary(frame.draft(size)), + Self::Primary(frame) => Self::Primary(frame.draft(bounds)), + Self::Secondary(frame) => Self::Secondary(frame.draft(bounds)), } } |