let (item, line) = self.refine_pos(w);
let mut item = item;
- let mut lines_rendered = line;
+ let mut lines_rendered = 0;
+ // We count most items we render for their full height, but
+ // not the one we can only see the top segment of
+ let mut line_count_override = Some(line);
+
loop {
- lines_rendered += self.ensure_item_rendered(item, w).len();
+ let item_height = self.ensure_item_rendered(item, w).len();
+
+ let item_height = if let Some(over) = line_count_override {
+ min(item_height, over)
+ } else {
+ item_height
+ };
+ line_count_override = None;
+ lines_rendered += item_height;
+
if lines_rendered >= h {
break;
}