diff options
Diffstat (limited to 'src/grid')
-rw-r--r-- | src/grid/mod.rs | 17 | ||||
-rw-r--r-- | src/grid/storage.rs | 2 |
2 files changed, 7 insertions, 12 deletions
diff --git a/src/grid/mod.rs b/src/grid/mod.rs index 535f6cc6..949a5ed5 100644 --- a/src/grid/mod.rs +++ b/src/grid/mod.rs @@ -100,12 +100,6 @@ pub struct GridIterator<'a, T: 'a> { /// Current position of the iterator within the grid. pub cur: Point<usize>, - - /// Bottom of screen (buffer) - bot: usize, - - /// Top of screen (buffer) - top: usize, } pub enum Scroll { @@ -357,7 +351,10 @@ impl<T: Copy + Clone> Grid<T> { if region.start == Line(0) { // Update display offset when not pinned to active area if self.display_offset != 0 { - self.display_offset += *positions; + self.display_offset = min( + self.display_offset + *positions, + self.len() - self.num_lines().0, + ); } self.increase_scroll_limit(*positions); @@ -433,8 +430,6 @@ impl<T> Grid<T> { GridIterator { grid: self, cur: point, - bot: self.display_offset, - top: self.display_offset + *self.num_lines() - 1, } } @@ -459,7 +454,7 @@ impl<'a, T> Iterator for GridIterator<'a, T> { fn next(&mut self) -> Option<Self::Item> { let last_col = self.grid.num_cols() - Column(1); match self.cur { - Point { line, col } if (line == self.bot) && (col == last_col) => None, + Point { line, col } if line == 0 && col == last_col => None, Point { col, .. } if (col == last_col) => { self.cur.line -= 1; @@ -479,7 +474,7 @@ impl<'a, T> BidirectionalIterator for GridIterator<'a, T> { let num_cols = self.grid.num_cols(); match self.cur { - Point { line, col: Column(0) } if line == self.top => None, + Point { line, col: Column(0) } if line == self.grid.len() - 1 => None, Point { col: Column(0), .. } => { self.cur.line += 1; self.cur.col = num_cols - Column(1); diff --git a/src/grid/storage.rs b/src/grid/storage.rs index 2f34b3f0..5d6cb936 100644 --- a/src/grid/storage.rs +++ b/src/grid/storage.rs @@ -198,7 +198,7 @@ impl<T> Storage<T> { /// Compute actual index in underlying storage given the requested index. fn compute_index(&self, requested: usize) -> usize { - debug_assert!(requested < self.inner.len()); + debug_assert!(requested < self.len); let zeroed = requested + self.zero; // This part is critical for performance, |