From 5db08b9f54b6c80ef04ad87f57ee29d779701a4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Sat, 29 Nov 2025 13:45:25 +0100 Subject: [PATCH] Fix `buffer` presentation in `iced_tiny_skia` Co-authored-by: Ottatop --- tiny_skia/src/window/compositor.rs | 48 ++++++++++++++++-------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/tiny_skia/src/window/compositor.rs b/tiny_skia/src/window/compositor.rs index 28bdfe30..c5d0c94e 100644 --- a/tiny_skia/src/window/compositor.rs +++ b/tiny_skia/src/window/compositor.rs @@ -186,30 +186,34 @@ pub fn present( .unwrap_or_else(|| vec![Rectangle::with_size(viewport.logical_size())]); if damage.is_empty() { - return Ok(()); + if let Some(last_layers) = last_layers { + surface.layer_stack.push_front(last_layers.clone()); + } + } else { + surface.layer_stack.push_front(renderer.layers().to_vec()); + surface.background_color = background_color; + + let damage = damage::group( + damage, + Rectangle::with_size(viewport.logical_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"); + + renderer.draw( + &mut pixels, + &mut surface.clip_mask, + viewport, + &damage, + background_color, + ); } - surface.layer_stack.push_front(renderer.layers().to_vec()); - surface.background_color = background_color; - - let damage = - damage::group(damage, Rectangle::with_size(viewport.logical_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"); - - renderer.draw( - &mut pixels, - &mut surface.clip_mask, - viewport, - &damage, - background_color, - ); - on_pre_present(); buffer.present().map_err(|_| compositor::SurfaceError::Lost) }