diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 6afdb08533..a98e8abca9 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -706,6 +706,11 @@ void TextEdit::_notification(int p_what) { text.update_accessibility(i, ae); const Ref &ac_buf = text.get_line_data(i); const Vector &text_aes = text.get_accessibility_elements(i); + int first_indent_line = 0; + if (text.is_indent_wrapped_lines()) { + _get_wrapped_indent_level(i, first_indent_line); + } + float indent_ofs = MIN(text.get_indent_offset(i, rtl), wrap_at_column * 0.6); for (int j = 0; j < text_aes.size(); j++) { float text_off_x = 0.0; float text_off_y = 0.0; @@ -721,9 +726,12 @@ void TextEdit::_notification(int p_what) { text_off_y -= (first_vis_line + first_visible_line_wrap_ofs) * row_height; text_off_y -= _get_v_scroll_offset() * row_height; + float wrap_indent = j > first_indent_line ? indent_ofs : 0.0; int char_margin = xmargin_beg - first_visible_col; if (rtl) { - char_margin = size.width - char_margin - ac_buf->get_line_width(j); + char_margin = size.width - char_margin - ac_buf->get_line_width(j) - wrap_indent; + } else { + char_margin += wrap_indent; } DisplayServer::get_singleton()->accessibility_update_set_flag(text_aes[j], DisplayServer::AccessibilityFlags::FLAG_HIDDEN, _is_line_hidden(i)); @@ -1419,7 +1427,7 @@ void TextEdit::_notification(int p_what) { float wrap_indent = line_wrap_index > first_indent_line ? indent_ofs : 0.0; if (rtl) { - char_margin = size.width - char_margin - (TS->shaped_text_get_size(rid).x + wrap_indent); + char_margin = size.width - char_margin - TS->shaped_text_get_size(rid).x - wrap_indent; } else { char_margin += wrap_indent; } @@ -1682,7 +1690,7 @@ void TextEdit::_notification(int p_what) { int h = theme_cache.font->get_height(theme_cache.font_size); if (rtl) { ts_caret.l_dir = TextServer::DIRECTION_RTL; - ts_caret.l_caret = Rect2(Vector2(xmargin_end - char_margin + ofs_x, -h / 2), Size2(caret_width * 4, h)); + ts_caret.l_caret = Rect2(Vector2(TS->shaped_text_get_size(rid).x, -h / 2), Size2(caret_width * 4, h)); } else { ts_caret.l_dir = TextServer::DIRECTION_LTR; ts_caret.l_caret = Rect2(Vector2(char_ofs, -h / 2), Size2(caret_width * 4, h)); @@ -1695,7 +1703,7 @@ void TextEdit::_notification(int p_what) { carets.write[c].draw_pos.x = char_margin + ofs_x + ts_caret.t_caret.position.x; } - if (get_caret_draw_pos(c).x >= xmargin_beg && get_caret_draw_pos(c).x < xmargin_end) { + if (get_caret_draw_pos(c).x >= xmargin_beg && get_caret_draw_pos(c).x <= xmargin_end) { carets.write[c].visible = true; if (draw_caret || drag_caret_force_displayed) { if (caret_type == CaretType::CARET_TYPE_BLOCK || overtype_mode) {