summaryrefslogtreecommitdiffstats
path: root/tiny_skia
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-04-27 15:45:02 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-04-27 15:45:02 +0200
commiteb1b2bf24174759bba8c63db0ec89c7c6d15d191 (patch)
tree9a82287b449a7e70d622c340e1974c4af2d03b6d /tiny_skia
parent38f82ab35fd24a1aaf96728148b2826211956a9f (diff)
downloadiced-eb1b2bf24174759bba8c63db0ec89c7c6d15d191.tar.gz
iced-eb1b2bf24174759bba8c63db0ec89c7c6d15d191.tar.bz2
iced-eb1b2bf24174759bba8c63db0ec89c7c6d15d191.zip
Invalidate `last_primitives` on resize in `iced_tiny_skia`
Diffstat (limited to 'tiny_skia')
-rw-r--r--tiny_skia/src/window/compositor.rs22
1 files changed, 12 insertions, 10 deletions
diff --git a/tiny_skia/src/window/compositor.rs b/tiny_skia/src/window/compositor.rs
index 1bcce6fe..3bc06970 100644
--- a/tiny_skia/src/window/compositor.rs
+++ b/tiny_skia/src/window/compositor.rs
@@ -15,7 +15,7 @@ pub struct Surface {
window: softbuffer::GraphicsContext,
buffer: Vec<u32>,
clip_mask: tiny_skia::Mask,
- last_primitives: Vec<Primitive>,
+ last_primitives: Option<Vec<Primitive>>,
last_background_color: Color,
}
@@ -48,7 +48,7 @@ impl<Theme> crate::graphics::Compositor for Compositor<Theme> {
buffer: vec![0; width as usize * height as usize],
clip_mask: tiny_skia::Mask::new(width, height)
.expect("Create clip mask"),
- last_primitives: Vec::new(),
+ last_primitives: None,
last_background_color: Color::BLACK,
}
}
@@ -62,8 +62,7 @@ impl<Theme> crate::graphics::Compositor for Compositor<Theme> {
surface.buffer.resize((width * height) as usize, 0);
surface.clip_mask =
tiny_skia::Mask::new(width, height).expect("Create clip mask");
-
- surface.last_primitives.clear();
+ surface.last_primitives = None;
}
fn fetch_information(&self) -> Information {
@@ -121,17 +120,20 @@ pub fn present<T: AsRef<str>>(
)
.expect("Create pixel map");
- let damage = if surface.last_background_color == background_color {
- damage::list(&surface.last_primitives, primitives)
- } else {
- vec![Rectangle::with_size(viewport.logical_size())]
- };
+ let damage = surface
+ .last_primitives
+ .as_deref()
+ .and_then(|last_primitives| {
+ (surface.last_background_color == background_color)
+ .then(|| damage::list(last_primitives, primitives))
+ })
+ .unwrap_or_else(|| vec![Rectangle::with_size(viewport.logical_size())]);
if damage.is_empty() {
return Ok(());
}
- surface.last_primitives = primitives.to_vec();
+ surface.last_primitives = Some(primitives.to_vec());
surface.last_background_color = background_color;
let damage = damage::group(damage, scale_factor, physical_size);