From 9b8614a4e2252f0b74d1a1b38b5e5bb55b1af995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Mon, 23 Oct 2023 03:14:22 +0200 Subject: [PATCH] Implement `transform` method for `Geometry` --- examples/bezier_tool/Cargo.toml | 2 +- renderer/src/geometry.rs | 39 +++++++++++++++++++++++---------- widget/src/canvas.rs | 1 + 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/examples/bezier_tool/Cargo.toml b/examples/bezier_tool/Cargo.toml index b2547ff1..e5624097 100644 --- a/examples/bezier_tool/Cargo.toml +++ b/examples/bezier_tool/Cargo.toml @@ -7,4 +7,4 @@ publish = false [dependencies] iced.workspace = true -iced.features = ["canvas"] +iced.features = ["canvas", "debug"] diff --git a/renderer/src/geometry.rs b/renderer/src/geometry.rs index cd2140dc..9cf506a8 100644 --- a/renderer/src/geometry.rs +++ b/renderer/src/geometry.rs @@ -4,20 +4,9 @@ pub use cache::Cache; use crate::core::{Point, Rectangle, Size, Vector}; use crate::graphics::geometry::{Fill, Path, Stroke, Text}; +use crate::graphics::Transformation; use crate::Renderer; -pub enum Frame { - TinySkia(iced_tiny_skia::geometry::Frame), - #[cfg(feature = "wgpu")] - Wgpu(iced_wgpu::geometry::Frame), -} - -pub enum Geometry { - TinySkia(iced_tiny_skia::Primitive), - #[cfg(feature = "wgpu")] - Wgpu(iced_wgpu::Primitive), -} - macro_rules! delegate { ($frame:expr, $name:ident, $body:expr) => { match $frame { @@ -28,6 +17,32 @@ macro_rules! delegate { }; } +pub enum Geometry { + TinySkia(iced_tiny_skia::Primitive), + #[cfg(feature = "wgpu")] + Wgpu(iced_wgpu::Primitive), +} + +impl Geometry { + pub fn transform(self, transformation: Transformation) -> Self { + match self { + Self::TinySkia(primitive) => { + Self::TinySkia(primitive.transform(transformation)) + } + #[cfg(feature = "wgpu")] + 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 { pub fn new(renderer: &Renderer, size: Size) -> Self { match renderer { diff --git a/widget/src/canvas.rs b/widget/src/canvas.rs index b95e6206..3e4a0928 100644 --- a/widget/src/canvas.rs +++ b/widget/src/canvas.rs @@ -7,6 +7,7 @@ pub use event::Event; pub use program::Program; pub use crate::graphics::geometry::*; +pub use crate::graphics::Transformation; pub use crate::renderer::geometry::*; use crate::core;