Calculate offset when moving picker cursor

This commit is contained in:
Kevin Sjöberg 2021-06-06 10:41:21 +02:00 committed by Blaž Hrastnik
parent bcb1afeb4c
commit aa8a8baeeb

View File

@ -246,13 +246,14 @@ impl<T: 'static> Component for Picker<T> {
let selected = Style::default().fg(Color::Rgb(255, 255, 255)); let selected = Style::default().fg(Color::Rgb(255, 255, 255));
let rows = inner.height - 2; // -1 for search bar let rows = inner.height - 2; // -1 for search bar
let offset = self.cursor / (rows as usize) * (rows as usize);
let files = self.matches.iter().map(|(index, _score)| { let files = self.matches.iter().skip(offset).map(|(index, _score)| {
(index, self.options.get(*index).unwrap()) // get_unchecked (index, self.options.get(*index).unwrap()) // get_unchecked
}); });
for (i, (_index, option)) in files.take(rows as usize).enumerate() { for (i, (_index, option)) in files.take(rows as usize).enumerate() {
if i == self.cursor { if i == (self.cursor - offset) {
surface.set_string(inner.x + 1, inner.y + 2 + i as u16, ">", selected); surface.set_string(inner.x + 1, inner.y + 2 + i as u16, ">", selected);
} }
@ -261,7 +262,11 @@ impl<T: 'static> Component for Picker<T> {
inner.y + 2 + i as u16, inner.y + 2 + i as u16,
(self.format_fn)(option), (self.format_fn)(option),
inner.width as usize - 1, inner.width as usize - 1,
if i == self.cursor { selected } else { style }, if i == (self.cursor - offset) {
selected
} else {
style
},
); );
} }
} }