diff options
author | 2024-02-02 14:54:56 +0100 | |
---|---|---|
committer | 2024-02-02 14:54:56 +0100 | |
commit | aea172543cb49f1f1e3625f60b49336f59e26c00 (patch) | |
tree | e99e7a55873678ac37fd695a0f46c1350b30dd2f /renderer | |
parent | 759f0e922598504705b543185bc7140a652b726a (diff) | |
parent | b3adf3184594c9bf60e0548a0362d30c512f3966 (diff) | |
download | iced-aea172543cb49f1f1e3625f60b49336f59e26c00.tar.gz iced-aea172543cb49f1f1e3625f60b49336f59e26c00.tar.bz2 iced-aea172543cb49f1f1e3625f60b49336f59e26c00.zip |
Merge pull request #2120 from iced-rs/transform-primitive
`Transform` primitive
Diffstat (limited to 'renderer')
-rw-r--r-- | renderer/src/geometry.rs | 36 | ||||
-rw-r--r-- | renderer/src/lib.rs | 16 |
2 files changed, 34 insertions, 18 deletions
diff --git a/renderer/src/geometry.rs b/renderer/src/geometry.rs index cd2140dc..f09ccfbf 100644 --- a/renderer/src/geometry.rs +++ b/renderer/src/geometry.rs @@ -2,14 +2,18 @@ mod cache; pub use cache::Cache; -use crate::core::{Point, Rectangle, Size, Vector}; +use crate::core::{Point, Rectangle, Size, Transformation, Vector}; use crate::graphics::geometry::{Fill, Path, Stroke, Text}; use crate::Renderer; -pub enum Frame { - TinySkia(iced_tiny_skia::geometry::Frame), - #[cfg(feature = "wgpu")] - Wgpu(iced_wgpu::geometry::Frame), +macro_rules! delegate { + ($frame:expr, $name:ident, $body:expr) => { + match $frame { + Self::TinySkia($name) => $body, + #[cfg(feature = "wgpu")] + Self::Wgpu($name) => $body, + } + }; } pub enum Geometry { @@ -18,14 +22,24 @@ pub enum Geometry { Wgpu(iced_wgpu::Primitive), } -macro_rules! delegate { - ($frame:expr, $name:ident, $body:expr) => { - match $frame { - Self::TinySkia($name) => $body, +impl Geometry { + pub fn transform(self, transformation: Transformation) -> Self { + match self { + Self::TinySkia(primitive) => { + Self::TinySkia(primitive.transform(transformation)) + } #[cfg(feature = "wgpu")] - Self::Wgpu($name) => $body, + Self::Wgpu(primitive) => { + Self::Wgpu(primitive.transform(transformation)) + } } - }; + } +} + +pub enum Frame { + TinySkia(iced_tiny_skia::geometry::Frame), + #[cfg(feature = "wgpu")] + Wgpu(iced_wgpu::geometry::Frame), } impl Frame { diff --git a/renderer/src/lib.rs b/renderer/src/lib.rs index a7df414b..757c264d 100644 --- a/renderer/src/lib.rs +++ b/renderer/src/lib.rs @@ -22,7 +22,9 @@ pub use geometry::Geometry; use crate::core::renderer; use crate::core::text::{self, Text}; -use crate::core::{Background, Color, Font, Pixels, Point, Rectangle, Vector}; +use crate::core::{ + Background, Color, Font, Pixels, Point, Rectangle, Transformation, +}; use crate::graphics::text::Editor; use crate::graphics::text::Paragraph; use crate::graphics::Mesh; @@ -97,20 +99,20 @@ impl core::Renderer for Renderer { } } - fn with_translation( + fn with_transformation( &mut self, - translation: Vector, + transformation: Transformation, f: impl FnOnce(&mut Self), ) { match self { Self::TinySkia(renderer) => { - let primitives = renderer.start_translation(); + let primitives = renderer.start_transformation(); f(self); match self { Self::TinySkia(renderer) => { - renderer.end_translation(primitives, translation); + renderer.end_transformation(primitives, transformation); } #[cfg(feature = "wgpu")] _ => unreachable!(), @@ -118,14 +120,14 @@ impl core::Renderer for Renderer { } #[cfg(feature = "wgpu")] Self::Wgpu(renderer) => { - let primitives = renderer.start_translation(); + let primitives = renderer.start_transformation(); f(self); match self { #[cfg(feature = "wgpu")] Self::Wgpu(renderer) => { - renderer.end_translation(primitives, translation); + renderer.end_transformation(primitives, transformation); } _ => unreachable!(), } |