Merge pull request #69642 from dalexeev/text-edit-fix-highlight-overlaps
Fix highlight overlaps in TextEdit
This commit is contained in:
commit
9cc1e9cbd0
1 changed files with 11 additions and 8 deletions
|
@ -1108,8 +1108,9 @@ void TextEdit::_notification(int p_what) {
|
|||
int start = TS->shaped_text_get_range(rid).x;
|
||||
if (!clipped && !search_text.is_empty()) { // Search highhlight
|
||||
int search_text_col = _get_column_pos_of_word(search_text, str, search_flags, 0);
|
||||
int search_text_len = search_text.length();
|
||||
while (search_text_col != -1) {
|
||||
Vector<Vector2> sel = TS->shaped_text_get_selection(rid, search_text_col + start, search_text_col + search_text.length() + start);
|
||||
Vector<Vector2> sel = TS->shaped_text_get_selection(rid, search_text_col + start, search_text_col + search_text_len + start);
|
||||
for (int j = 0; j < sel.size(); j++) {
|
||||
Rect2 rect = Rect2(sel[j].x + char_margin + ofs_x, ofs_y, sel[j].y - sel[j].x, row_height);
|
||||
if (rect.position.x + rect.size.x <= xmargin_beg || rect.position.x > xmargin_end) {
|
||||
|
@ -1125,14 +1126,15 @@ void TextEdit::_notification(int p_what) {
|
|||
draw_rect(rect, search_result_border_color, false);
|
||||
}
|
||||
|
||||
search_text_col = _get_column_pos_of_word(search_text, str, search_flags, search_text_col + 1);
|
||||
search_text_col = _get_column_pos_of_word(search_text, str, search_flags, search_text_col + search_text_len);
|
||||
}
|
||||
}
|
||||
|
||||
if (!clipped && highlight_all_occurrences && !only_whitespaces_highlighted && !highlighted_text.is_empty()) { // Highlight
|
||||
int highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, SEARCH_MATCH_CASE | SEARCH_WHOLE_WORDS, 0);
|
||||
int highlighted_text_len = highlighted_text.length();
|
||||
while (highlighted_text_col != -1) {
|
||||
Vector<Vector2> sel = TS->shaped_text_get_selection(rid, highlighted_text_col + start, highlighted_text_col + highlighted_text.length() + start);
|
||||
Vector<Vector2> sel = TS->shaped_text_get_selection(rid, highlighted_text_col + start, highlighted_text_col + highlighted_text_len + start);
|
||||
for (int j = 0; j < sel.size(); j++) {
|
||||
Rect2 rect = Rect2(sel[j].x + char_margin + ofs_x, ofs_y, sel[j].y - sel[j].x, row_height);
|
||||
if (rect.position.x + rect.size.x <= xmargin_beg || rect.position.x > xmargin_end) {
|
||||
|
@ -1147,15 +1149,16 @@ void TextEdit::_notification(int p_what) {
|
|||
draw_rect(rect, word_highlighted_color);
|
||||
}
|
||||
|
||||
highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, SEARCH_MATCH_CASE | SEARCH_WHOLE_WORDS, highlighted_text_col + 1);
|
||||
highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, SEARCH_MATCH_CASE | SEARCH_WHOLE_WORDS, highlighted_text_col + highlighted_text_len);
|
||||
}
|
||||
}
|
||||
|
||||
if (!clipped && lookup_symbol_word.length() != 0) { // Highlight word
|
||||
if (is_ascii_char(lookup_symbol_word[0]) || lookup_symbol_word[0] == '_' || lookup_symbol_word[0] == '.') {
|
||||
int highlighted_word_col = _get_column_pos_of_word(lookup_symbol_word, str, SEARCH_MATCH_CASE | SEARCH_WHOLE_WORDS, 0);
|
||||
while (highlighted_word_col != -1) {
|
||||
Vector<Vector2> sel = TS->shaped_text_get_selection(rid, highlighted_word_col + start, highlighted_word_col + lookup_symbol_word.length() + start);
|
||||
int lookup_symbol_word_col = _get_column_pos_of_word(lookup_symbol_word, str, SEARCH_MATCH_CASE | SEARCH_WHOLE_WORDS, 0);
|
||||
int lookup_symbol_word_len = lookup_symbol_word.length();
|
||||
while (lookup_symbol_word_col != -1) {
|
||||
Vector<Vector2> sel = TS->shaped_text_get_selection(rid, lookup_symbol_word_col + start, lookup_symbol_word_col + lookup_symbol_word_len + start);
|
||||
for (int j = 0; j < sel.size(); j++) {
|
||||
Rect2 rect = Rect2(sel[j].x + char_margin + ofs_x, ofs_y + (line_spacing / 2), sel[j].y - sel[j].x, row_height);
|
||||
if (rect.position.x + rect.size.x <= xmargin_beg || rect.position.x > xmargin_end) {
|
||||
|
@ -1172,7 +1175,7 @@ void TextEdit::_notification(int p_what) {
|
|||
draw_rect(rect, color);
|
||||
}
|
||||
|
||||
highlighted_word_col = _get_column_pos_of_word(lookup_symbol_word, str, SEARCH_MATCH_CASE | SEARCH_WHOLE_WORDS, highlighted_word_col + 1);
|
||||
lookup_symbol_word_col = _get_column_pos_of_word(lookup_symbol_word, str, SEARCH_MATCH_CASE | SEARCH_WHOLE_WORDS, lookup_symbol_word_col + lookup_symbol_word_len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue