From e9c918eac62bf7b83666efba0b880af1c70954ec Mon Sep 17 00:00:00 2001 From: Chaosus Date: Sun, 2 Nov 2025 15:46:06 +0300 Subject: [PATCH] Add a style option button to quick settings --- .../project_manager/quick_settings_dialog.cpp | 32 +++++++++++++++++++ .../project_manager/quick_settings_dialog.h | 3 ++ 2 files changed, 35 insertions(+) diff --git a/editor/project_manager/quick_settings_dialog.cpp b/editor/project_manager/quick_settings_dialog.cpp index c21355f16a..53e186cc53 100644 --- a/editor/project_manager/quick_settings_dialog.cpp +++ b/editor/project_manager/quick_settings_dialog.cpp @@ -47,6 +47,7 @@ void QuickSettingsDialog::_fetch_setting_values() { #ifndef ANDROID_ENABLED editor_languages.clear(); #endif + editor_styles.clear(); editor_themes.clear(); editor_scales.clear(); editor_network_modes.clear(); @@ -62,6 +63,8 @@ void QuickSettingsDialog::_fetch_setting_values() { #ifndef ANDROID_ENABLED editor_languages = pi.hint_string.split(";", false); #endif + } else if (pi.name == "interface/theme/style") { + editor_styles = pi.hint_string.split(","); } else if (pi.name == "interface/theme/color_preset") { editor_themes = pi.hint_string.split(","); } else if (pi.name == "interface/editor/display_scale") { @@ -93,6 +96,17 @@ void QuickSettingsDialog::_update_current_values() { } } #endif + // Style options. + { + const String current_style = EDITOR_GET("interface/theme/style"); + + for (int i = 0; i < editor_styles.size(); i++) { + const String &style_value = editor_styles[i]; + if (current_style == style_value) { + style_option_button->select(i); + } + } + } // Theme options. { @@ -185,6 +199,11 @@ void QuickSettingsDialog::_language_selected(int p_id) { } #endif +void QuickSettingsDialog::_style_selected(int p_id) { + const String selected_style = style_option_button->get_item_text(p_id); + _set_setting_value("interface/theme/style", selected_style); +} + void QuickSettingsDialog::_theme_selected(int p_id) { const String selected_theme = theme_option_button->get_item_text(p_id); _set_setting_value("interface/theme/color_preset", selected_theme); @@ -316,6 +335,19 @@ QuickSettingsDialog::QuickSettingsDialog() { _add_setting_control(TTRC("Language"), language_option_button); } #endif + // Style options. + { + style_option_button = memnew(OptionButton); + style_option_button->set_fit_to_longest_item(false); + style_option_button->connect(SceneStringName(item_selected), callable_mp(this, &QuickSettingsDialog::_style_selected)); + + for (int i = 0; i < editor_styles.size(); i++) { + const String &style_value = editor_styles[i]; + style_option_button->add_item(style_value, i); + } + + _add_setting_control(TTRC("Style"), style_option_button); + } // Theme options. { diff --git a/editor/project_manager/quick_settings_dialog.h b/editor/project_manager/quick_settings_dialog.h index f5b8111a8c..3f8c99eaef 100644 --- a/editor/project_manager/quick_settings_dialog.h +++ b/editor/project_manager/quick_settings_dialog.h @@ -46,6 +46,7 @@ class QuickSettingsDialog : public AcceptDialog { #ifndef ANDROID_ENABLED Vector editor_languages; #endif + Vector editor_styles; Vector editor_themes; Vector editor_scales; Vector editor_network_modes; @@ -65,6 +66,7 @@ class QuickSettingsDialog : public AcceptDialog { // Also, the dropdown it spawns is very tall and can't be scrolled without a hardware mouse. OptionButton *language_option_button = nullptr; #endif + OptionButton *style_option_button = nullptr; OptionButton *theme_option_button = nullptr; OptionButton *scale_option_button = nullptr; OptionButton *network_mode_option_button = nullptr; @@ -77,6 +79,7 @@ class QuickSettingsDialog : public AcceptDialog { #ifndef ANDROID_ENABLED void _language_selected(int p_id); #endif + void _style_selected(int p_id); void _theme_selected(int p_id); void _scale_selected(int p_id); void _network_mode_selected(int p_id);