You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-12-02 16:48:55 +00:00
Improve auto-translation of the rendering method selector
This commit is contained in:
@@ -765,6 +765,18 @@ void EditorNode::_notification(int p_what) {
|
|||||||
switch (p_what) {
|
switch (p_what) {
|
||||||
case NOTIFICATION_TRANSLATION_CHANGED: {
|
case NOTIFICATION_TRANSLATION_CHANGED: {
|
||||||
callable_mp(this, &EditorNode::_titlebar_resized).call_deferred();
|
callable_mp(this, &EditorNode::_titlebar_resized).call_deferred();
|
||||||
|
|
||||||
|
// The rendering method selector.
|
||||||
|
const String current_renderer_ps = String(GLOBAL_GET("rendering/renderer/rendering_method")).to_lower();
|
||||||
|
const String current_renderer_os = OS::get_singleton()->get_current_rendering_method().to_lower();
|
||||||
|
if (current_renderer_ps == current_renderer_os) {
|
||||||
|
for (int i = 0; i < renderer->get_item_count(); i++) {
|
||||||
|
renderer->set_item_text(i, _to_rendering_method_display_name(renderer->get_item_metadata(i)));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// TRANSLATORS: The placeholder is the rendering method that has overridden the default one.
|
||||||
|
renderer->set_item_text(0, vformat(TTR("%s (Overridden)"), _to_rendering_method_display_name(current_renderer_os)));
|
||||||
|
}
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case NOTIFICATION_POSTINITIALIZE: {
|
case NOTIFICATION_POSTINITIALIZE: {
|
||||||
@@ -7110,49 +7122,62 @@ void EditorNode::_update_renderer_color() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorNode::_renderer_selected(int p_which) {
|
void EditorNode::_renderer_selected(int p_index) {
|
||||||
String rendering_method = renderer->get_item_metadata(p_which);
|
const String rendering_method = renderer->get_item_metadata(p_index);
|
||||||
|
const String current_renderer = GLOBAL_GET("rendering/renderer/rendering_method");
|
||||||
String current_renderer = GLOBAL_GET("rendering/renderer/rendering_method");
|
|
||||||
|
|
||||||
if (rendering_method == current_renderer) {
|
if (rendering_method == current_renderer) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderer_request = rendering_method;
|
// Don't change selection.
|
||||||
|
for (int i = 0; i < renderer->get_item_count(); i++) {
|
||||||
|
if (renderer->get_item_metadata(i) == current_renderer) {
|
||||||
|
renderer->select(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (video_restart_dialog == nullptr) {
|
||||||
|
video_restart_dialog = memnew(ConfirmationDialog);
|
||||||
|
video_restart_dialog->set_ok_button_text(TTRC("Save & Restart"));
|
||||||
|
video_restart_dialog->get_label()->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED);
|
||||||
|
gui_base->add_child(video_restart_dialog);
|
||||||
|
} else {
|
||||||
|
video_restart_dialog->disconnect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_set_renderer_name_save_and_restart));
|
||||||
|
}
|
||||||
|
|
||||||
|
const String mobile_rendering_method = rendering_method == "forward_plus" ? "mobile" : rendering_method;
|
||||||
|
const String web_rendering_method = "gl_compatibility";
|
||||||
|
video_restart_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_set_renderer_name_save_and_restart).bind(rendering_method));
|
||||||
video_restart_dialog->set_text(
|
video_restart_dialog->set_text(
|
||||||
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"),
|
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: %s"),
|
||||||
renderer_request, renderer_request.replace("forward_plus", "mobile")));
|
_to_rendering_method_display_name(rendering_method), _to_rendering_method_display_name(mobile_rendering_method), _to_rendering_method_display_name(web_rendering_method)));
|
||||||
video_restart_dialog->popup_centered();
|
video_restart_dialog->popup_centered();
|
||||||
renderer->select(renderer_current);
|
|
||||||
_update_renderer_color();
|
_update_renderer_color();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorNode::_add_renderer_entry(const String &p_renderer_name, bool p_mark_overridden) {
|
String EditorNode::_to_rendering_method_display_name(const String &p_rendering_method) const {
|
||||||
String item_text;
|
if (p_rendering_method == "forward_plus") {
|
||||||
if (p_renderer_name == "forward_plus") {
|
return TTR("Forward+");
|
||||||
item_text = TTR("Forward+");
|
|
||||||
}
|
}
|
||||||
if (p_renderer_name == "mobile") {
|
if (p_rendering_method == "mobile") {
|
||||||
item_text = TTR("Mobile");
|
return TTR("Mobile");
|
||||||
}
|
}
|
||||||
if (p_renderer_name == "gl_compatibility") {
|
if (p_rendering_method == "gl_compatibility") {
|
||||||
item_text = TTR("Compatibility");
|
return TTR("Compatibility");
|
||||||
}
|
}
|
||||||
if (p_mark_overridden) {
|
return p_rendering_method;
|
||||||
// TRANSLATORS: The placeholder is the rendering method that has overridden the default one.
|
|
||||||
item_text = vformat(TTR("%s (Overridden)"), item_text);
|
|
||||||
}
|
|
||||||
renderer->add_item(item_text);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorNode::_set_renderer_name_save_and_restart() {
|
void EditorNode::_set_renderer_name_save_and_restart(const String &p_rendering_method) {
|
||||||
ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method", renderer_request);
|
ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method", p_rendering_method);
|
||||||
if (renderer_request == "mobile" || renderer_request == "gl_compatibility") {
|
|
||||||
|
if (p_rendering_method == "mobile" || p_rendering_method == "gl_compatibility") {
|
||||||
// Also change the mobile override if changing to a compatible rendering method.
|
// Also change the mobile override if changing to a compatible rendering method.
|
||||||
// This prevents visual discrepancies between desktop and mobile platforms.
|
// This prevents visual discrepancies between desktop and mobile platforms.
|
||||||
ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method.mobile", renderer_request);
|
ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method.mobile", p_rendering_method);
|
||||||
} else if (renderer_request == "forward_plus") {
|
} else if (p_rendering_method == "forward_plus") {
|
||||||
// Use the equivalent mobile rendering method. This prevents the rendering method from staying
|
// Use the equivalent mobile rendering method. This prevents the rendering method from staying
|
||||||
// on its old choice if moving from `gl_compatibility` to `forward_plus`.
|
// on its old choice if moving from `gl_compatibility` to `forward_plus`.
|
||||||
ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method.mobile", "mobile");
|
ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method.mobile", "mobile");
|
||||||
@@ -8264,9 +8289,8 @@ EditorNode::EditorNode() {
|
|||||||
title_bar->add_child(right_menu_spacer);
|
title_bar->add_child(right_menu_spacer);
|
||||||
}
|
}
|
||||||
|
|
||||||
String current_renderer_ps = GLOBAL_GET("rendering/renderer/rendering_method");
|
const String current_renderer_ps = String(GLOBAL_GET("rendering/renderer/rendering_method")).to_lower();
|
||||||
current_renderer_ps = current_renderer_ps.to_lower();
|
const String current_renderer_os = OS::get_singleton()->get_current_rendering_method().to_lower();
|
||||||
String current_renderer_os = OS::get_singleton()->get_current_rendering_method().to_lower();
|
|
||||||
|
|
||||||
// Add the renderers name to the UI.
|
// Add the renderers name to the UI.
|
||||||
if (current_renderer_ps == current_renderer_os) {
|
if (current_renderer_ps == current_renderer_os) {
|
||||||
@@ -8275,33 +8299,23 @@ EditorNode::EditorNode() {
|
|||||||
// "vulkan" in particular uses lowercase "v" in the code, and uppercase in the UI.
|
// "vulkan" in particular uses lowercase "v" in the code, and uppercase in the UI.
|
||||||
PackedStringArray renderers = ProjectSettings::get_singleton()->get_custom_property_info().get(StringName("rendering/renderer/rendering_method")).hint_string.split(",", false);
|
PackedStringArray renderers = ProjectSettings::get_singleton()->get_custom_property_info().get(StringName("rendering/renderer/rendering_method")).hint_string.split(",", false);
|
||||||
for (int i = 0; i < renderers.size(); i++) {
|
for (int i = 0; i < renderers.size(); i++) {
|
||||||
String rendering_method = renderers[i];
|
const String rendering_method = renderers[i].to_lower();
|
||||||
if (rendering_method == "dummy") {
|
if (rendering_method == "dummy") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
_add_renderer_entry(rendering_method, false);
|
renderer->add_item(String()); // Set in NOTIFICATION_TRANSLATION_CHANGED.
|
||||||
renderer->set_item_metadata(i, rendering_method);
|
renderer->set_item_metadata(-1, rendering_method);
|
||||||
// Lowercase for standard comparison.
|
|
||||||
rendering_method = rendering_method.to_lower();
|
|
||||||
if (current_renderer_ps == rendering_method) {
|
if (current_renderer_ps == rendering_method) {
|
||||||
renderer->select(i);
|
renderer->select(i);
|
||||||
renderer_current = i;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// It's an CLI-overridden rendering method.
|
// It's an CLI-overridden rendering method.
|
||||||
_add_renderer_entry(current_renderer_os, true);
|
renderer->add_item(String()); // Set in NOTIFICATION_TRANSLATION_CHANGED.
|
||||||
renderer->set_item_metadata(0, current_renderer_os);
|
renderer->set_item_metadata(-1, current_renderer_os);
|
||||||
renderer->select(0);
|
|
||||||
renderer_current = 0;
|
|
||||||
}
|
}
|
||||||
_update_renderer_color();
|
_update_renderer_color();
|
||||||
|
|
||||||
video_restart_dialog = memnew(ConfirmationDialog);
|
|
||||||
video_restart_dialog->set_ok_button_text(TTR("Save & Restart"));
|
|
||||||
video_restart_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_set_renderer_name_save_and_restart));
|
|
||||||
gui_base->add_child(video_restart_dialog);
|
|
||||||
|
|
||||||
progress_hb = memnew(BackgroundProgress);
|
progress_hb = memnew(BackgroundProgress);
|
||||||
|
|
||||||
layout_dialog = memnew(EditorLayoutsDialog);
|
layout_dialog = memnew(EditorLayoutsDialog);
|
||||||
|
|||||||
@@ -292,9 +292,6 @@ private:
|
|||||||
|
|
||||||
ConfirmationDialog *video_restart_dialog = nullptr;
|
ConfirmationDialog *video_restart_dialog = nullptr;
|
||||||
|
|
||||||
int renderer_current = 0;
|
|
||||||
String renderer_request;
|
|
||||||
|
|
||||||
// Split containers.
|
// Split containers.
|
||||||
DockSplitContainer *left_l_hsplit = nullptr;
|
DockSplitContainer *left_l_hsplit = nullptr;
|
||||||
DockSplitContainer *left_l_vsplit = nullptr;
|
DockSplitContainer *left_l_vsplit = nullptr;
|
||||||
@@ -627,10 +624,10 @@ private:
|
|||||||
void _queue_translation_notification();
|
void _queue_translation_notification();
|
||||||
void _propagate_translation_notification();
|
void _propagate_translation_notification();
|
||||||
|
|
||||||
void _renderer_selected(int);
|
void _renderer_selected(int p_index);
|
||||||
void _update_renderer_color();
|
void _update_renderer_color();
|
||||||
void _add_renderer_entry(const String &p_renderer_name, bool p_mark_overridden);
|
String _to_rendering_method_display_name(const String &p_rendering_method) const;
|
||||||
void _set_renderer_name_save_and_restart();
|
void _set_renderer_name_save_and_restart(const String &p_rendering_method);
|
||||||
|
|
||||||
void _exit_editor(int p_exit_code);
|
void _exit_editor(int p_exit_code);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user