summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2023-09-07 06:03:41 +0200
committerLibravatar GitHub <noreply@github.com>2023-09-07 06:03:41 +0200
commitb5e7fb240cda919b66fb17a18cedd6d2ec064eaf (patch)
treeea4ee5a4fd82854547b82c3c125ee30893cc9235
parentd82c8b59e6a3e7743017c7674766dfa5bdb7c6f0 (diff)
parent09965b686ea6bf82e6c13ed5331bbeb059848e4f (diff)
downloadiced-b5e7fb240cda919b66fb17a18cedd6d2ec064eaf.tar.gz
iced-b5e7fb240cda919b66fb17a18cedd6d2ec064eaf.tar.bz2
iced-b5e7fb240cda919b66fb17a18cedd6d2ec064eaf.zip
Merge pull request #2070 from ripytide/master
Added a Frame::scale_nonuniform method
-rw-r--r--examples/game_of_life/src/main.rs8
-rw-r--r--renderer/src/geometry.rs10
-rw-r--r--tiny_skia/src/geometry.rs12
-rw-r--r--wgpu/src/geometry.rs16
-rw-r--r--widget/src/qr_code.rs2
5 files changed, 36 insertions, 12 deletions
diff --git a/examples/game_of_life/src/main.rs b/examples/game_of_life/src/main.rs
index a2038f12..39c1609d 100644
--- a/examples/game_of_life/src/main.rs
+++ b/examples/game_of_life/src/main.rs
@@ -550,7 +550,7 @@ mod grid {
frame.translate(center);
frame.scale(self.scaling);
frame.translate(self.translation);
- frame.scale(Cell::SIZE as f32);
+ frame.scale(Cell::SIZE);
let region = self.visible_region(frame.size());
@@ -576,7 +576,7 @@ mod grid {
frame.translate(center);
frame.scale(self.scaling);
frame.translate(self.translation);
- frame.scale(Cell::SIZE as f32);
+ frame.scale(Cell::SIZE);
frame.fill_rectangle(
Point::new(cell.j as f32, cell.i as f32),
@@ -630,7 +630,7 @@ mod grid {
frame.translate(center);
frame.scale(self.scaling);
frame.translate(self.translation);
- frame.scale(Cell::SIZE as f32);
+ frame.scale(Cell::SIZE);
let region = self.visible_region(frame.size());
let rows = region.rows();
@@ -834,7 +834,7 @@ mod grid {
}
impl Cell {
- const SIZE: usize = 20;
+ const SIZE: u16 = 20;
fn at(position: Point) -> Cell {
let i = (position.y / Cell::SIZE as f32).ceil() as isize;
diff --git a/renderer/src/geometry.rs b/renderer/src/geometry.rs
index 04b5d9e6..1a974b7f 100644
--- a/renderer/src/geometry.rs
+++ b/renderer/src/geometry.rs
@@ -168,12 +168,18 @@ impl Frame {
delegate!(self, frame, frame.rotate(angle));
}
- /// Applies a scaling to the current transform of the [`Frame`].
+ /// Applies a uniform scaling to the current transform of the [`Frame`].
#[inline]
- pub fn scale(&mut self, scale: f32) {
+ pub fn scale(&mut self, scale: impl Into<f32>) {
delegate!(self, frame, frame.scale(scale));
}
+ /// Applies a non-uniform scaling to the current transform of the [`Frame`].
+ #[inline]
+ pub fn scale_nonuniform(&mut self, scale: impl Into<Vector>) {
+ delegate!(self, frame, frame.scale_nonuniform(scale));
+ }
+
pub fn into_geometry(self) -> Geometry {
match self {
Self::TinySkia(frame) => Geometry::TinySkia(frame.into_primitive()),
diff --git a/tiny_skia/src/geometry.rs b/tiny_skia/src/geometry.rs
index 0fae7364..1df5aa18 100644
--- a/tiny_skia/src/geometry.rs
+++ b/tiny_skia/src/geometry.rs
@@ -154,8 +154,16 @@ impl Frame {
.pre_concat(tiny_skia::Transform::from_rotate(angle.to_degrees()));
}
- pub fn scale(&mut self, scale: f32) {
- self.transform = self.transform.pre_scale(scale, scale);
+ pub fn scale(&mut self, scale: impl Into<f32>) {
+ let scale = scale.into();
+
+ self.scale_nonuniform(Vector { x: scale, y: scale });
+ }
+
+ pub fn scale_nonuniform(&mut self, scale: impl Into<Vector>) {
+ let scale = scale.into();
+
+ self.transform = self.transform.pre_scale(scale.x, scale.y);
}
pub fn into_primitive(self) -> Primitive {
diff --git a/wgpu/src/geometry.rs b/wgpu/src/geometry.rs
index e421e0b0..c3e16f8c 100644
--- a/wgpu/src/geometry.rs
+++ b/wgpu/src/geometry.rs
@@ -444,11 +444,21 @@ impl Frame {
self.transforms.current.is_identity = false;
}
- /// Applies a scaling to the current transform of the [`Frame`].
+ /// Applies a uniform scaling to the current transform of the [`Frame`].
#[inline]
- pub fn scale(&mut self, scale: f32) {
+ pub fn scale(&mut self, scale: impl Into<f32>) {
+ let scale = scale.into();
+
+ self.scale_nonuniform(Vector { x: scale, y: scale });
+ }
+
+ /// Applies a non-uniform scaling to the current transform of the [`Frame`].
+ #[inline]
+ pub fn scale_nonuniform(&mut self, scale: impl Into<Vector>) {
+ let scale = scale.into();
+
self.transforms.current.raw =
- self.transforms.current.raw.pre_scale(scale, scale);
+ self.transforms.current.raw.pre_scale(scale.x, scale.y);
self.transforms.current.is_identity = false;
}
diff --git a/widget/src/qr_code.rs b/widget/src/qr_code.rs
index 51a541fd..75409091 100644
--- a/widget/src/qr_code.rs
+++ b/widget/src/qr_code.rs
@@ -86,7 +86,7 @@ impl<'a, Message, Theme> Widget<Message, Renderer<Theme>> for QRCode<'a> {
let geometry =
self.state.cache.draw(renderer, bounds.size(), |frame| {
// Scale units to cell size
- frame.scale(f32::from(self.cell_size));
+ frame.scale(self.cell_size);
// Draw background
frame.fill_rectangle(