@@ -766,6 +766,18 @@ void EditorNode::_notification(int p_what) {
766
766
switch (p_what) {
767
767
case NOTIFICATION_TRANSLATION_CHANGED: {
768
768
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
+ }
769
781
} break ;
770
782
771
783
case NOTIFICATION_POSTINITIALIZE: {
@@ -7049,49 +7061,60 @@ void EditorNode::_update_renderer_color() {
7049
7061
}
7050
7062
}
7051
7063
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" );
7057
7067
if (rendering_method == current_renderer) {
7058
7068
return ;
7059
7069
}
7060
7070
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));
7062
7089
video_restart_dialog->set_text (
7063
7090
vformat (TTR (" Changing the renderer requires restarting the editor.\n\n Choosing 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" )));
7065
7092
video_restart_dialog->popup_centered ();
7066
- renderer-> select (renderer_current);
7093
+
7067
7094
_update_renderer_color ();
7068
7095
}
7069
7096
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+" );
7077
7100
}
7078
- if (p_renderer_name == " gl_compatibility " ) {
7079
- item_text = TTR (" Compatibility " );
7101
+ if (p_rendering_method == " mobile " ) {
7102
+ return TTR (" Mobile " );
7080
7103
}
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" );
7084
7106
}
7085
- renderer-> add_item (item_text) ;
7107
+ return p_rendering_method ;
7086
7108
}
7087
7109
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" ) {
7091
7114
// Also change the mobile override if changing to a compatible rendering method.
7092
7115
// 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" ) {
7095
7118
// Use the equivalent mobile rendering method. This prevents the rendering method from staying
7096
7119
// on its old choice if moving from `gl_compatibility` to `forward_plus`.
7097
7120
ProjectSettings::get_singleton ()->set (" rendering/renderer/rendering_method.mobile" , " mobile" );
@@ -8204,9 +8227,8 @@ EditorNode::EditorNode() {
8204
8227
title_bar->add_child (right_menu_spacer);
8205
8228
}
8206
8229
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 ();
8210
8232
8211
8233
// Add the renderers name to the UI.
8212
8234
if (current_renderer_ps == current_renderer_os) {
@@ -8215,33 +8237,23 @@ EditorNode::EditorNode() {
8215
8237
// "vulkan" in particular uses lowercase "v" in the code, and uppercase in the UI.
8216
8238
PackedStringArray renderers = ProjectSettings::get_singleton ()->get_custom_property_info ().get (StringName (" rendering/renderer/rendering_method" )).hint_string .split (" ," , false );
8217
8239
for (int i = 0 ; i < renderers.size (); i++) {
8218
- String rendering_method = renderers[i];
8240
+ const String rendering_method = renderers[i]. to_lower () ;
8219
8241
if (rendering_method == " dummy" ) {
8220
8242
continue ;
8221
8243
}
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);
8226
8246
if (current_renderer_ps == rendering_method) {
8227
8247
renderer->select (i);
8228
- renderer_current = i;
8229
8248
}
8230
8249
}
8231
8250
} else {
8232
8251
// 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);
8237
8254
}
8238
8255
_update_renderer_color ();
8239
8256
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
-
8245
8257
progress_hb = memnew (BackgroundProgress);
8246
8258
8247
8259
layout_dialog = memnew (EditorLayoutsDialog);
0 commit comments