]> git.proxmox.com Git - ui/proxmox-yew-widget-toolkit.git/commitdiff
list: compute tail height
authorDietmar Maurer <dietmar@proxmox.com>
Tue, 10 Dec 2024 11:12:32 +0000 (12:12 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 10 Dec 2024 11:12:32 +0000 (12:12 +0100)
Instead of using a bad esitimation.

Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
src/widget/list.rs

index 86c689776c1af076d6160fdcb62e568d7c3033f1..abbcd2f2da25a297a6b1b07e8d4c39691f02821a 100644 (file)
@@ -176,6 +176,18 @@ impl SizeAccumulator {
             height + rest * min_row_height,
         )
     }
+
+    fn compute_tail_height(&mut self, row_count: usize, end: usize, min_row_height: u64) -> u64 {
+        if self.height_list.len() < row_count {
+            self.height_list.resize(row_count, min_row_height);
+        }
+
+        let mut height = 0u64;
+        for i in ((end + 1)..row_count).rev() {
+            height += self.height_list[i];
+        }
+        height
+    }
 }
 
 #[doc(hidden)]
@@ -287,7 +299,13 @@ impl PwtList {
 
         let offset_end = offset as f64 + self.table_height;
 
-        let height = offset_end + item_count.saturating_sub(end) as f64 * self.row_height;
+        let tail_height = self.start_space.compute_tail_height(
+            props.item_count as usize,
+            end as usize,
+            props.min_row_height,
+        );
+
+        let height = offset_end + tail_height as f64;
 
         self.scroll_info = VirtualScrollInfo {
             start,