Skip to content

Commit 61bf8fa

Browse files
committed
Improve auto-translation of the rendering method selector
1 parent 48f361a commit 61bf8fa

File tree

2 files changed

+59
-50
lines changed

2 files changed

+59
-50
lines changed

editor/editor_node.cpp

Lines changed: 56 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,18 @@ void EditorNode::_notification(int p_what) {
766766
switch (p_what) {
767767
case NOTIFICATION_TRANSLATION_CHANGED: {
768768
callable_mp(this, &EditorNode::_titlebar_resized).call_deferred();
769+
770+
// The rendering method selector.
771+
const String current_renderer_ps = String(GLOBAL_GET("rendering/renderer/rendering_method")).to_lower();
772+
const String current_renderer_os = OS::get_singleton()->get_current_rendering_method().to_lower();
773+
if (current_renderer_ps == current_renderer_os) {
774+
for (int i = 0; i < renderer->get_item_count(); i++) {
775+
renderer->set_item_text(i, _to_rendering_method_display_name(renderer->get_item_metadata(i)));
776+
}
777+
} else {
778+
// TRANSLATORS: The placeholder is the rendering method that has overridden the default one.
779+
renderer->set_item_text(0, vformat(TTR("%s (Overridden)"), _to_rendering_method_display_name(current_renderer_os)));
780+
}
769781
} break;
770782

771783
case NOTIFICATION_POSTINITIALIZE: {
@@ -7049,49 +7061,60 @@ void EditorNode::_update_renderer_color() {
70497061
}
70507062
}
70517063

7052-
void EditorNode::_renderer_selected(int p_which) {
7053-
String rendering_method = renderer->get_item_metadata(p_which);
7054-
7055-
String current_renderer = GLOBAL_GET("rendering/renderer/rendering_method");
7056-
7064+
void EditorNode::_renderer_selected(int p_index) {
7065+
const String rendering_method = renderer->get_item_metadata(p_index);
7066+
const String current_renderer = GLOBAL_GET("rendering/renderer/rendering_method");
70577067
if (rendering_method == current_renderer) {
70587068
return;
70597069
}
70607070

7061-
renderer_request = rendering_method;
7071+
// Don't change selection.
7072+
for (int i = 0; i < renderer->get_item_count(); i++) {
7073+
if (renderer->get_item_metadata(i) == current_renderer) {
7074+
renderer->select(i);
7075+
break;
7076+
}
7077+
}
7078+
7079+
if (video_restart_dialog == nullptr) {
7080+
video_restart_dialog = memnew(ConfirmationDialog);
7081+
video_restart_dialog->set_ok_button_text(TTRC("Save & Restart"));
7082+
video_restart_dialog->get_label()->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED);
7083+
gui_base->add_child(video_restart_dialog);
7084+
} else {
7085+
video_restart_dialog->disconnect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_set_renderer_name_save_and_restart));
7086+
}
7087+
7088+
video_restart_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_set_renderer_name_save_and_restart).bind(rendering_method));
70627089
video_restart_dialog->set_text(
70637090
vformat(TTR("Changing the renderer requires restarting the editor.\n\nChoosing Save & Restart will change the rendering method to:\n- Desktop platforms: %s\n- Mobile platforms: %s\n- Web platform: gl_compatibility"),
7064-
renderer_request, renderer_request.replace("forward_plus", "mobile")));
7091+
rendering_method, rendering_method.replace("forward_plus", "mobile")));
70657092
video_restart_dialog->popup_centered();
7066-
renderer->select(renderer_current);
7093+
70677094
_update_renderer_color();
70687095
}
70697096

7070-
void EditorNode::_add_renderer_entry(const String &p_renderer_name, bool p_mark_overridden) {
7071-
String item_text;
7072-
if (p_renderer_name == "forward_plus") {
7073-
item_text = TTR("Forward+");
7074-
}
7075-
if (p_renderer_name == "mobile") {
7076-
item_text = TTR("Mobile");
7097+
String EditorNode::_to_rendering_method_display_name(const String &p_rendering_method) const {
7098+
if (p_rendering_method == "forward_plus") {
7099+
return TTR("Forward+");
70777100
}
7078-
if (p_renderer_name == "gl_compatibility") {
7079-
item_text = TTR("Compatibility");
7101+
if (p_rendering_method == "mobile") {
7102+
return TTR("Mobile");
70807103
}
7081-
if (p_mark_overridden) {
7082-
// TRANSLATORS: The placeholder is the rendering method that has overridden the default one.
7083-
item_text = vformat(TTR("%s (Overridden)"), item_text);
7104+
if (p_rendering_method == "gl_compatibility") {
7105+
return TTR("Compatibility");
70847106
}
7085-
renderer->add_item(item_text);
7107+
return p_rendering_method;
70867108
}
70877109

7088-
void EditorNode::_set_renderer_name_save_and_restart() {
7089-
ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method", renderer_request);
7090-
if (renderer_request == "mobile" || renderer_request == "gl_compatibility") {
7110+
void EditorNode::_set_renderer_name_save_and_restart(const String &p_rendering_method) {
7111+
ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method", p_rendering_method);
7112+
7113+
if (p_rendering_method == "mobile" || p_rendering_method == "gl_compatibility") {
70917114
// Also change the mobile override if changing to a compatible rendering method.
70927115
// This prevents visual discrepancies between desktop and mobile platforms.
7093-
ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method.mobile", renderer_request);
7094-
} else if (renderer_request == "forward_plus") {
7116+
ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method.mobile", p_rendering_method);
7117+
} else if (p_rendering_method == "forward_plus") {
70957118
// Use the equivalent mobile rendering method. This prevents the rendering method from staying
70967119
// on its old choice if moving from `gl_compatibility` to `forward_plus`.
70977120
ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method.mobile", "mobile");
@@ -8204,9 +8227,8 @@ EditorNode::EditorNode() {
82048227
title_bar->add_child(right_menu_spacer);
82058228
}
82068229

8207-
String current_renderer_ps = GLOBAL_GET("rendering/renderer/rendering_method");
8208-
current_renderer_ps = current_renderer_ps.to_lower();
8209-
String current_renderer_os = OS::get_singleton()->get_current_rendering_method().to_lower();
8230+
const String current_renderer_ps = String(GLOBAL_GET("rendering/renderer/rendering_method")).to_lower();
8231+
const String current_renderer_os = OS::get_singleton()->get_current_rendering_method().to_lower();
82108232

82118233
// Add the renderers name to the UI.
82128234
if (current_renderer_ps == current_renderer_os) {
@@ -8215,33 +8237,23 @@ EditorNode::EditorNode() {
82158237
// "vulkan" in particular uses lowercase "v" in the code, and uppercase in the UI.
82168238
PackedStringArray renderers = ProjectSettings::get_singleton()->get_custom_property_info().get(StringName("rendering/renderer/rendering_method")).hint_string.split(",", false);
82178239
for (int i = 0; i < renderers.size(); i++) {
8218-
String rendering_method = renderers[i];
8240+
const String rendering_method = renderers[i].to_lower();
82198241
if (rendering_method == "dummy") {
82208242
continue;
82218243
}
8222-
_add_renderer_entry(rendering_method, false);
8223-
renderer->set_item_metadata(i, rendering_method);
8224-
// Lowercase for standard comparison.
8225-
rendering_method = rendering_method.to_lower();
8244+
renderer->add_item(String()); // Set in NOTIFICATION_TRANSLATION_CHANGED.
8245+
renderer->set_item_metadata(-1, rendering_method);
82268246
if (current_renderer_ps == rendering_method) {
82278247
renderer->select(i);
8228-
renderer_current = i;
82298248
}
82308249
}
82318250
} else {
82328251
// It's an CLI-overridden rendering method.
8233-
_add_renderer_entry(current_renderer_os, true);
8234-
renderer->set_item_metadata(0, current_renderer_os);
8235-
renderer->select(0);
8236-
renderer_current = 0;
8252+
renderer->add_item(String()); // Set in NOTIFICATION_TRANSLATION_CHANGED.
8253+
renderer->set_item_metadata(-1, current_renderer_os);
82378254
}
82388255
_update_renderer_color();
82398256

8240-
video_restart_dialog = memnew(ConfirmationDialog);
8241-
video_restart_dialog->set_ok_button_text(TTR("Save & Restart"));
8242-
video_restart_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_set_renderer_name_save_and_restart));
8243-
gui_base->add_child(video_restart_dialog);
8244-
82458257
progress_hb = memnew(BackgroundProgress);
82468258

82478259
layout_dialog = memnew(EditorLayoutsDialog);

editor/editor_node.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -292,9 +292,6 @@ class EditorNode : public Node {
292292

293293
ConfirmationDialog *video_restart_dialog = nullptr;
294294

295-
int renderer_current = 0;
296-
String renderer_request;
297-
298295
// Split containers.
299296
DockSplitContainer *left_l_hsplit = nullptr;
300297
DockSplitContainer *left_l_vsplit = nullptr;
@@ -627,10 +624,10 @@ class EditorNode : public Node {
627624
void _queue_translation_notification();
628625
void _propagate_translation_notification();
629626

630-
void _renderer_selected(int);
627+
void _renderer_selected(int p_index);
631628
void _update_renderer_color();
632-
void _add_renderer_entry(const String &p_renderer_name, bool p_mark_overridden);
633-
void _set_renderer_name_save_and_restart();
629+
String _to_rendering_method_display_name(const String &p_rendering_method) const;
630+
void _set_renderer_name_save_and_restart(const String &p_rendering_method);
634631

635632
void _exit_editor(int p_exit_code);
636633

0 commit comments

Comments
 (0)