1
0
Fork 0
This commit is contained in:
Hugo Locurcio 2025-02-28 01:36:30 +01:00 committed by GitHub
commit 1671cb1ca9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 34 additions and 129 deletions

View File

@ -558,8 +558,6 @@ void EditorNode::_update_theme(bool p_skip_creation) {
if (EditorDebuggerNode::get_singleton()->is_visible()) { if (EditorDebuggerNode::get_singleton()->is_visible()) {
bottom_panel->add_theme_style_override(SceneStringName(panel), theme->get_stylebox(SNAME("BottomPanelDebuggerOverride"), EditorStringName(EditorStyles))); bottom_panel->add_theme_style_override(SceneStringName(panel), theme->get_stylebox(SNAME("BottomPanelDebuggerOverride"), EditorStringName(EditorStyles)));
} }
_update_renderer_color();
} }
editor_dock_manager->update_tab_styles(); editor_dock_manager->update_tab_styles();
@ -6625,71 +6623,6 @@ Vector<Ref<EditorResourceConversionPlugin>> EditorNode::find_resource_conversion
return ret; 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<Resource> p_resource, const String &p_path) { void EditorNode::_resource_saved(Ref<Resource> p_resource, const String &p_path) {
if (singleton->saving_resources_in_path.has(p_resource)) { 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. // 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); right_menu_hb->set_mouse_filter(Control::MOUSE_FILTER_STOP);
title_bar->add_child(right_menu_hb); 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) { if (can_expand) {
// Add spacer to avoid other controls under the window minimize/maximize/close buttons (right side). // Add spacer to avoid other controls under the window minimize/maximize/close buttons (right side).
right_menu_spacer = memnew(Control); right_menu_spacer = memnew(Control);
@ -7614,41 +7537,6 @@ 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");
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); progress_hb = memnew(BackgroundProgress);
layout_dialog = memnew(EditorLayoutsDialog); layout_dialog = memnew(EditorLayoutsDialog);

View File

@ -278,12 +278,6 @@ private:
Control *gui_base = nullptr; Control *gui_base = nullptr;
VBoxContainer *main_vbox = nullptr; VBoxContainer *main_vbox = nullptr;
OptionButton *renderer = 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;
@ -597,11 +591,6 @@ private:
void _update_from_settings(); void _update_from_settings();
void _gdextensions_reloaded(); 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); void _exit_editor(int p_exit_code);
virtual void input(const Ref<InputEvent> &p_event) override; virtual void input(const Ref<InputEvent> &p_event) override;

View File

@ -32,6 +32,7 @@
#include "core/os/time.h" #include "core/os/time.h"
#include "core/version.h" #include "core/version.h"
#include "scene/gui/control.h"
String _get_version_string(EditorVersionButton::VersionFormat p_format) { String _get_version_string(EditorVersionButton::VersionFormat p_format) {
String main; String main;
@ -60,10 +61,30 @@ String _get_version_string(EditorVersionButton::VersionFormat p_format) {
void EditorVersionButton::_notification(int p_what) { void EditorVersionButton::_notification(int p_what) {
switch (p_what) { switch (p_what) {
case NOTIFICATION_POSTINITIALIZE: { 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_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED);
set_text(_get_version_string(format)); set_text(_get_version_string(format));
} break; } 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) { EditorVersionButton::EditorVersionButton(VersionFormat p_format) {
format = 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; String build_date;
if (VERSION_TIMESTAMP > 0) { if (VERSION_TIMESTAMP > 0) {
@ -81,5 +105,8 @@ EditorVersionButton::EditorVersionButton(VersionFormat p_format) {
} else { } else {
build_date = TTR("(unknown)"); 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));
} }

View File

@ -31,10 +31,10 @@
#ifndef EDITOR_VERSION_BUTTON_H #ifndef EDITOR_VERSION_BUTTON_H
#define EDITOR_VERSION_BUTTON_H #define EDITOR_VERSION_BUTTON_H
#include "scene/gui/link_button.h" #include "scene/gui/button.h"
class EditorVersionButton : public LinkButton { class EditorVersionButton : public Button {
GDCLASS(EditorVersionButton, LinkButton); GDCLASS(EditorVersionButton, Button);
public: public:
enum VersionFormat { enum VersionFormat {

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" d="m2.9999987 4v2c-3.99999826 0-3.99999826 6 0 6h2v-8zm0 4v2c-1.3333328 0-1.3333328-2 0-2zm3.153-1.9995h1.849c0 .6997448-.4477153 1.267-1 1.267v1c1.1546662 0 1.1546662 1.732 0 1.732h-1v2h1c2.5516323.17298 3.9889633-2.8755515 2.232-4.734.4889602-.2262388.7913553-.7269315.764-1.265v-2h-3.845zm7.8470003-2.0005v2c-3.999998 0-3.999998 6 0 6h2v-8zm0 4v2c-1.333333 0-1.333333-2 0-2z"/></svg>

After

Width:  |  Height:  |  Size: 467 B