diff options
| author | 2024-04-10 15:21:42 +0200 | |
|---|---|---|
| committer | 2024-04-10 15:21:42 +0200 | |
| commit | 1e802e776cb591f3860d1bfbaa1423d356fc8456 (patch) | |
| tree | 6d18b7ed93daac1f56346f1a18b16da9e378419d /tiny_skia/src/window | |
| parent | 14b9708f723f9fc730634e7ded3dec7dc912ce34 (diff) | |
| download | iced-1e802e776cb591f3860d1bfbaa1423d356fc8456.tar.gz iced-1e802e776cb591f3860d1bfbaa1423d356fc8456.tar.bz2 iced-1e802e776cb591f3860d1bfbaa1423d356fc8456.zip  | |
Reintroduce damage tracking for `iced_tiny_skia`
Diffstat (limited to '')
| -rw-r--r-- | tiny_skia/src/window/compositor.rs | 31 | 
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),  | 
