Browse Source

FIX: Tabs text translation

ternvein 6 years ago
parent
commit
118940e7c5
2 changed files with 11 additions and 5 deletions
  1. 10 5
      scene/gui/tabs.cpp
  2. 1 0
      scene/gui/tabs.h

+ 10 - 5
scene/gui/tabs.cpp

@@ -53,7 +53,7 @@ Size2 Tabs::get_minimum_size() const {
 				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)
 			ms.width += tab_disabled->get_minimum_size().width;
@@ -223,6 +223,9 @@ void Tabs::_notification(int p_what) {
 	switch (p_what) {
 
 		case NOTIFICATION_TRANSLATION_CHANGED: {
+			for (int i = 0; i < tabs.size(); ++i) {
+				tabs.write[i].xl_text = tr(tabs[i].text);
+			}
 			minimum_size_changed();
 			update();
 		} break;
@@ -318,7 +321,7 @@ void Tabs::_notification(int p_what) {
 						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;
 
@@ -435,6 +438,7 @@ void Tabs::set_tab_title(int p_tab, const String &p_title) {
 
 	ERR_FAIL_INDEX(p_tab, tabs.size());
 	tabs.write[p_tab].text = p_title;
+	tabs.write[p_tab].xl_text = tr(p_title);
 	update();
 	minimum_size_changed();
 }
@@ -543,7 +547,7 @@ void Tabs::_update_cache() {
 	for (int i = 0; i < tabs.size(); i++) {
 		tabs.write[i].ofs_cache = mw;
 		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;
 		if (tabs[i].size_cache <= min_width || i == current) {
 			size_fixed += tabs[i].size_cache;
@@ -604,6 +608,7 @@ void Tabs::add_tab(const String &p_str, const Ref<Texture> &p_icon) {
 
 	Tab t;
 	t.text = p_str;
+	t.xl_text = tr(p_str);
 	t.icon = p_icon;
 	t.disabled = false;
 	t.ofs_cache = 0;
@@ -659,7 +664,7 @@ Variant Tabs::get_drag_data(const Point2 &p_point) {
 		tf->set_texture(tabs[tab_over].icon);
 		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);
 	if (!tabs[tab_over].right_button.is_null()) {
 		TextureRect *tf = memnew(TextureRect);
@@ -808,7 +813,7 @@ int Tabs::get_tab_width(int p_idx) const {
 			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)
 		x += tab_disabled->get_minimum_size().width;

+ 1 - 0
scene/gui/tabs.h

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