summaryrefslogtreecommitdiffstats
path: root/tiny_skia/src/window/compositor.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tiny_skia/src/window/compositor.rs')
-rw-r--r--tiny_skia/src/window/compositor.rs31
1 files changed, 17 insertions, 14 deletions
diff --git a/tiny_skia/src/window/compositor.rs b/tiny_skia/src/window/compositor.rs
index e1a9dfec..153af6d5 100644
--- a/tiny_skia/src/window/compositor.rs
+++ b/tiny_skia/src/window/compositor.rs
@@ -1,5 +1,6 @@
use crate::core::{Color, Rectangle, Size};
use crate::graphics::compositor::{self, Information};
+use crate::graphics::damage;
use crate::graphics::error::{self, Error};
use crate::graphics::{self, Viewport};
use crate::{Layer, Renderer, Settings};
@@ -154,7 +155,7 @@ pub fn present<T: AsRef<str>>(
.buffer_mut()
.map_err(|_| compositor::SurfaceError::Lost)?;
- let _last_layers = {
+ let last_layers = {
let age = buffer.age();
surface.max_age = surface.max_age.max(age);
@@ -167,26 +168,28 @@ pub fn present<T: AsRef<str>>(
}
};
- // TODO
- // let damage = last_layers
- // .and_then(|last_layers| {
- // (surface.background_color == background_color)
- // .then(|| damage::layers(last_layers, renderer.layers()))
- // })
- // .unwrap_or_else(|| vec![Rectangle::with_size(viewport.logical_size())]);
-
- let damage = vec![Rectangle::with_size(viewport.logical_size())];
+ let damage = last_layers
+ .and_then(|last_layers| {
+ (surface.background_color == background_color).then(|| {
+ damage::diff(
+ last_layers,
+ renderer.layers(),
+ |layer| vec![layer.bounds],
+ Layer::damage,
+ )
+ })
+ })
+ .unwrap_or_else(|| vec![Rectangle::with_size(viewport.logical_size())]);
if damage.is_empty() {
return Ok(());
}
- surface
- .layer_stack
- .push_front(renderer.layers().cloned().collect());
+ surface.layer_stack.push_front(renderer.layers().to_vec());
surface.background_color = background_color;
- // let damage = damage::group(damage, viewport.logical_size());
+ 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),