LineEdit: Now double click to select a word, and triple click to select all the content

(cherry picked from commit 74b3021691)
This commit is contained in:
Mateo Kuruk Miccino 2021-02-28 17:41:11 -03:00 committed by Rémi Verschelde
parent 508cd0bb12
commit 3c089f6a4f
No known key found for this signature in database
GPG Key ID: C3336907360768E1
2 changed files with 29 additions and 6 deletions

View File

@ -88,12 +88,34 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) {
} else {
if (b->is_doubleclick() && selecting_enabled) {
selection.enabled = true;
selection.begin = 0;
selection.end = text.length();
selection.doubleclick = true;
if (selecting_enabled) {
if (!b->is_doubleclick() && (OS::get_singleton()->get_ticks_msec() - selection.last_dblclk) < 600) {
// Triple-click select all.
selection.enabled = true;
selection.begin = 0;
selection.end = text.length();
selection.doubleclick = true;
selection.last_dblclk = 0;
} else if (b->is_doubleclick()) {
// Double-click select word.
selection.enabled = true;
int beg = cursor_pos;
int end = beg;
bool symbol = beg < text.length() && is_symbol(text[beg]);
while (beg > 0 && text[beg - 1] > 32 && (symbol == is_symbol(text[beg - 1]))) {
beg--;
}
while (end < text.length() && text[end + 1] > 32 && (symbol == is_symbol(text[end + 1]))) {
end++;
}
if (end < text.length()) {
end += 1;
}
selection.begin = beg;
selection.end = end;
selection.doubleclick = true;
selection.last_dblclk = OS::get_singleton()->get_ticks_msec();
}
}
selection.drag_attempt = false;

View File

@ -104,6 +104,7 @@ private:
bool creating;
bool doubleclick;
bool drag_attempt;
uint64_t last_dblclk = 0;
} selection;
struct TextOperation {