[Line Edit] Ignore placeholder text when drawing caret.

This commit is contained in:
bruvzg 2022-11-08 15:15:13 +02:00
parent a499f7bdc4
commit c624b1eeac
No known key found for this signature in database
GPG Key ID: 7960FCF39844EC38
1 changed files with 21 additions and 8 deletions

View File

@ -960,17 +960,30 @@ void LineEdit::_notification(int p_what) {
if (ime_text.length() == 0) { if (ime_text.length() == 0) {
// Normal caret. // Normal caret.
CaretInfo caret = TS->shaped_text_get_carets(text_rid, caret_column); CaretInfo caret = TS->shaped_text_get_carets(text_rid, caret_column);
if (using_placeholder || (caret.l_caret == Rect2() && caret.t_caret == Rect2())) {
if (caret.l_caret == Rect2() && caret.t_caret == Rect2()) {
// No carets, add one at the start. // No carets, add one at the start.
int h = theme_cache.font->get_height(theme_cache.font_size); int h = theme_cache.font->get_height(theme_cache.font_size);
int y = style->get_offset().y + (y_area - h) / 2; int y = style->get_offset().y + (y_area - h) / 2;
if (rtl) { caret.l_dir = (rtl) ? TextServer::DIRECTION_RTL : TextServer::DIRECTION_LTR;
caret.l_dir = TextServer::DIRECTION_RTL; switch (alignment) {
caret.l_caret = Rect2(Vector2(ofs_max, y), Size2(caret_width, h)); case HORIZONTAL_ALIGNMENT_FILL:
} else { case HORIZONTAL_ALIGNMENT_LEFT: {
caret.l_dir = TextServer::DIRECTION_LTR; if (rtl) {
caret.l_caret = Rect2(Vector2(x_ofs, y), Size2(caret_width, h)); caret.l_caret = Rect2(Vector2(ofs_max, y), Size2(caret_width, h));
} else {
caret.l_caret = Rect2(Vector2(style->get_offset().x, y), Size2(caret_width, h));
}
} break;
case HORIZONTAL_ALIGNMENT_CENTER: {
caret.l_caret = Rect2(Vector2(size.x / 2, y), Size2(caret_width, h));
} break;
case HORIZONTAL_ALIGNMENT_RIGHT: {
if (rtl) {
caret.l_caret = Rect2(Vector2(style->get_offset().x, y), Size2(caret_width, h));
} else {
caret.l_caret = Rect2(Vector2(ofs_max, y), Size2(caret_width, h));
}
} break;
} }
RenderingServer::get_singleton()->canvas_item_add_rect(ci, caret.l_caret, caret_color); RenderingServer::get_singleton()->canvas_item_add_rect(ci, caret.l_caret, caret_color);
} else { } else {