Fix TextEdit autoscroll with wrapped lines
Index to find the last line wrap index was off by one, which prevented the first wrapped line to trigger autoscroll.
(cherry picked from commit 121030940c
)
This commit is contained in:
parent
6c6f4e9895
commit
ac9e5d9c60
2 changed files with 11 additions and 13 deletions
|
@ -558,7 +558,7 @@ void TextEdit::_update_minimap_click() {
|
|||
int row;
|
||||
_get_minimap_mouse_row(Point2i(mp.x, mp.y), row);
|
||||
|
||||
if (row >= get_first_visible_line() && (row < get_last_visible_line() || row >= (text.size() - 1))) {
|
||||
if (row >= get_first_visible_line() && (row < get_last_full_visible_line() || row >= (text.size() - 1))) {
|
||||
minimap_scroll_ratio = v_scroll->get_as_ratio();
|
||||
minimap_scroll_click_pos = mp.y;
|
||||
can_drag_minimap = true;
|
||||
|
@ -3940,8 +3940,8 @@ void TextEdit::_scroll_lines_up() {
|
|||
if (!selection.active) {
|
||||
int cur_line = cursor.line;
|
||||
int cur_wrap = get_cursor_wrap_index();
|
||||
int last_vis_line = get_last_visible_line();
|
||||
int last_vis_wrap = get_last_visible_line_wrap_index();
|
||||
int last_vis_line = get_last_full_visible_line();
|
||||
int last_vis_wrap = get_last_full_visible_line_wrap_index();
|
||||
|
||||
if (cur_line > last_vis_line || (cur_line == last_vis_line && cur_wrap > last_vis_wrap)) {
|
||||
cursor_set_line(last_vis_line, false, false, last_vis_wrap);
|
||||
|
@ -4340,8 +4340,8 @@ void TextEdit::adjust_viewport_to_cursor() {
|
|||
|
||||
int first_vis_line = get_first_visible_line();
|
||||
int first_vis_wrap = cursor.wrap_ofs;
|
||||
int last_vis_line = get_last_visible_line();
|
||||
int last_vis_wrap = get_last_visible_line_wrap_index();
|
||||
int last_vis_line = get_last_full_visible_line();
|
||||
int last_vis_wrap = get_last_full_visible_line_wrap_index();
|
||||
|
||||
if (cur_line < first_vis_line || (cur_line == first_vis_line && cur_wrap < first_vis_wrap)) {
|
||||
// Cursor is above screen.
|
||||
|
@ -6397,21 +6397,19 @@ int TextEdit::get_first_visible_line() const {
|
|||
return CLAMP(cursor.line_ofs, 0, text.size() - 1);
|
||||
}
|
||||
|
||||
int TextEdit::get_last_visible_line() const {
|
||||
|
||||
int TextEdit::get_last_full_visible_line() const {
|
||||
int first_vis_line = get_first_visible_line();
|
||||
int last_vis_line = 0;
|
||||
int wi;
|
||||
last_vis_line = first_vis_line + num_lines_from_rows(first_vis_line, cursor.wrap_ofs, get_visible_rows() + 1, wi) - 1;
|
||||
last_vis_line = first_vis_line + num_lines_from_rows(first_vis_line, cursor.wrap_ofs, get_visible_rows(), wi) - 1;
|
||||
last_vis_line = CLAMP(last_vis_line, 0, text.size() - 1);
|
||||
return last_vis_line;
|
||||
}
|
||||
|
||||
int TextEdit::get_last_visible_line_wrap_index() const {
|
||||
|
||||
int TextEdit::get_last_full_visible_line_wrap_index() const {
|
||||
int first_vis_line = get_first_visible_line();
|
||||
int wi;
|
||||
num_lines_from_rows(first_vis_line, cursor.wrap_ofs, get_visible_rows() + 1, wi);
|
||||
num_lines_from_rows(first_vis_line, cursor.wrap_ofs, get_visible_rows(), wi);
|
||||
return wi;
|
||||
}
|
||||
|
||||
|
|
|
@ -460,8 +460,8 @@ private:
|
|||
void set_line_as_center_visible(int p_line, int p_wrap_index = 0);
|
||||
void set_line_as_last_visible(int p_line, int p_wrap_index = 0);
|
||||
int get_first_visible_line() const;
|
||||
int get_last_visible_line() const;
|
||||
int get_last_visible_line_wrap_index() const;
|
||||
int get_last_full_visible_line() const;
|
||||
int get_last_full_visible_line_wrap_index() const;
|
||||
double get_visible_rows_offset() const;
|
||||
double get_v_scroll_offset() const;
|
||||
|
||||
|
|
Loading…
Reference in a new issue