From 9b8614a4e2252f0b74d1a1b38b5e5bb55b1af995 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 23 Oct 2023 03:14:22 +0200 Subject: Implement `transform` method for `Geometry` --- widget/src/canvas.rs | 1 + 1 file changed, 1 insertion(+) (limited to 'widget/src') 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; -- cgit From f4d66486016076bb339a338bc589645119962d1e Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 24 Oct 2023 05:34:03 +0200 Subject: Introduce `with_transformation` to `Renderer` trait --- widget/src/canvas.rs | 7 +++---- widget/src/image/viewer.rs | 29 ++++++++++++++++------------- widget/src/pane_grid.rs | 10 ++++++---- widget/src/qr_code.rs | 12 ++++++++---- 4 files changed, 33 insertions(+), 25 deletions(-) (limited to 'widget/src') diff --git a/widget/src/canvas.rs b/widget/src/canvas.rs index 3e4a0928..0eda0191 100644 --- a/widget/src/canvas.rs +++ b/widget/src/canvas.rs @@ -7,7 +7,6 @@ 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; @@ -16,7 +15,7 @@ use crate::core::mouse; use crate::core::renderer; use crate::core::widget::tree::{self, Tree}; use crate::core::{ - Clipboard, Element, Length, Rectangle, Shell, Size, Vector, Widget, + Clipboard, Element, Length, Rectangle, Shell, Size, Transformation, Widget, }; use crate::graphics::geometry; @@ -208,8 +207,8 @@ where let state = tree.state.downcast_ref::(); - renderer.with_translation( - Vector::new(bounds.x, bounds.y), + renderer.with_transformation( + Transformation::translate(bounds.x, bounds.y), |renderer| { renderer.draw( self.program.draw(state, renderer, theme, bounds, cursor), diff --git a/widget/src/image/viewer.rs b/widget/src/image/viewer.rs index 9666ff9f..0006f978 100644 --- a/widget/src/image/viewer.rs +++ b/widget/src/image/viewer.rs @@ -7,7 +7,7 @@ use crate::core::renderer; use crate::core::widget::tree::{self, Tree}; use crate::core::{ Clipboard, Element, Layout, Length, Pixels, Point, Rectangle, Shell, Size, - Vector, Widget, + Transformation, Vector, Widget, }; use std::hash::Hash; @@ -328,18 +328,21 @@ where }; renderer.with_layer(bounds, |renderer| { - renderer.with_translation(translation, |renderer| { - image::Renderer::draw( - renderer, - self.handle.clone(), - self.filter_method, - Rectangle { - x: bounds.x, - y: bounds.y, - ..Rectangle::with_size(image_size) - }, - ); - }); + renderer.with_transformation( + Transformation::translate(translation.x, translation.y), + |renderer| { + image::Renderer::draw( + renderer, + self.handle.clone(), + self.filter_method, + Rectangle { + x: bounds.x, + y: bounds.y, + ..Rectangle::with_size(image_size) + }, + ); + }, + ); }); } } diff --git a/widget/src/pane_grid.rs b/widget/src/pane_grid.rs index f76c6088..24389462 100644 --- a/widget/src/pane_grid.rs +++ b/widget/src/pane_grid.rs @@ -43,7 +43,7 @@ use crate::core::widget; use crate::core::widget::tree::{self, Tree}; use crate::core::{ Clipboard, Element, Layout, Length, Pixels, Point, Rectangle, Shell, Size, - Vector, Widget, + Transformation, Vector, Widget, }; /// A collection of panes distributed using either vertical or horizontal splits @@ -962,9 +962,11 @@ pub fn draw( if let Some(cursor_position) = cursor.position() { let bounds = layout.bounds(); - renderer.with_translation( - cursor_position - - Point::new(bounds.x + origin.x, bounds.y + origin.y), + let translation = cursor_position + - Point::new(bounds.x + origin.x, bounds.y + origin.y); + + renderer.with_transformation( + Transformation::translate(translation.x, translation.y), |renderer| { renderer.with_layer(bounds, |renderer| { draw_pane( diff --git a/widget/src/qr_code.rs b/widget/src/qr_code.rs index 91c0a97b..da63d949 100644 --- a/widget/src/qr_code.rs +++ b/widget/src/qr_code.rs @@ -5,7 +5,8 @@ use crate::core::mouse; use crate::core::renderer::{self, Renderer as _}; use crate::core::widget::Tree; use crate::core::{ - Color, Element, Layout, Length, Point, Rectangle, Size, Vector, Widget, + Color, Element, Layout, Length, Point, Rectangle, Size, Transformation, + Vector, Widget, }; use crate::graphics::geometry::Renderer as _; use crate::Renderer; @@ -121,9 +122,12 @@ impl<'a, Message, Theme> Widget for QRCode<'a> { let translation = Vector::new(bounds.x, bounds.y); - renderer.with_translation(translation, |renderer| { - renderer.draw(vec![geometry]); - }); + renderer.with_transformation( + Transformation::translate(translation.x, translation.y), + |renderer| { + renderer.draw(vec![geometry]); + }, + ); } } -- cgit From a06682ff420678f7068265191738ab70ebe30b4c Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 2 Feb 2024 14:31:17 +0100 Subject: Use `with_translation` wherever possible --- widget/src/image/viewer.rs | 29 +++++++++++++---------------- widget/src/pane_grid.rs | 29 +++++++++++++---------------- widget/src/qr_code.rs | 9 +++------ 3 files changed, 29 insertions(+), 38 deletions(-) (limited to 'widget/src') diff --git a/widget/src/image/viewer.rs b/widget/src/image/viewer.rs index 0006f978..9666ff9f 100644 --- a/widget/src/image/viewer.rs +++ b/widget/src/image/viewer.rs @@ -7,7 +7,7 @@ use crate::core::renderer; use crate::core::widget::tree::{self, Tree}; use crate::core::{ Clipboard, Element, Layout, Length, Pixels, Point, Rectangle, Shell, Size, - Transformation, Vector, Widget, + Vector, Widget, }; use std::hash::Hash; @@ -328,21 +328,18 @@ where }; renderer.with_layer(bounds, |renderer| { - renderer.with_transformation( - Transformation::translate(translation.x, translation.y), - |renderer| { - image::Renderer::draw( - renderer, - self.handle.clone(), - self.filter_method, - Rectangle { - x: bounds.x, - y: bounds.y, - ..Rectangle::with_size(image_size) - }, - ); - }, - ); + renderer.with_translation(translation, |renderer| { + image::Renderer::draw( + renderer, + self.handle.clone(), + self.filter_method, + Rectangle { + x: bounds.x, + y: bounds.y, + ..Rectangle::with_size(image_size) + }, + ); + }); }); } } diff --git a/widget/src/pane_grid.rs b/widget/src/pane_grid.rs index 24389462..4f9a265a 100644 --- a/widget/src/pane_grid.rs +++ b/widget/src/pane_grid.rs @@ -43,7 +43,7 @@ use crate::core::widget; use crate::core::widget::tree::{self, Tree}; use crate::core::{ Clipboard, Element, Layout, Length, Pixels, Point, Rectangle, Shell, Size, - Transformation, Vector, Widget, + Vector, Widget, }; /// A collection of panes distributed using either vertical or horizontal splits @@ -965,21 +965,18 @@ pub fn draw( let translation = cursor_position - Point::new(bounds.x + origin.x, bounds.y + origin.y); - renderer.with_transformation( - Transformation::translate(translation.x, translation.y), - |renderer| { - renderer.with_layer(bounds, |renderer| { - draw_pane( - pane, - renderer, - default_style, - layout, - pane_cursor, - viewport, - ); - }); - }, - ); + renderer.with_translation(translation, |renderer| { + renderer.with_layer(bounds, |renderer| { + draw_pane( + pane, + renderer, + default_style, + layout, + pane_cursor, + viewport, + ); + }); + }); } } diff --git a/widget/src/qr_code.rs b/widget/src/qr_code.rs index da63d949..6a748e63 100644 --- a/widget/src/qr_code.rs +++ b/widget/src/qr_code.rs @@ -5,8 +5,7 @@ use crate::core::mouse; use crate::core::renderer::{self, Renderer as _}; use crate::core::widget::Tree; use crate::core::{ - Color, Element, Layout, Length, Point, Rectangle, Size, Transformation, - Vector, Widget, + Color, Element, Layout, Length, Point, Rectangle, Size, Vector, Widget, }; use crate::graphics::geometry::Renderer as _; use crate::Renderer; @@ -120,10 +119,8 @@ impl<'a, Message, Theme> Widget for QRCode<'a> { }); }); - let translation = Vector::new(bounds.x, bounds.y); - - renderer.with_transformation( - Transformation::translate(translation.x, translation.y), + renderer.with_translation( + bounds.position() - Point::ORIGIN, |renderer| { renderer.draw(vec![geometry]); }, -- cgit