From 870818fec8198aceb60c986909d76c896bdce38e Mon Sep 17 00:00:00 2001 From: Nathan Vegdahl Date: Sat, 7 Feb 2015 22:07:48 -0800 Subject: [PATCH] Cursor movement appears to be working properly again. --- src/editor/mod.rs | 63 ++++++++++++++--------------------------------- src/formatter.rs | 9 ++++--- 2 files changed, 23 insertions(+), 49 deletions(-) diff --git a/src/editor/mod.rs b/src/editor/mod.rs index ab44069..420a7d2 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -596,61 +596,34 @@ impl Editor { pub fn page_up(&mut self) { - // TODO: update to new formatting code + let move_amount = self.view_dim.0 - max((self.view_dim.0 / 8), self.formatter.single_line_height()); + self.view_pos.0 = self.formatter.index_offset_vertical_v2d(&self.buffer, self.view_pos.0, -1 * move_amount as isize, (Round, Round)); - //let move_amount = self.view_dim.0 - max((self.view_dim.0 / 8), self.buffer.formatter.single_line_height()); - // - //if self.view_pos.0 > 0 { - // if self.view_pos.0 >= move_amount { - // self.view_pos.0 -= move_amount; - // } - // else { - // self.view_pos.0 = 0; - // } - //} - // - //self.cursor_up(move_amount); - // - //// Adjust view - //self.move_view_to_cursor(); + self.cursor_up(move_amount); + + // Adjust view + self.move_view_to_cursor(); } pub fn page_down(&mut self) { - // TODO: update to new formatting code + let move_amount = self.view_dim.0 - max((self.view_dim.0 / 8), self.formatter.single_line_height()); + self.view_pos.0 = self.formatter.index_offset_vertical_v2d(&self.buffer, self.view_pos.0, move_amount as isize, (Round, Round)); - //let nlc = self.buffer.line_count() - 1; - //let move_amount = self.view_dim.0 - max((self.view_dim.0 / 8), self.buffer.formatter.single_line_height()); - // - //if self.view_pos.0 < nlc { - // let max_move = nlc - self.view_pos.0; - // - // if max_move >= move_amount { - // self.view_pos.0 += move_amount; - // } - // else { - // self.view_pos.0 += max_move; - // } - // - //} - // - //self.cursor_down(move_amount); - // - //// Adjust view - //self.move_view_to_cursor(); + self.cursor_down(move_amount); + + // Adjust view + self.move_view_to_cursor(); } pub fn jump_to_line(&mut self, n: usize) { - // TODO: update to new formatting code + let pos = self.buffer.line_col_to_index((n, 0)); + self.cursors.truncate(1); + self.cursors[0].range.0 = self.formatter.index_set_horizontal_v2d(&self.buffer, pos, self.cursors[0].vis_start, Round); + self.cursors[0].range.1 = self.cursors[0].range.0; - //let pos = self.buffer.line_col_to_index((n, 0)); - //let (v, _) = self.buffer.index_to_v2d(pos); - //self.cursors.truncate(1); - //self.cursors[0].range.0 = self.buffer.v2d_to_index((v, self.cursors[0].vis_start), (Floor, Floor)); - //self.cursors[0].range.1 = self.cursors[0].range.0; - // - //// Adjust view - //self.move_view_to_cursor(); + // Adjust view + self.move_view_to_cursor(); } } diff --git a/src/formatter.rs b/src/formatter.rs index 00ca32b..3f1a90c 100644 --- a/src/formatter.rs +++ b/src/formatter.rs @@ -83,9 +83,7 @@ pub trait LineFormatter { // Next, convert the resulting coordinates back into buffer-wide // coordinates. col_i = self.v2d_to_index(line, (y, x), rounding); - //if col_i >= line.grapheme_count() && line.grapheme_count() > 0 { - // col_i = line.grapheme_count() - 1; - //} + return buf.line_col_to_index((line_i, col_i)); } @@ -95,7 +93,10 @@ pub trait LineFormatter { let line = buf.get_line(line_i); let (v, _) = self.index_to_v2d(line, col_i); - let new_col_i = self.v2d_to_index(line, (v, horizontal), (RoundingBehavior::Floor, rounding)); + let mut new_col_i = self.v2d_to_index(line, (v, horizontal), (RoundingBehavior::Floor, rounding)); + if new_col_i >= line.grapheme_count() && line.grapheme_count() > 0 { + new_col_i = line.grapheme_count() - 1; + } return (index + new_col_i) - col_i; }