diff options
author | 2024-01-18 10:42:02 +0100 | |
---|---|---|
committer | 2024-01-18 10:42:02 +0100 | |
commit | b6b3e9b9f995abf5cc65814e143418b6f1ec7464 (patch) | |
tree | d013aee15f10262f4195e8fb4a52c63ddfe148d2 /tiny_skia | |
parent | 4b7744b9806397c9891b1fc179df8a61eaa3670d (diff) | |
download | iced-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.rs | 40 |
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) } |