summaryrefslogtreecommitdiffstats
path: root/scene/gui/line_edit.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-08-18 17:24:54 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-08-18 17:24:54 +0200
commitb51ee8b029b0b9f719f01bbdd21a329e65d4d238 (patch)
tree52e79f7d4582023148fe24a494606e4792e419fa /scene/gui/line_edit.cpp
parenta2a1ed1aac1cd7caa418a0a35a936f289b886a41 (diff)
parent5d3fcc57669c4104a85c79327f7c2662a0d191a3 (diff)
downloadredot-engine-b51ee8b029b0b9f719f01bbdd21a329e65d4d238.tar.gz
Merge pull request #80650 from bruvzg/comp_char_fix
[TextServer] Fix system font fallback and caret/selection behavior for composite characters.
Diffstat (limited to 'scene/gui/line_edit.cpp')
-rw-r--r--scene/gui/line_edit.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp
index 42ee6cb0bc..956e93466c 100644
--- a/scene/gui/line_edit.cpp
+++ b/scene/gui/line_edit.cpp
@@ -79,7 +79,7 @@ void LineEdit::_move_caret_left(bool p_select, bool p_move_by_word) {
if (caret_mid_grapheme_enabled) {
set_caret_column(get_caret_column() - 1);
} else {
- set_caret_column(TS->shaped_text_prev_grapheme_pos(text_rid, get_caret_column()));
+ set_caret_column(TS->shaped_text_prev_character_pos(text_rid, get_caret_column()));
}
}
@@ -112,7 +112,7 @@ void LineEdit::_move_caret_right(bool p_select, bool p_move_by_word) {
if (caret_mid_grapheme_enabled) {
set_caret_column(get_caret_column() + 1);
} else {
- set_caret_column(TS->shaped_text_next_grapheme_pos(text_rid, get_caret_column()));
+ set_caret_column(TS->shaped_text_next_character_pos(text_rid, get_caret_column()));
}
}
@@ -211,7 +211,7 @@ void LineEdit::_delete(bool p_word, bool p_all_to_right) {
delete_char();
} else {
int cc = caret_column;
- set_caret_column(TS->shaped_text_next_grapheme_pos(text_rid, caret_column));
+ set_caret_column(TS->shaped_text_next_character_pos(text_rid, caret_column));
delete_text(cc, caret_column);
}
}
@@ -1326,6 +1326,9 @@ void LineEdit::set_caret_at_pixel_pos(int p_x) {
}
int ofs = ceil(TS->shaped_text_hit_test_position(text_rid, p_x - x_ofs - scroll_offset));
+ if (!caret_mid_grapheme_enabled) {
+ ofs = TS->shaped_text_closest_character_pos(text_rid, ofs);
+ }
set_caret_column(ofs);
}