summaryrefslogtreecommitdiffstats
path: root/tiny_skia
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-01-18 10:42:02 +0100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-01-18 10:42:02 +0100
commitb6b3e9b9f995abf5cc65814e143418b6f1ec7464 (patch)
treed013aee15f10262f4195e8fb4a52c63ddfe148d2 /tiny_skia
parent4b7744b9806397c9891b1fc179df8a61eaa3670d (diff)
downloadiced-b6b3e9b9f995abf5cc65814e143418b6f1ec7464.tar.gz
iced-b6b3e9b9f995abf5cc65814e143418b6f1ec7464.tar.bz2
iced-b6b3e9b9f995abf5cc65814e143418b6f1ec7464.zip
Avoid stacking new primitives when undamaged
Diffstat (limited to 'tiny_skia')
-rw-r--r--tiny_skia/src/window/compositor.rs40
1 files changed, 21 insertions, 19 deletions
diff --git a/tiny_skia/src/window/compositor.rs b/tiny_skia/src/window/compositor.rs
index c0aabdb6..dae57975 100644
--- a/tiny_skia/src/window/compositor.rs
+++ b/tiny_skia/src/window/compositor.rs
@@ -185,29 +185,31 @@ pub fn present<T: AsRef<str>>(
})
.unwrap_or_else(|| vec![Rectangle::with_size(viewport.logical_size())]);
+ if damage.is_empty() {
+ return Ok(());
+ }
+
surface.primitive_stack.push_front(primitives.to_vec());
surface.background_color = background_color;
- if !damage.is_empty() {
- let damage = damage::group(damage, scale_factor, physical_size);
+ let damage = damage::group(damage, scale_factor, physical_size);
- let mut pixels = tiny_skia::PixmapMut::from_bytes(
- bytemuck::cast_slice_mut(&mut buffer),
- physical_size.width,
- physical_size.height,
- )
- .expect("Create pixel map");
-
- backend.draw(
- &mut pixels,
- &mut surface.clip_mask,
- primitives,
- viewport,
- &damage,
- background_color,
- overlay,
- );
- }
+ let mut pixels = tiny_skia::PixmapMut::from_bytes(
+ bytemuck::cast_slice_mut(&mut buffer),
+ physical_size.width,
+ physical_size.height,
+ )
+ .expect("Create pixel map");
+
+ backend.draw(
+ &mut pixels,
+ &mut surface.clip_mask,
+ primitives,
+ viewport,
+ &damage,
+ background_color,
+ overlay,
+ );
buffer.present().map_err(|_| compositor::SurfaceError::Lost)
}