use crate::buffer::BufferId;
pub type PaneId = usize;
pub type TermId = usize;
#[derive(Debug, Clone)]
pub enum PaneContent {
Editor(BufferId),
Terminal(TermId),
}
#[derive(Debug, Clone)]
pub struct Pane {
pub buffer_id: BufferId,
pub content: PaneContent,
pub cursor_row: usize,
pub cursor_col: usize,
pub col_affinity: usize,
pub scroll_row: usize,
pub selection_anchor: Option<(usize, usize)>,
pub view_h: usize,
pub title: Option<String>,
}
impl Pane {
pub fn new(buffer_id: BufferId) -> Self {
Pane {
buffer_id,
content: PaneContent::Editor(buffer_id),
cursor_row: 0,
cursor_col: 0,
col_affinity: 0,
scroll_row: 0,
selection_anchor: None,
view_h: 0,
title: None,
}
}
pub fn ensure_scroll(&mut self, viewport_height: usize, margin: usize) {
if self.cursor_row < self.scroll_row + margin {
self.scroll_row = self.cursor_row.saturating_sub(margin);
} else {
let bottom = self.scroll_row + viewport_height.saturating_sub(margin + 1);
if self.cursor_row > bottom {
self.scroll_row = self.cursor_row + margin + 1 - viewport_height.max(1);
}
}
}
}