Fix selection rendering, it would be off by 1 if reverse.

imgbot
Blaž Hrastnik 4 years ago
parent 63e602bda6
commit e8298a398c

@ -128,8 +128,7 @@ pub fn move_prev_word_start(slice: RopeSlice, mut begin: usize, count: usize) ->
} }
} }
// we want to include begin Some(Range::new(begin, if with_end { end } else { end + 1 }))
Some(Range::new(begin + 1, if with_end { end } else { end + 1 }))
} }
pub fn move_next_word_end(slice: RopeSlice, mut begin: usize, count: usize) -> Option<Range> { pub fn move_next_word_end(slice: RopeSlice, mut begin: usize, count: usize) -> Option<Range> {

@ -233,19 +233,8 @@ impl EditorView {
// TODO: render also if only one of the ranges is in viewport // TODO: render also if only one of the ranges is in viewport
let mut start = view.screen_coords_at_pos(doc, text, selection.anchor); let mut start = view.screen_coords_at_pos(doc, text, selection.anchor);
let mut end = view.screen_coords_at_pos(doc, text, selection.head); let mut end = view.screen_coords_at_pos(doc, text, selection.head);
// cursor let head = end;
if let Some(end) = end {
surface.set_style(
Rect::new(
viewport.x + end.col as u16,
viewport.y + end.row as u16,
1,
1,
),
cursor_style,
);
}
if selection.head < selection.anchor { if selection.head < selection.anchor {
std::mem::swap(&mut start, &mut end); std::mem::swap(&mut start, &mut end);
@ -260,7 +249,7 @@ impl EditorView {
Rect::new( Rect::new(
viewport.x + start.col as u16, viewport.x + start.col as u16,
viewport.y + start.row as u16, viewport.y + start.row as u16,
(end.col - start.col) as u16, (end.col - start.col) as u16 + 1,
1, 1,
), ),
selection_style, selection_style,
@ -293,6 +282,19 @@ impl EditorView {
selection_style, selection_style,
); );
} }
// cursor
if let Some(head) = head {
surface.set_style(
Rect::new(
viewport.x + head.col as u16,
viewport.y + head.row as u16,
1,
1,
),
cursor_style,
);
}
} }
} }

Loading…
Cancel
Save