diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 6b725240f9e..178a56a9771 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -558,8 +558,6 @@ void EditorNode::_update_theme(bool p_skip_creation) { if (EditorDebuggerNode::get_singleton()->is_visible()) { bottom_panel->add_theme_style_override(SceneStringName(panel), theme->get_stylebox(SNAME("BottomPanelDebuggerOverride"), EditorStringName(EditorStyles))); } - - _update_renderer_color(); } editor_dock_manager->update_tab_styles(); @@ -6625,71 +6623,6 @@ Vector> EditorNode::find_resource_conversion return ret; } -void EditorNode::_update_renderer_color() { - String rendering_method = renderer->get_selected_metadata(); - - if (rendering_method == "forward_plus") { - renderer->add_theme_color_override(SceneStringName(font_color), theme->get_color(SNAME("forward_plus_color"), EditorStringName(Editor))); - } else if (rendering_method == "mobile") { - renderer->add_theme_color_override(SceneStringName(font_color), theme->get_color(SNAME("mobile_color"), EditorStringName(Editor))); - } else if (rendering_method == "gl_compatibility") { - renderer->add_theme_color_override(SceneStringName(font_color), theme->get_color(SNAME("gl_compatibility_color"), EditorStringName(Editor))); - } -} - -void EditorNode::_renderer_selected(int p_which) { - String rendering_method = renderer->get_item_metadata(p_which); - - String current_renderer = GLOBAL_GET("rendering/renderer/rendering_method"); - - if (rendering_method == current_renderer) { - return; - } - - renderer_request = rendering_method; - 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"), - renderer_request, renderer_request.replace("forward_plus", "mobile"))); - video_restart_dialog->popup_centered(); - renderer->select(renderer_current); - _update_renderer_color(); -} - -void EditorNode::_add_renderer_entry(const String &p_renderer_name, bool p_mark_overridden) { - String item_text; - if (p_renderer_name == "forward_plus") { - item_text = TTR("Forward+"); - } - if (p_renderer_name == "mobile") { - item_text = TTR("Mobile"); - } - if (p_renderer_name == "gl_compatibility") { - item_text = TTR("Compatibility"); - } - if (p_mark_overridden) { - item_text += " " + TTR("(Overridden)"); - } - renderer->add_item(item_text); -} - -void EditorNode::_set_renderer_name_save_and_restart() { - ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method", renderer_request); - if (renderer_request == "mobile" || renderer_request == "gl_compatibility") { - // Also change the mobile override if changing to a compatible rendering method. - // This prevents visual discrepancies between desktop and mobile platforms. - ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method.mobile", renderer_request); - } else if (renderer_request == "forward_plus") { - // 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`. - ProjectSettings::get_singleton()->set("rendering/renderer/rendering_method.mobile", "mobile"); - } - - ProjectSettings::get_singleton()->save(); - - save_all_scenes(); - restart_editor(); -} - void EditorNode::_resource_saved(Ref p_resource, const String &p_path) { if (singleton->saving_resources_in_path.has(p_resource)) { // This is going to be handled by save_resource_in_path when the time is right. @@ -7597,16 +7530,6 @@ EditorNode::EditorNode() { right_menu_hb->set_mouse_filter(Control::MOUSE_FILTER_STOP); title_bar->add_child(right_menu_hb); - renderer = memnew(OptionButton); - renderer->set_visible(true); - renderer->set_flat(true); - renderer->set_theme_type_variation("TopBarOptionButton"); - renderer->set_fit_to_longest_item(false); - renderer->set_focus_mode(Control::FOCUS_NONE); - renderer->set_tooltip_text(TTR("Choose a rendering method.\n\nNotes:\n- On mobile platforms, the Mobile rendering method is used if Forward+ is selected here.\n- On the web platform, the Compatibility rendering method is always used.")); - - right_menu_hb->add_child(renderer); - if (can_expand) { // Add spacer to avoid other controls under the window minimize/maximize/close buttons (right side). right_menu_spacer = memnew(Control); @@ -7614,41 +7537,6 @@ EditorNode::EditorNode() { title_bar->add_child(right_menu_spacer); } - String current_renderer_ps = GLOBAL_GET("rendering/renderer/rendering_method"); - current_renderer_ps = current_renderer_ps.to_lower(); - String current_renderer_os = OS::get_singleton()->get_current_rendering_method().to_lower(); - - // Add the renderers name to the UI. - if (current_renderer_ps == current_renderer_os) { - renderer->connect(SceneStringName(item_selected), callable_mp(this, &EditorNode::_renderer_selected)); - // As we are doing string comparisons, keep in standard case to prevent problems with capitals - // "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); - for (int i = 0; i < renderers.size(); i++) { - String rendering_method = renderers[i]; - _add_renderer_entry(rendering_method, false); - renderer->set_item_metadata(i, rendering_method); - // Lowercase for standard comparison. - rendering_method = rendering_method.to_lower(); - if (current_renderer_ps == rendering_method) { - renderer->select(i); - renderer_current = i; - } - } - } else { - // It's an CLI-overridden rendering method. - _add_renderer_entry(current_renderer_os, true); - renderer->set_item_metadata(0, current_renderer_os); - renderer->select(0); - renderer_current = 0; - } - _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); layout_dialog = memnew(EditorLayoutsDialog); diff --git a/editor/editor_node.h b/editor/editor_node.h index de3af997473..a2bc465a782 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -278,12 +278,6 @@ private: Control *gui_base = nullptr; VBoxContainer *main_vbox = nullptr; - OptionButton *renderer = nullptr; - - ConfirmationDialog *video_restart_dialog = nullptr; - - int renderer_current = 0; - String renderer_request; // Split containers. DockSplitContainer *left_l_hsplit = nullptr; @@ -597,11 +591,6 @@ private: void _update_from_settings(); void _gdextensions_reloaded(); - void _renderer_selected(int); - void _update_renderer_color(); - void _add_renderer_entry(const String &p_renderer_name, bool p_mark_overridden); - void _set_renderer_name_save_and_restart(); - void _exit_editor(int p_exit_code); virtual void input(const Ref &p_event) override; diff --git a/editor/gui/editor_version_button.cpp b/editor/gui/editor_version_button.cpp index 635d66f42a9..a307ab87985 100644 --- a/editor/gui/editor_version_button.cpp +++ b/editor/gui/editor_version_button.cpp @@ -32,6 +32,7 @@ #include "core/os/time.h" #include "core/version.h" +#include "scene/gui/control.h" String _get_version_string(EditorVersionButton::VersionFormat p_format) { String main; @@ -60,10 +61,30 @@ String _get_version_string(EditorVersionButton::VersionFormat p_format) { void EditorVersionButton::_notification(int p_what) { switch (p_what) { case NOTIFICATION_POSTINITIALIZE: { - // This can't be done in the constructor because theme cache is not ready yet. set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); set_text(_get_version_string(format)); } break; + case NOTIFICATION_ENTER_TREE: { + // This can't be done in the constructor because theme cache is not ready yet. + add_theme_icon_override(SNAME("icon"), get_editor_theme_icon(SNAME("Direct3D12"))); + Color icon_color; + if (RS::get_singleton()->get_current_rendering_method() == "forward_plus") { + icon_color = get_theme_color(SNAME("forward_plus_color"), SNAME("Editor")); + } else if (RS::get_singleton()->get_current_rendering_method() == "mobile") { + icon_color = get_theme_color(SNAME("mobile_color"), SNAME("Editor")); + } else { + icon_color = get_theme_color(SNAME("gl_compatibility_color"), SNAME("Editor")); + } + // Cancel out the modulation applied to the node, which is used to reduce the text's opacity + // in the editor bottom panel and project manager. + // We don't want the modulation to affect the icon, as it becomes hard to see otherwise. + icon_color /= get_self_modulate(); + add_theme_color_override(SNAME("icon_normal_color"), icon_color); + add_theme_color_override(SNAME("icon_pressed_color"), icon_color); + add_theme_color_override(SNAME("icon_focus_color"), icon_color); + add_theme_color_override(SNAME("icon_hover_color"), icon_color); + add_theme_color_override(SNAME("icon_hover_pressed_color"), icon_color); + } break; } } @@ -73,7 +94,10 @@ void EditorVersionButton::pressed() { EditorVersionButton::EditorVersionButton(VersionFormat p_format) { format = p_format; - set_underline_mode(LinkButton::UNDERLINE_MODE_ON_HOVER); + + set_flat(true); + set_icon_alignment(HORIZONTAL_ALIGNMENT_RIGHT); + set_focus_mode(FOCUS_NONE); String build_date; if (VERSION_TIMESTAMP > 0) { @@ -81,5 +105,8 @@ EditorVersionButton::EditorVersionButton(VersionFormat p_format) { } else { build_date = TTR("(unknown)"); } - set_tooltip_text(vformat(TTR("Git commit date: %s\nClick to copy the version information."), build_date)); + const String rendering_driver = RS::get_singleton()->get_current_rendering_driver_name(); + const String rendering_method = RS::get_singleton()->get_current_rendering_method(); + + set_tooltip_text(vformat(TTR("Git commit date: %s\nRendering method: %s\nRendering driver: %s\nClick to copy the version information."), build_date, rendering_method, rendering_driver)); } diff --git a/editor/gui/editor_version_button.h b/editor/gui/editor_version_button.h index 591c3d483ee..efc48e9fa90 100644 --- a/editor/gui/editor_version_button.h +++ b/editor/gui/editor_version_button.h @@ -31,10 +31,10 @@ #ifndef EDITOR_VERSION_BUTTON_H #define EDITOR_VERSION_BUTTON_H -#include "scene/gui/link_button.h" +#include "scene/gui/button.h" -class EditorVersionButton : public LinkButton { - GDCLASS(EditorVersionButton, LinkButton); +class EditorVersionButton : public Button { + GDCLASS(EditorVersionButton, Button); public: enum VersionFormat { diff --git a/editor/icons/Direct3D12.svg b/editor/icons/Direct3D12.svg new file mode 100644 index 00000000000..b960c889688 --- /dev/null +++ b/editor/icons/Direct3D12.svg @@ -0,0 +1 @@ + \ No newline at end of file