From 65a5f39861ccb2db7cac91b1f6c9693b25e02c44 Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Sun, 13 Aug 2023 13:11:49 +0200 Subject: [PATCH] image: Force minimum tile size of 1000x1000 Everything else does not make sense loading performance wise. Part-of: --- src/widgets/image.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/widgets/image.rs b/src/widgets/image.rs index 0d8ec11..5765630 100644 --- a/src/widgets/image.rs +++ b/src/widgets/image.rs @@ -818,7 +818,6 @@ impl LpImage { self.queue_draw(); imp.frame_buffer.rcu(|tiles| { let mut new_tiles = (**tiles).clone(); - // TODO: Use an area larger than the viewport new_tiles.cleanup(imp.zoom_target.get(), self.preload_area()); new_tiles }); @@ -1271,8 +1270,13 @@ impl LpImage { fn request_tiles(&self) { if let Some(decoder) = self.imp().decoder.borrow().as_ref() { if self.zoom_animation().state() != adw::AnimationState::Playing { + // Force minimum tile size of 1000x1000 since with smaller + // tiles the tiled rendering advantage disappears + let x_inset = f32::min(-3., (self.viewport().width() - 1000.) / 2.); + let y_inset = f32::min(-3., (self.viewport().height() - 1000.) / 2.); + decoder.request(crate::decoder::TileRequest { - viewport: self.viewport().inset_r(-3., -3.), + viewport: self.viewport().inset_r(x_inset, y_inset), area: self.preload_area(), zoom: self.imp().zoom_target.get(), });