FIX: Tabs text translation

(cherry picked from commit 118940e7c5)
This commit is contained in:
ternvein 2019-09-30 13:56:20 +04:00 committed by Rémi Verschelde
parent 5d1697b78f
commit 82f65f5b92
2 changed files with 11 additions and 5 deletions

View File

@ -53,7 +53,7 @@ Size2 Tabs::get_minimum_size() const {
ms.width += get_constant("hseparation"); ms.width += get_constant("hseparation");
} }
ms.width += Math::ceil(font->get_string_size(tabs[i].text).width); ms.width += Math::ceil(font->get_string_size(tabs[i].xl_text).width);
if (tabs[i].disabled) if (tabs[i].disabled)
ms.width += tab_disabled->get_minimum_size().width; ms.width += tab_disabled->get_minimum_size().width;
@ -223,6 +223,9 @@ void Tabs::_notification(int p_what) {
switch (p_what) { switch (p_what) {
case NOTIFICATION_TRANSLATION_CHANGED: { case NOTIFICATION_TRANSLATION_CHANGED: {
for (int i = 0; i < tabs.size(); ++i) {
tabs.write[i].xl_text = tr(tabs[i].text);
}
minimum_size_changed(); minimum_size_changed();
update(); update();
} break; } break;
@ -324,7 +327,7 @@ void Tabs::_notification(int p_what) {
w += icon->get_width() + get_constant("hseparation"); w += icon->get_width() + get_constant("hseparation");
} }
font->draw(ci, Point2i(w, sb->get_margin(MARGIN_TOP) + ((sb_rect.size.y - sb_ms.y) - font->get_height()) / 2 + font->get_ascent()), tabs[i].text, col, tabs[i].size_text); font->draw(ci, Point2i(w, sb->get_margin(MARGIN_TOP) + ((sb_rect.size.y - sb_ms.y) - font->get_height()) / 2 + font->get_ascent()), tabs[i].xl_text, col, tabs[i].size_text);
w += tabs[i].size_text; w += tabs[i].size_text;
@ -441,6 +444,7 @@ void Tabs::set_tab_title(int p_tab, const String &p_title) {
ERR_FAIL_INDEX(p_tab, tabs.size()); ERR_FAIL_INDEX(p_tab, tabs.size());
tabs.write[p_tab].text = p_title; tabs.write[p_tab].text = p_title;
tabs.write[p_tab].xl_text = tr(p_title);
update(); update();
minimum_size_changed(); minimum_size_changed();
} }
@ -549,7 +553,7 @@ void Tabs::_update_cache() {
for (int i = 0; i < tabs.size(); i++) { for (int i = 0; i < tabs.size(); i++) {
tabs.write[i].ofs_cache = mw; tabs.write[i].ofs_cache = mw;
tabs.write[i].size_cache = get_tab_width(i); tabs.write[i].size_cache = get_tab_width(i);
tabs.write[i].size_text = Math::ceil(font->get_string_size(tabs[i].text).width); tabs.write[i].size_text = Math::ceil(font->get_string_size(tabs[i].xl_text).width);
mw += tabs[i].size_cache; mw += tabs[i].size_cache;
if (tabs[i].size_cache <= min_width || i == current) { if (tabs[i].size_cache <= min_width || i == current) {
size_fixed += tabs[i].size_cache; size_fixed += tabs[i].size_cache;
@ -601,6 +605,7 @@ void Tabs::add_tab(const String &p_str, const Ref<Texture> &p_icon) {
Tab t; Tab t;
t.text = p_str; t.text = p_str;
t.xl_text = tr(p_str);
t.icon = p_icon; t.icon = p_icon;
t.disabled = false; t.disabled = false;
t.ofs_cache = 0; t.ofs_cache = 0;
@ -656,7 +661,7 @@ Variant Tabs::get_drag_data(const Point2 &p_point) {
tf->set_texture(tabs[tab_over].icon); tf->set_texture(tabs[tab_over].icon);
drag_preview->add_child(tf); drag_preview->add_child(tf);
} }
Label *label = memnew(Label(tabs[tab_over].text)); Label *label = memnew(Label(tabs[tab_over].xl_text));
drag_preview->add_child(label); drag_preview->add_child(label);
if (!tabs[tab_over].right_button.is_null()) { if (!tabs[tab_over].right_button.is_null()) {
TextureRect *tf = memnew(TextureRect); TextureRect *tf = memnew(TextureRect);
@ -805,7 +810,7 @@ int Tabs::get_tab_width(int p_idx) const {
x += get_constant("hseparation"); x += get_constant("hseparation");
} }
x += Math::ceil(font->get_string_size(tabs[p_idx].text).width); x += Math::ceil(font->get_string_size(tabs[p_idx].xl_text).width);
if (tabs[p_idx].disabled) if (tabs[p_idx].disabled)
x += tab_disabled->get_minimum_size().width; x += tab_disabled->get_minimum_size().width;

View File

@ -58,6 +58,7 @@ private:
struct Tab { struct Tab {
String text; String text;
String xl_text;
Ref<Texture> icon; Ref<Texture> icon;
int ofs_cache; int ofs_cache;
bool disabled; bool disabled;