Feat: background head-preload for sample libraries

This commit is contained in:
2026-02-05 14:35:26 +01:00
parent fb751c8691
commit 07523a49e7
8 changed files with 139 additions and 20 deletions

View File

@@ -1,3 +1,5 @@
use std::cell::Cell;
use crate::theme;
use ratatui::{
layout::Rect,
@@ -59,6 +61,7 @@ pub struct Editor {
text: TextArea<'static>,
completion: CompletionState,
search: SearchState,
scroll_offset: Cell<u16>,
}
impl Editor {
@@ -107,6 +110,7 @@ impl Editor {
text: TextArea::default(),
completion: CompletionState::new(),
search: SearchState::new(),
scroll_offset: Cell::new(0),
}
}
@@ -115,6 +119,7 @@ impl Editor {
self.completion.active = false;
self.search.query.clear();
self.search.active = false;
self.scroll_offset.set(0);
}
pub fn set_candidates(&mut self, candidates: Vec<CompletionCandidate>) {
@@ -376,10 +381,21 @@ impl Editor {
})
.collect();
frame.render_widget(Paragraph::new(lines), area);
let viewport_height = area.height as usize;
let offset = self.scroll_offset.get() as usize;
let offset = if cursor_row < offset {
cursor_row
} else if cursor_row >= offset + viewport_height {
cursor_row - viewport_height + 1
} else {
offset
};
self.scroll_offset.set(offset as u16);
frame.render_widget(Paragraph::new(lines).scroll((offset as u16, 0)), area);
if self.completion.active && !self.completion.matches.is_empty() {
self.render_completion(frame, area, cursor_row);
self.render_completion(frame, area, cursor_row - offset);
}
}