mirror of https://github.com/godotengine/godot
Merge a710e87b12 into 15ff450680
This commit is contained in:
commit
1671cb1ca9
|
|
@ -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<Ref<EditorResourceConversionPlugin>> 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<Resource> 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);
|
||||
|
|
|
|||
|
|
@ -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<InputEvent> &p_event) override;
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 |
Loading…
Reference in New Issue