diff options
Diffstat (limited to 'editor/editor_settings.cpp')
-rw-r--r-- | editor/editor_settings.cpp | 78 |
1 files changed, 67 insertions, 11 deletions
diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 32d581a26e..d7bc3502ce 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -49,6 +49,7 @@ #include "editor/editor_paths.h" #include "editor/editor_property_name_processor.h" #include "editor/editor_translation.h" +#include "editor/engine_update_label.h" #include "scene/gui/color_picker.h" #include "scene/main/node.h" #include "scene/main/scene_tree.h" @@ -399,6 +400,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { // Editor EDITOR_SETTING(Variant::BOOL, PROPERTY_HINT_NONE, "interface/editor/localize_settings", true, "") + EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/editor/dock_tab_style", 0, "Text Only,Icon Only,Text and Icon") EDITOR_SETTING_USAGE(Variant::INT, PROPERTY_HINT_ENUM, "interface/editor/ui_layout_direction", 0, "Based on Application Locale,Left-to-Right,Right-to-Left,Based on System Locale", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) // Display what the Auto display scale setting effectively corresponds to. @@ -413,6 +415,14 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/editor/editor_screen", -2, ed_screen_hints) EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/editor/project_manager_screen", -2, ed_screen_hints) + { + EngineUpdateLabel::UpdateMode default_update_mode = EngineUpdateLabel::UpdateMode::NEWEST_UNSTABLE; + if (String(VERSION_STATUS) == String("stable")) { + default_update_mode = EngineUpdateLabel::UpdateMode::NEWEST_STABLE; + } + EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "network/connection/engine_version_update_mode", int(default_update_mode), "Disable Update Checks,Check Newest Preview,Check Newest Stable,Check Newest Patch"); // Uses EngineUpdateLabel::UpdateMode. + } + _initial_set("interface/editor/debug/enable_pseudolocalization", false); set_restart_if_changed("interface/editor/debug/enable_pseudolocalization", true); // Use pseudolocalization in editor. @@ -432,11 +442,11 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/editor/font_hinting", 0, "Auto (Light),None,Light,Normal") #endif EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/editor/font_subpixel_positioning", 1, "Disabled,Auto,One Half of a Pixel,One Quarter of a Pixel") + EDITOR_SETTING(Variant::BOOL, PROPERTY_HINT_NONE, "interface/editor/font_disable_embedded_bitmaps", true, ""); EDITOR_SETTING(Variant::STRING, PROPERTY_HINT_GLOBAL_FILE, "interface/editor/main_font", "", "*.ttf,*.otf,*.woff,*.woff2,*.pfb,*.pfm") EDITOR_SETTING(Variant::STRING, PROPERTY_HINT_GLOBAL_FILE, "interface/editor/main_font_bold", "", "*.ttf,*.otf,*.woff,*.woff2,*.pfb,*.pfm") EDITOR_SETTING(Variant::STRING, PROPERTY_HINT_GLOBAL_FILE, "interface/editor/code_font", "", "*.ttf,*.otf,*.woff,*.woff2,*.pfb,*.pfm") - _initial_set("interface/editor/separate_distraction_mode", false); _initial_set("interface/editor/automatically_open_screenshots", true); EDITOR_SETTING_USAGE(Variant::BOOL, PROPERTY_HINT_NONE, "interface/editor/single_window_mode", false, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) @@ -462,6 +472,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { // being focused again, so this should be used at the user's discretion. EDITOR_SETTING_USAGE(Variant::INT, PROPERTY_HINT_RANGE, "interface/editor/unfocused_low_processor_mode_sleep_usec", 100000, "1,1000000,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) + EDITOR_SETTING(Variant::BOOL, PROPERTY_HINT_NONE, "interface/editor/import_resources_when_unfocused", false, "") + EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/editor/vsync_mode", 1, "Disabled,Enabled,Adaptive,Mailbox") EDITOR_SETTING(Variant::BOOL, PROPERTY_HINT_NONE, "interface/editor/update_continuously", false, "") @@ -469,6 +481,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { EDITOR_SETTING(Variant::INT, PROPERTY_HINT_RANGE, "interface/inspector/max_array_dictionary_items_per_page", 20, "10,100,1") EDITOR_SETTING(Variant::BOOL, PROPERTY_HINT_NONE, "interface/inspector/show_low_level_opentype_features", false, "") EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "interface/inspector/float_drag_speed", 5.0, "0.1,100,0.01") + EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/inspector/nested_color_mode", 0, "Containers & Resources,Resources,External Resources") + EDITOR_SETTING(Variant::BOOL, PROPERTY_HINT_NONE, "interface/inspector/delimitate_all_container_and_resources", true, "") EDITOR_SETTING_USAGE(Variant::INT, PROPERTY_HINT_ENUM, "interface/inspector/default_property_name_style", EditorPropertyNameProcessor::STYLE_CAPITALIZED, "Raw,Capitalized,Localized", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); // The lowest value is equal to the minimum float step for 32-bit floats. // The step must be set manually, as changing this setting should not change the step here. @@ -679,7 +693,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { EDITOR_SETTING_USAGE(Variant::COLOR, PROPERTY_HINT_NONE, "editors/3d/selection_box_color", Color(1.0, 0.5, 0), "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) EDITOR_SETTING_USAGE(Variant::COLOR, PROPERTY_HINT_NONE, "editors/3d_gizmos/gizmo_colors/instantiated", Color(0.7, 0.7, 0.7, 0.6), "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) EDITOR_SETTING_USAGE(Variant::COLOR, PROPERTY_HINT_NONE, "editors/3d_gizmos/gizmo_colors/joint", Color(0.5, 0.8, 1), "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) - EDITOR_SETTING_USAGE(Variant::COLOR, PROPERTY_HINT_NONE, "editors/3d_gizmos/gizmo_colors/shape", Color(0.5, 0.7, 1), "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) + EDITOR_SETTING_USAGE(Variant::COLOR, PROPERTY_HINT_NONE, "editors/3d_gizmos/gizmo_colors/aabb", Color(0.28, 0.8, 0.82), "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) // If a line is a multiple of this, it uses the primary grid color. // Use a power of 2 value by default as it's more common to use powers of 2 in level design. @@ -810,6 +824,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("run/output/always_open_output_on_play", true); _initial_set("run/output/always_close_output_on_stop", false); + EDITOR_SETTING(Variant::INT, PROPERTY_HINT_RANGE, "run/output/max_lines", 10000, "100,100000,1") + // Platform _initial_set("run/platforms/linuxbsd/prefer_wayland", false); set_restart_if_changed("run/platforms/linuxbsd/prefer_wayland", true); @@ -955,7 +971,7 @@ bool EditorSettings::_save_text_editor_theme(const String &p_file) { keys.sort(); for (const String &key : keys) { - if (key.begins_with("text_editor/theme/highlighting/") && key.find("color") >= 0) { + if (key.begins_with("text_editor/theme/highlighting/") && key.contains("color")) { cf->set_value(theme_section, key.replace("text_editor/theme/highlighting/", ""), ((Color)props[key].variant).to_html()); } } @@ -979,6 +995,29 @@ EditorSettings *EditorSettings::get_singleton() { return singleton.ptr(); } +String EditorSettings::get_existing_settings_path() { + const String config_dir = EditorPaths::get_singleton()->get_config_dir(); + int minor = VERSION_MINOR; + String filename; + + do { + if (VERSION_MAJOR == 4 && minor < 3) { + // Minor version is used since 4.3, so special case to load older settings. + filename = vformat("editor_settings-%d.tres", VERSION_MAJOR); + minor = -1; + } else { + filename = vformat("editor_settings-%d.%d.tres", VERSION_MAJOR, minor); + minor--; + } + } while (minor >= 0 && !FileAccess::exists(config_dir.path_join(filename))); + return config_dir.path_join(filename); +} + +String EditorSettings::get_newest_settings_path() { + const String config_file_name = vformat("editor_settings-%d.%d.tres", VERSION_MAJOR, VERSION_MINOR); + return EditorPaths::get_singleton()->get_config_dir().path_join(config_file_name); +} + void EditorSettings::create() { // IMPORTANT: create() *must* create a valid EditorSettings singleton, // as the rest of the engine code will assume it. As such, it should never @@ -1006,16 +1045,16 @@ void EditorSettings::create() { if (EditorPaths::get_singleton()->are_paths_valid()) { // Validate editor config file. - Ref<DirAccess> dir = DirAccess::open(EditorPaths::get_singleton()->get_config_dir()); - ERR_FAIL_COND(dir.is_null()); + ERR_FAIL_COND(!DirAccess::dir_exists_absolute(EditorPaths::get_singleton()->get_config_dir())); - String config_file_name = "editor_settings-" + itos(VERSION_MAJOR) + ".tres"; - config_file_path = EditorPaths::get_singleton()->get_config_dir().path_join(config_file_name); - if (!dir->file_exists(config_file_name)) { + config_file_path = get_existing_settings_path(); + if (!FileAccess::exists(config_file_path)) { + config_file_path = get_newest_settings_path(); goto fail; } singleton = ResourceLoader::load(config_file_path, "EditorSettings"); + singleton->set_path(get_newest_settings_path()); // Settings can be loaded from older version file, so make sure it's newest. if (singleton.is_null()) { ERR_PRINT("Could not load editor settings from path: " + config_file_path); @@ -1411,7 +1450,7 @@ void EditorSettings::load_text_editor_theme() { // don't load if it's not already there! if (has_setting("text_editor/theme/highlighting/" + key)) { // make sure it is actually a color - if (val.is_valid_html_color() && key.find("color") >= 0) { + if (val.is_valid_html_color() && key.contains("color")) { props["text_editor/theme/highlighting/" + key].variant = Color::html(val); // change manually to prevent "Settings changed" console spam } } @@ -1502,6 +1541,19 @@ String EditorSettings::get_editor_layouts_config() const { float EditorSettings::get_auto_display_scale() const { #ifdef LINUXBSD_ENABLED if (DisplayServer::get_singleton()->get_name() == "Wayland") { + float main_window_scale = DisplayServer::get_singleton()->screen_get_scale(DisplayServer::SCREEN_OF_MAIN_WINDOW); + + if (DisplayServer::get_singleton()->get_screen_count() == 1 || Math::fract(main_window_scale) != 0) { + // If we have a single screen or the screen of the window is fractional, all + // bets are off. At this point, let's just return the current's window scale, + // which is special-cased to the scale of `SCREEN_OF_MAIN_WINDOW`. + return main_window_scale; + } + + // If the above branch didn't fire, fractional scaling isn't going to work + // properly anyways (we're need the ability to change the UI scale at runtime). + // At this point it's more convenient to "supersample" like we do with other + // platforms, hoping that the user is only using integer-scaled screens. return DisplayServer::get_singleton()->screen_get_max_scale(); } #endif @@ -1605,7 +1657,9 @@ Ref<Shortcut> ED_GET_SHORTCUT(const String &p_path) { } void ED_SHORTCUT_OVERRIDE(const String &p_path, const String &p_feature, Key p_keycode, bool p_physical) { - ERR_FAIL_NULL_MSG(EditorSettings::get_singleton(), "EditorSettings not instantiated yet."); + if (!EditorSettings::get_singleton()) { + return; + } Ref<Shortcut> sc = EditorSettings::get_singleton()->get_shortcut(p_path); ERR_FAIL_COND_MSG(!sc.is_valid(), "Used ED_SHORTCUT_OVERRIDE with invalid shortcut: " + p_path); @@ -1617,7 +1671,9 @@ void ED_SHORTCUT_OVERRIDE(const String &p_path, const String &p_feature, Key p_k } void ED_SHORTCUT_OVERRIDE_ARRAY(const String &p_path, const String &p_feature, const PackedInt32Array &p_keycodes, bool p_physical) { - ERR_FAIL_NULL_MSG(EditorSettings::get_singleton(), "EditorSettings not instantiated yet."); + if (!EditorSettings::get_singleton()) { + return; + } Ref<Shortcut> sc = EditorSettings::get_singleton()->get_shortcut(p_path); ERR_FAIL_COND_MSG(!sc.is_valid(), "Used ED_SHORTCUT_OVERRIDE_ARRAY with invalid shortcut: " + p_path); |