summaryrefslogtreecommitdiffstats
path: root/tiny_skia/src/engine.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector@hecrj.dev>2024-05-03 07:31:34 +0200
committerLibravatar GitHub <noreply@github.com>2024-05-03 07:31:34 +0200
commit1cefe6be210cdae8c6769673e8d23c6781a988f1 (patch)
tree7d4a383412e6bd69d0cc1b32f996ba7cf6ef892e /tiny_skia/src/engine.rs
parentfe240a93aacd15bd3fa75876054753a53bda9054 (diff)
parent4010e3983d40e24a5d7b590d8fec9801651199ce (diff)
downloadiced-1cefe6be210cdae8c6769673e8d23c6781a988f1.tar.gz
iced-1cefe6be210cdae8c6769673e8d23c6781a988f1.tar.bz2
iced-1cefe6be210cdae8c6769673e8d23c6781a988f1.zip
Merge pull request #2334 from DKolter/image-rotation
Adding feature: Image rotation
Diffstat (limited to 'tiny_skia/src/engine.rs')
-rw-r--r--tiny_skia/src/engine.rs51
1 files changed, 36 insertions, 15 deletions
diff --git a/tiny_skia/src/engine.rs b/tiny_skia/src/engine.rs
index fbca1274..e9935bdb 100644
--- a/tiny_skia/src/engine.rs
+++ b/tiny_skia/src/engine.rs
@@ -539,10 +539,10 @@ impl Engine {
pub fn draw_image(
&mut self,
image: &Image,
- _transformation: Transformation,
- _pixels: &mut tiny_skia::PixmapMut<'_>,
- _clip_mask: &mut tiny_skia::Mask,
- _clip_bounds: Rectangle,
+ transformation: Transformation,
+ pixels: &mut tiny_skia::PixmapMut<'_>,
+ clip_mask: &mut tiny_skia::Mask,
+ clip_bounds: Rectangle,
) {
match image {
#[cfg(feature = "image")]
@@ -550,22 +550,32 @@ impl Engine {
handle,
filter_method,
bounds,
+ rotation,
} => {
- let physical_bounds = *bounds * _transformation;
+ let physical_bounds = *bounds * transformation;
- if !_clip_bounds.intersects(&physical_bounds) {
+ if !clip_bounds.intersects(&physical_bounds) {
return;
}
- let clip_mask = (!physical_bounds.is_within(&_clip_bounds))
- .then_some(_clip_mask as &_);
+ let clip_mask = (!physical_bounds.is_within(&clip_bounds))
+ .then_some(clip_mask as &_);
+
+ let center = physical_bounds.center();
+ let radians = f32::from(*rotation);
+
+ let transform = into_transform(transformation).post_rotate_at(
+ radians.to_degrees(),
+ center.x,
+ center.y,
+ );
self.raster_pipeline.draw(
handle,
*filter_method,
*bounds,
- _pixels,
- into_transform(_transformation),
+ pixels,
+ transform,
clip_mask,
);
}
@@ -574,21 +584,32 @@ impl Engine {
handle,
color,
bounds,
+ rotation,
} => {
- let physical_bounds = *bounds * _transformation;
+ let physical_bounds = *bounds * transformation;
- if !_clip_bounds.intersects(&physical_bounds) {
+ if !clip_bounds.intersects(&physical_bounds) {
return;
}
- let clip_mask = (!physical_bounds.is_within(&_clip_bounds))
- .then_some(_clip_mask as &_);
+ let clip_mask = (!physical_bounds.is_within(&clip_bounds))
+ .then_some(clip_mask as &_);
+
+ let center = physical_bounds.center();
+ let radians = f32::from(*rotation);
+
+ let transform = into_transform(transformation).post_rotate_at(
+ radians.to_degrees(),
+ center.x,
+ center.y,
+ );
self.vector_pipeline.draw(
handle,
*color,
physical_bounds,
- _pixels,
+ pixels,
+ transform,
clip_mask,
);
}