LineEdit placeholder alignment, content margins, and overflow bugs
LineEdit doesn't correctly uses style margins nor use placeholders width correctly, causing multiple rendering bugs.
This commit is contained in:
parent
59cdc5eb9d
commit
53b51f68bf
|
@ -602,6 +602,7 @@ void LineEdit::_notification(int p_what) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int x_ofs = 0;
|
int x_ofs = 0;
|
||||||
|
int cached_text_width = text.empty() ? cached_placeholder_width : cached_width;
|
||||||
|
|
||||||
switch (align) {
|
switch (align) {
|
||||||
|
|
||||||
|
@ -615,15 +616,15 @@ void LineEdit::_notification(int p_what) {
|
||||||
if (window_pos != 0)
|
if (window_pos != 0)
|
||||||
x_ofs = style->get_offset().x;
|
x_ofs = style->get_offset().x;
|
||||||
else
|
else
|
||||||
x_ofs = int(size.width - (cached_width)) / 2;
|
x_ofs = MAX(style->get_margin(MARGIN_LEFT), int(size.width - (cached_text_width)) / 2);
|
||||||
} break;
|
} break;
|
||||||
case ALIGN_RIGHT: {
|
case ALIGN_RIGHT: {
|
||||||
|
|
||||||
x_ofs = int(size.width - style->get_offset().x - (cached_width));
|
x_ofs = MAX(style->get_margin(MARGIN_LEFT), int(size.width - style->get_margin(MARGIN_RIGHT) - (cached_text_width)));
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ofs_max = width - style->get_minimum_size().width;
|
int ofs_max = width - style->get_margin(MARGIN_RIGHT);
|
||||||
int char_ofs = window_pos;
|
int char_ofs = window_pos;
|
||||||
|
|
||||||
int y_area = height - style->get_minimum_size().height;
|
int y_area = height - style->get_minimum_size().height;
|
||||||
|
@ -881,7 +882,7 @@ void LineEdit::set_cursor_at_pixel_pos(int p_x) {
|
||||||
} break;
|
} break;
|
||||||
case ALIGN_RIGHT: {
|
case ALIGN_RIGHT: {
|
||||||
|
|
||||||
pixel_ofs = int(size.width - style->get_offset().x - (cached_width));
|
pixel_ofs = int(size.width - style->get_margin(MARGIN_RIGHT) - (cached_width));
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1014,6 +1015,15 @@ String LineEdit::get_text() const {
|
||||||
void LineEdit::set_placeholder(String p_text) {
|
void LineEdit::set_placeholder(String p_text) {
|
||||||
|
|
||||||
placeholder = tr(p_text);
|
placeholder = tr(p_text);
|
||||||
|
if ((max_length <= 0) || (placeholder.length() <= max_length)) {
|
||||||
|
Ref<Font> font = get_font("font");
|
||||||
|
cached_placeholder_width = 0;
|
||||||
|
if (font != NULL) {
|
||||||
|
for (int i = 0; i < placeholder.length(); i++) {
|
||||||
|
cached_placeholder_width += font->get_char_size(placeholder[i]).width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1127,6 +1137,7 @@ void LineEdit::clear_internal() {
|
||||||
|
|
||||||
_clear_undo_stack();
|
_clear_undo_stack();
|
||||||
cached_width = 0;
|
cached_width = 0;
|
||||||
|
cached_placeholder_width = 0;
|
||||||
cursor_pos = 0;
|
cursor_pos = 0;
|
||||||
window_pos = 0;
|
window_pos = 0;
|
||||||
undo_text = "";
|
undo_text = "";
|
||||||
|
@ -1468,6 +1479,7 @@ LineEdit::LineEdit() {
|
||||||
_create_undo_state();
|
_create_undo_state();
|
||||||
align = ALIGN_LEFT;
|
align = ALIGN_LEFT;
|
||||||
cached_width = 0;
|
cached_width = 0;
|
||||||
|
cached_placeholder_width = 0;
|
||||||
cursor_pos = 0;
|
cursor_pos = 0;
|
||||||
window_pos = 0;
|
window_pos = 0;
|
||||||
window_has_focus = true;
|
window_has_focus = true;
|
||||||
|
|
|
@ -84,6 +84,7 @@ private:
|
||||||
int max_length; // 0 for no maximum
|
int max_length; // 0 for no maximum
|
||||||
|
|
||||||
int cached_width;
|
int cached_width;
|
||||||
|
int cached_placeholder_width;
|
||||||
|
|
||||||
struct Selection {
|
struct Selection {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue