summaryrefslogtreecommitdiff
path: root/helix-view
diff options
context:
space:
mode:
authorBlaž Hrastnik2021-08-19 03:52:07 +0000
committerBlaž Hrastnik2021-08-19 03:52:07 +0000
commit9776553ad057c12ccee8c0d54d419b159977f34e (patch)
tree05823129fb443d368cc7d9a09b81f4180545df0d /helix-view
parent115754c5ee5e105ca5b1943abe9b2a1b2299c2bc (diff)
Refactor view.first_line/first_col into view.offset (Position)
Diffstat (limited to 'helix-view')
-rw-r--r--helix-view/src/editor.rs4
-rw-r--r--helix-view/src/view.rs34
2 files changed, 18 insertions, 20 deletions
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index 32f5fe86..478f3818 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -180,7 +180,7 @@ impl Editor {
view.jumps.push(jump);
view.last_accessed_doc = Some(view.doc);
view.doc = id;
- view.first_line = 0;
+ view.offset = Position::default();
let (view, doc) = current!(self);
@@ -194,7 +194,7 @@ impl Editor {
.primary()
.cursor(doc.text().slice(..));
let line = doc.text().char_to_line(pos);
- view.first_line = line.saturating_sub(view.area.height as usize / 2);
+ view.offset.row = line.saturating_sub(view.area.height as usize / 2);
return;
}
diff --git a/helix-view/src/view.rs b/helix-view/src/view.rs
index c7309fe9..f688dd7f 100644
--- a/helix-view/src/view.rs
+++ b/helix-view/src/view.rs
@@ -61,8 +61,7 @@ impl JumpList {
pub struct View {
pub id: ViewId,
pub doc: DocumentId,
- pub first_line: usize,
- pub first_col: usize,
+ pub offset: Position,
pub area: Rect,
pub jumps: JumpList,
/// the last accessed file before the current one
@@ -74,8 +73,7 @@ impl View {
Self {
id: ViewId::default(),
doc,
- first_line: 0,
- first_col: 0,
+ offset: Position::new(0, 0),
area: Rect::default(), // will get calculated upon inserting into tree
jumps: JumpList::new((doc, Selection::point(0))), // TODO: use actual sel
last_accessed_doc: None,
@@ -91,7 +89,7 @@ impl View {
let line = pos.row;
let col = pos.col;
let height = self.area.height.saturating_sub(1); // - 1 for statusline
- let last_line = (self.first_line + height as usize).saturating_sub(1);
+ let last_line = (self.offset.row + height as usize).saturating_sub(1);
// - 1 so we have at least one gap in the middle.
// a height of 6 with padding of 3 on each side will keep shifting the view back and forth
@@ -100,22 +98,22 @@ impl View {
// TODO: not ideal
const OFFSET: usize = 7; // 1 diagnostic + 5 linenr + 1 gutter
- let last_col = (self.first_col + self.area.width as usize).saturating_sub(OFFSET + 1);
+ let last_col = (self.offset.col + self.area.width as usize).saturating_sub(OFFSET + 1);
if line > last_line.saturating_sub(scrolloff) {
// scroll down
- self.first_line += line - (last_line.saturating_sub(scrolloff));
- } else if line < self.first_line + scrolloff {
+ self.offset.row += line - (last_line.saturating_sub(scrolloff));
+ } else if line < self.offset.row + scrolloff {
// scroll up
- self.first_line = line.saturating_sub(scrolloff);
+ self.offset.row = line.saturating_sub(scrolloff);
}
if col > last_col.saturating_sub(scrolloff) {
// scroll right
- self.first_col += col - (last_col.saturating_sub(scrolloff));
- } else if col < self.first_col + scrolloff {
+ self.offset.col += col - (last_col.saturating_sub(scrolloff));
+ } else if col < self.offset.col + scrolloff {
// scroll left
- self.first_col = col.saturating_sub(scrolloff);
+ self.offset.col = col.saturating_sub(scrolloff);
}
}
@@ -125,7 +123,7 @@ impl View {
let height = self.area.height.saturating_sub(1); // - 1 for statusline
std::cmp::min(
// Saturating subs to make it inclusive zero indexing.
- (self.first_line + height as usize).saturating_sub(1),
+ (self.offset.row + height as usize).saturating_sub(1),
doc.text().len_lines().saturating_sub(1),
)
}
@@ -141,7 +139,7 @@ impl View {
) -> Option<Position> {
let line = text.char_to_line(pos);
- if line < self.first_line || line > self.last_line(doc) {
+ if line < self.offset.row || line > self.last_line(doc) {
// Line is not visible on screen
return None;
}
@@ -161,8 +159,8 @@ impl View {
}
// It is possible for underflow to occur if the buffer length is larger than the terminal width.
- let row = line.saturating_sub(self.first_line);
- let col = col.saturating_sub(self.first_col);
+ let row = line.saturating_sub(self.offset.row);
+ let col = col.saturating_sub(self.offset.col);
Some(Position::new(row, col))
}
@@ -186,7 +184,7 @@ impl View {
return None;
}
- let line_number = (row - self.area.y) as usize + self.first_line;
+ let line_number = (row - self.area.y) as usize + self.offset.row;
if line_number > text.len_lines() - 1 {
return Some(text.len_chars());
@@ -196,7 +194,7 @@ impl View {
let current_line = text.line(line_number);
- let target = (column - OFFSET - self.area.x) as usize + self.first_col;
+ let target = (column - OFFSET - self.area.x) as usize + self.offset.col;
let mut selected = 0;
for grapheme in RopeGraphemes::new(current_line) {