Feat: background head-preload for sample libraries
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user