Fixed minor bug in cursor navigation.
This commit is contained in:
parent
76bd98e5ae
commit
29b17f6e20
|
@ -571,31 +571,34 @@ impl<T: LineFormatter> Editor<T> {
|
||||||
pub fn cursor_up(&mut self, n: usize) {
|
pub fn cursor_up(&mut self, n: usize) {
|
||||||
for c in self.cursors.iter_mut() {
|
for c in self.cursors.iter_mut() {
|
||||||
let vmove = -1 * (n * self.formatter.single_line_height()) as isize;
|
let vmove = -1 * (n * self.formatter.single_line_height()) as isize;
|
||||||
|
|
||||||
let mut temp_index = self.formatter.index_offset_vertical_v2d(
|
let mut temp_index = self.formatter.index_offset_vertical_v2d(
|
||||||
&self.buffer,
|
&self.buffer,
|
||||||
c.range.0,
|
c.range.0,
|
||||||
vmove,
|
vmove,
|
||||||
(Round, Round),
|
(Round, Round),
|
||||||
);
|
);
|
||||||
|
|
||||||
if temp_index == 0 {
|
|
||||||
c.update_vis_start(&(self.buffer), &(self.formatter));
|
|
||||||
} else {
|
|
||||||
temp_index = self.formatter.index_set_horizontal_v2d(
|
temp_index = self.formatter.index_set_horizontal_v2d(
|
||||||
&self.buffer,
|
&self.buffer,
|
||||||
temp_index,
|
temp_index,
|
||||||
c.vis_start,
|
c.vis_start,
|
||||||
Round,
|
Round,
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
if !self.buffer.is_grapheme(temp_index) {
|
if !self.buffer.is_grapheme(temp_index) {
|
||||||
temp_index = self.buffer.nth_prev_grapheme(temp_index, 1);
|
temp_index = self.buffer.nth_prev_grapheme(temp_index, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if temp_index == c.range.0 {
|
||||||
|
// We were already at the top.
|
||||||
|
c.range.0 = 0;
|
||||||
|
c.range.1 = 0;
|
||||||
|
c.update_vis_start(&(self.buffer), &(self.formatter));
|
||||||
|
} else {
|
||||||
c.range.0 = temp_index;
|
c.range.0 = temp_index;
|
||||||
c.range.1 = temp_index;
|
c.range.1 = temp_index;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Adjust view
|
// Adjust view
|
||||||
self.move_view_to_cursor();
|
self.move_view_to_cursor();
|
||||||
|
@ -604,31 +607,34 @@ impl<T: LineFormatter> Editor<T> {
|
||||||
pub fn cursor_down(&mut self, n: usize) {
|
pub fn cursor_down(&mut self, n: usize) {
|
||||||
for c in self.cursors.iter_mut() {
|
for c in self.cursors.iter_mut() {
|
||||||
let vmove = (n * self.formatter.single_line_height()) as isize;
|
let vmove = (n * self.formatter.single_line_height()) as isize;
|
||||||
|
|
||||||
let mut temp_index = self.formatter.index_offset_vertical_v2d(
|
let mut temp_index = self.formatter.index_offset_vertical_v2d(
|
||||||
&self.buffer,
|
&self.buffer,
|
||||||
c.range.0,
|
c.range.0,
|
||||||
vmove,
|
vmove,
|
||||||
(Round, Round),
|
(Round, Round),
|
||||||
);
|
);
|
||||||
|
|
||||||
if temp_index == self.buffer.char_count() {
|
|
||||||
c.update_vis_start(&(self.buffer), &(self.formatter));
|
|
||||||
} else {
|
|
||||||
temp_index = self.formatter.index_set_horizontal_v2d(
|
temp_index = self.formatter.index_set_horizontal_v2d(
|
||||||
&self.buffer,
|
&self.buffer,
|
||||||
temp_index,
|
temp_index,
|
||||||
c.vis_start,
|
c.vis_start,
|
||||||
Round,
|
Round,
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
if !self.buffer.is_grapheme(temp_index) {
|
if !self.buffer.is_grapheme(temp_index) {
|
||||||
temp_index = self.buffer.nth_prev_grapheme(temp_index, 1);
|
temp_index = self.buffer.nth_prev_grapheme(temp_index, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if temp_index == c.range.0 {
|
||||||
|
// We were already at the bottom.
|
||||||
|
c.range.0 = self.buffer.char_count();
|
||||||
|
c.range.1 = self.buffer.char_count();
|
||||||
|
c.update_vis_start(&(self.buffer), &(self.formatter));
|
||||||
|
} else {
|
||||||
c.range.0 = temp_index;
|
c.range.0 = temp_index;
|
||||||
c.range.1 = temp_index;
|
c.range.1 = temp_index;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Adjust view
|
// Adjust view
|
||||||
self.move_view_to_cursor();
|
self.move_view_to_cursor();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user