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;
|
||||
_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;
|
||||
|
@ -3775,8 +3775,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);
|
||||
|
@ -4149,8 +4149,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.
|
||||
|
@ -6163,19 +6163,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;
|
||||
}
|
||||
|
||||
|
|
|
@ -373,8 +373,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