From 4130a800b8f89ab8ddfe87d5d417e0571b1e4ce1 Mon Sep 17 00:00:00 2001 From: EdJoPaTo Date: Sat, 24 Feb 2024 00:36:32 +0100 Subject: [PATCH] perf: get item.height() less often on render --- src/lib.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index b94cd6e..ee2327c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -228,17 +228,20 @@ where let mut end = start; let mut height = 0; - for Flattened { item, .. } in visible.iter().skip(start) { - if height + item.height() > available_height { + for item_height in visible + .iter() + .skip(start) + .map(|flattened| flattened.item.height()) + { + if height + item_height > available_height { break; } - - height += item.height(); + height += item_height; end += 1; } while state.ensure_selected_in_view_on_next_render && selected_index >= end { - height = height.saturating_add(visible[end].item.height()); + height += visible[end].item.height(); end += 1; while height > available_height { height = height.saturating_sub(visible[start].item.height()); @@ -271,13 +274,14 @@ where let x = area.x; let y = area.y + current_height; - current_height += item.height() as u16; + let height = item.height() as u16; + current_height += height; let area = Rect { x, y, width: area.width, - height: item.height() as u16, + height, }; let item_style = self.style.patch(item.style);