Merge pull request #45881 from nekomatata/textedit-wrap-autoscroll
Fix TextEdit autoscroll with wrapped lines
This commit is contained in:
commit
48e7cced9f
|
@ -500,7 +500,7 @@ void TextEdit::_update_minimap_click() {
|
||||||
int row;
|
int row;
|
||||||
_get_minimap_mouse_row(Point2i(mp.x, mp.y), 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_ratio = v_scroll->get_as_ratio();
|
||||||
minimap_scroll_click_pos = mp.y;
|
minimap_scroll_click_pos = mp.y;
|
||||||
can_drag_minimap = true;
|
can_drag_minimap = true;
|
||||||
|
@ -3775,8 +3775,8 @@ void TextEdit::_scroll_lines_up() {
|
||||||
if (!selection.active) {
|
if (!selection.active) {
|
||||||
int cur_line = cursor.line;
|
int cur_line = cursor.line;
|
||||||
int cur_wrap = get_cursor_wrap_index();
|
int cur_wrap = get_cursor_wrap_index();
|
||||||
int last_vis_line = get_last_visible_line();
|
int last_vis_line = get_last_full_visible_line();
|
||||||
int last_vis_wrap = get_last_visible_line_wrap_index();
|
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)) {
|
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);
|
cursor_set_line(last_vis_line, false, false, last_vis_wrap);
|
||||||
|
@ -4149,8 +4149,8 @@ void TextEdit::adjust_viewport_to_cursor() {
|
||||||
|
|
||||||
int first_vis_line = get_first_visible_line();
|
int first_vis_line = get_first_visible_line();
|
||||||
int first_vis_wrap = cursor.wrap_ofs;
|
int first_vis_wrap = cursor.wrap_ofs;
|
||||||
int last_vis_line = get_last_visible_line();
|
int last_vis_line = get_last_full_visible_line();
|
||||||
int last_vis_wrap = get_last_visible_line_wrap_index();
|
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)) {
|
if (cur_line < first_vis_line || (cur_line == first_vis_line && cur_wrap < first_vis_wrap)) {
|
||||||
// Cursor is above screen.
|
// Cursor is above screen.
|
||||||
|
@ -6163,19 +6163,19 @@ int TextEdit::get_first_visible_line() const {
|
||||||
return CLAMP(cursor.line_ofs, 0, text.size() - 1);
|
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 first_vis_line = get_first_visible_line();
|
||||||
int last_vis_line = 0;
|
int last_vis_line = 0;
|
||||||
int wi;
|
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);
|
last_vis_line = CLAMP(last_vis_line, 0, text.size() - 1);
|
||||||
return last_vis_line;
|
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 first_vis_line = get_first_visible_line();
|
||||||
int wi;
|
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;
|
return wi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -373,8 +373,8 @@ private:
|
||||||
void set_line_as_center_visible(int p_line, int p_wrap_index = 0);
|
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);
|
void set_line_as_last_visible(int p_line, int p_wrap_index = 0);
|
||||||
int get_first_visible_line() const;
|
int get_first_visible_line() const;
|
||||||
int get_last_visible_line() const;
|
int get_last_full_visible_line() const;
|
||||||
int get_last_visible_line_wrap_index() const;
|
int get_last_full_visible_line_wrap_index() const;
|
||||||
double get_visible_rows_offset() const;
|
double get_visible_rows_offset() const;
|
||||||
double get_v_scroll_offset() const;
|
double get_v_scroll_offset() const;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue