Update cached_width of the line_edit element when setting it to be secret
(cherry picked from commit 2e08578985
)
This commit is contained in:
parent
489b3c2949
commit
58a940e5aa
|
@ -240,15 +240,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) {
|
|||
|
||||
deselect();
|
||||
text = text.substr(cursor_pos, text.length() - cursor_pos);
|
||||
|
||||
Ref<Font> font = get_font("font");
|
||||
|
||||
cached_width = 0;
|
||||
if (font != NULL) {
|
||||
for (int i = 0; i < text.length(); i++)
|
||||
cached_width += font->get_char_size(text[i]).width;
|
||||
}
|
||||
|
||||
update_cached_width();
|
||||
set_cursor_position(0);
|
||||
_text_changed();
|
||||
}
|
||||
|
@ -1358,18 +1350,10 @@ void LineEdit::set_window_pos(int p_pos) {
|
|||
void LineEdit::append_at_cursor(String p_text) {
|
||||
|
||||
if ((max_length <= 0) || (text.length() + p_text.length() <= max_length)) {
|
||||
|
||||
Ref<Font> font = get_font("font");
|
||||
if (font != NULL) {
|
||||
for (int i = 0; i < p_text.length(); i++)
|
||||
cached_width += font->get_char_size(p_text[i]).width;
|
||||
} else {
|
||||
cached_width = 0;
|
||||
}
|
||||
|
||||
String pre = text.substr(0, cursor_pos);
|
||||
String post = text.substr(cursor_pos, text.length() - cursor_pos);
|
||||
text = pre + p_text + post;
|
||||
update_cached_width();
|
||||
set_cursor_position(cursor_pos + p_text.length());
|
||||
} else {
|
||||
emit_signal("text_change_rejected");
|
||||
|
@ -1499,6 +1483,7 @@ bool LineEdit::is_editable() const {
|
|||
void LineEdit::set_secret(bool p_secret) {
|
||||
|
||||
pass = p_secret;
|
||||
update_cached_width();
|
||||
update();
|
||||
}
|
||||
|
||||
|
@ -1514,6 +1499,7 @@ void LineEdit::set_secret_character(const String &p_string) {
|
|||
ERR_FAIL_COND_MSG(p_string.length() != 1, "Secret character must be exactly one character long (" + itos(p_string.length()) + " characters given).");
|
||||
|
||||
secret_character = p_string;
|
||||
update_cached_width();
|
||||
update();
|
||||
}
|
||||
|
||||
|
@ -1685,6 +1671,17 @@ void LineEdit::_emit_text_change() {
|
|||
text_changed_dirty = false;
|
||||
}
|
||||
|
||||
void LineEdit::update_cached_width() {
|
||||
Ref<Font> font = get_font("font");
|
||||
cached_width = 0;
|
||||
if (font != NULL) {
|
||||
String text = get_text();
|
||||
for (int i = 0; i < text.length(); i++) {
|
||||
cached_width += font->get_char_size(pass ? secret_character[0] : text[i]).width;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LineEdit::update_placeholder_width() {
|
||||
if ((max_length <= 0) || (placeholder_translated.length() <= max_length)) {
|
||||
Ref<Font> font = get_font("font");
|
||||
|
|
|
@ -132,6 +132,7 @@ private:
|
|||
void _emit_text_change();
|
||||
bool expand_to_text_length;
|
||||
|
||||
void update_cached_width();
|
||||
void update_placeholder_width();
|
||||
|
||||
bool caret_blink_enabled;
|
||||
|
|
Loading…
Reference in New Issue