From c889f1bd36c21a70f00c397815f5238725fd6e28 Mon Sep 17 00:00:00 2001 From: flodavid Date: Thu, 18 Jan 2024 20:51:39 +0000 Subject: [PATCH 1/6] Load custom Qt themes from yuzu data directory - Directory is qt_themes, each theme must be in one folder - It should contain a file "style.qss" - It may contain an "icons" sub-directory, to override included icons (with files like mytheme/icons/colorful/48x48/star.png for example) - Directories ending by "_dark" are reserved for dark variant icons. They are not listed as themes in the UI. - If theme directory contains "dark" or "midnight", theme will be considered dark --- src/common/fs/fs_paths.h | 3 +- src/common/fs/path_util.cpp | 3 +- src/common/fs/path_util.h | 3 +- src/suyu/configuration/configure_ui.cpp | 27 +++++++++-- src/suyu/configuration/qt_config.cpp | 11 ++--- src/suyu/debugger/wait_tree.cpp | 5 +- src/suyu/main.cpp | 64 +++++++++++++++++-------- src/suyu/main.h | 6 +++ src/suyu/uisettings.cpp | 19 ++++---- src/suyu/uisettings.h | 23 ++++----- 10 files changed, 102 insertions(+), 62 deletions(-) diff --git a/src/common/fs/fs_paths.h b/src/common/fs/fs_paths.h index 3720976efe..de06571a6f 100644 --- a/src/common/fs/fs_paths.h +++ b/src/common/fs/fs_paths.h @@ -15,6 +15,7 @@ #define CONFIG_DIR "config" #define CRASH_DUMPS_DIR "crash_dumps" #define DUMP_DIR "dump" +#define ICONS_DIR "icons" #define KEYS_DIR "keys" #define LOAD_DIR "load" #define LOG_DIR "log" @@ -24,7 +25,7 @@ #define SDMC_DIR "sdmc" #define SHADER_DIR "shader" #define TAS_DIR "tas" -#define ICONS_DIR "icons" +#define THEMES_DIR "qt_themes" // suyu-specific files diff --git a/src/common/fs/path_util.cpp b/src/common/fs/path_util.cpp index e23f53fb9d..9362e18c39 100644 --- a/src/common/fs/path_util.cpp +++ b/src/common/fs/path_util.cpp @@ -121,6 +121,7 @@ public: GenerateSuyuPath(SuyuPath::ConfigDir, suyu_path_config); GenerateSuyuPath(SuyuPath::CrashDumpsDir, suyu_path / CRASH_DUMPS_DIR); GenerateSuyuPath(SuyuPath::DumpDir, suyu_path / DUMP_DIR); + GenerateSuyuPath(SuyuPath::IconsDir, suyu_path / ICONS_DIR); GenerateSuyuPath(SuyuPath::KeysDir, suyu_path / KEYS_DIR); GenerateSuyuPath(SuyuPath::LoadDir, suyu_path / LOAD_DIR); GenerateSuyuPath(SuyuPath::LogDir, suyu_path / LOG_DIR); @@ -130,7 +131,7 @@ public: GenerateSuyuPath(SuyuPath::SDMCDir, suyu_path / SDMC_DIR); GenerateSuyuPath(SuyuPath::ShaderDir, suyu_path / SHADER_DIR); GenerateSuyuPath(SuyuPath::TASDir, suyu_path / TAS_DIR); - GenerateSuyuPath(SuyuPath::IconsDir, suyu_path / ICONS_DIR); + GenerateSuyuPath(SuyuPath::ThemesDir, suyu_path / THEMES_DIR); } private: diff --git a/src/common/fs/path_util.h b/src/common/fs/path_util.h index 2076fbcd43..1ac4a26eea 100644 --- a/src/common/fs/path_util.h +++ b/src/common/fs/path_util.h @@ -17,6 +17,7 @@ enum class SuyuPath { ConfigDir, // Where config files are stored. CrashDumpsDir, // Where crash dumps are stored. DumpDir, // Where dumped data is stored. + IconsDir, // Where Icons for Windows shortcuts are stored. KeysDir, // Where key files are stored. LoadDir, // Where cheat/mod files are stored. LogDir, // Where log files are stored. @@ -26,7 +27,7 @@ enum class SuyuPath { SDMCDir, // Where the emulated SDMC is stored. ShaderDir, // Where shaders are stored. TASDir, // Where TAS scripts are stored. - IconsDir, // Where Icons for Windows shortcuts are stored. + ThemesDir, // Where users should put their custom themes }; /** diff --git a/src/suyu/configuration/configure_ui.cpp b/src/suyu/configuration/configure_ui.cpp index a3648c5b1c..046b34721e 100644 --- a/src/suyu/configuration/configure_ui.cpp +++ b/src/suyu/configuration/configure_ui.cpp @@ -106,11 +106,31 @@ ConfigureUi::ConfigureUi(Core::System& system_, QWidget* parent) InitializeLanguageComboBox(); - for (const auto& theme : UISettings::themes) { + for (const auto& theme : UISettings::included_themes) { ui->theme_combobox->addItem(QString::fromUtf8(theme.first), QString::fromUtf8(theme.second)); } + // Add custom styles stored in yuzu directory + const QDir themes_local_dir( + QString::fromStdString(Common::FS::GetSuyuPathString(Common::FS::SuyuPath::ThemesDir))); + for (const QString& theme_dir : + themes_local_dir.entryList(QDir::NoDot | QDir::NoDotDot | QDir::Dirs)) { + // folders ending with "_dark" are reserved for dark variant icons of other styles + if (theme_dir.endsWith(QStringLiteral("_dark"))) { + continue; + } + // Split at _ and capitalize words in name + QStringList cased_name; + for (QString word : theme_dir.split(QChar::fromLatin1('_'))) { + cased_name.append(word.at(0).toUpper() + word.mid(1)); + } + QString theme_name = cased_name.join(QChar::fromLatin1(' ')); + theme_name += QStringLiteral(" (%1)").arg(tr("Custom")); + + ui->theme_combobox->addItem(theme_name, themes_local_dir.filePath(theme_dir)); + } + InitializeIconSizeComboBox(); InitializeRowComboBoxes(); @@ -164,7 +184,7 @@ ConfigureUi::~ConfigureUi() = default; void ConfigureUi::ApplyConfiguration() { UISettings::values.theme = - ui->theme_combobox->itemData(ui->theme_combobox->currentIndex()).toString().toStdString(); + ui->theme_combobox->itemData(ui->theme_combobox->currentIndex()).toString(); UISettings::values.show_add_ons = ui->show_add_ons->isChecked(); UISettings::values.show_compat = ui->show_compat->isChecked(); UISettings::values.show_size = ui->show_size->isChecked(); @@ -191,8 +211,7 @@ void ConfigureUi::RequestGameListUpdate() { } void ConfigureUi::SetConfiguration() { - ui->theme_combobox->setCurrentIndex( - ui->theme_combobox->findData(QString::fromStdString(UISettings::values.theme))); + ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme)); ui->language_combobox->setCurrentIndex(ui->language_combobox->findData( QString::fromStdString(UISettings::values.language.GetValue()))); ui->show_add_ons->setChecked(UISettings::values.show_add_ons.GetValue()); diff --git a/src/suyu/configuration/qt_config.cpp b/src/suyu/configuration/qt_config.cpp index 37951b9c84..2868db4ebb 100644 --- a/src/suyu/configuration/qt_config.cpp +++ b/src/suyu/configuration/qt_config.cpp @@ -260,9 +260,8 @@ void QtConfig::ReadShortcutValues() { void QtConfig::ReadUIValues() { BeginGroup(Settings::TranslateCategory(Settings::Category::Ui)); - UISettings::values.theme = ReadStringSetting( - std::string("theme"), - std::string(UISettings::themes[static_cast(UISettings::default_theme)].second)); + UISettings::values.theme = QString::fromStdString( + ReadStringSetting(std::string("theme"), std::string(UISettings::default_theme))); ReadUIGamelistValues(); ReadUILayoutValues(); @@ -468,10 +467,8 @@ void QtConfig::SaveUIValues() { WriteCategory(Settings::Category::Ui); WriteCategory(Settings::Category::UiGeneral); - WriteStringSetting( - std::string("theme"), UISettings::values.theme, - std::make_optional(std::string( - UISettings::themes[static_cast(UISettings::default_theme)].second))); + WriteStringSetting(std::string("theme"), UISettings::values.theme.toStdString(), + std::make_optional(std::string(UISettings::default_theme))); SaveUIGamelistValues(); SaveUILayoutValues(); diff --git a/src/suyu/debugger/wait_tree.cpp b/src/suyu/debugger/wait_tree.cpp index b339862ba7..b5ee4bcfdf 100644 --- a/src/suyu/debugger/wait_tree.cpp +++ b/src/suyu/debugger/wait_tree.cpp @@ -35,9 +35,8 @@ constexpr std::array, 10> WaitTreeColors{{ }}; bool IsDarkTheme() { - const auto& theme = UISettings::values.theme; - return theme == std::string("qdarkstyle") || theme == std::string("qdarkstyle_midnight_blue") || - theme == std::string("colorful_dark") || theme == std::string("colorful_midnight_blue"); + return UISettings::values.theme.contains(QStringLiteral("dark")) || + UISettings::values.theme.contains(QStringLiteral("midnight")); } } // namespace diff --git a/src/suyu/main.cpp b/src/suyu/main.cpp index 9a3ee7f662..030e4ae511 100644 --- a/src/suyu/main.cpp +++ b/src/suyu/main.cpp @@ -3542,7 +3542,7 @@ void GMainWindow::ResetWindowSize1080() { } void GMainWindow::OnConfigure() { - const auto old_theme = UISettings::values.theme; + const QString old_theme = UISettings::values.theme; const bool old_discord_presence = UISettings::values.enable_discord_presence.GetValue(); const auto old_language_index = Settings::values.language_index.GetValue(); #ifdef __unix__ @@ -4812,9 +4812,8 @@ static void AdjustLinkColor() { } void GMainWindow::UpdateUITheme() { - const QString default_theme = QString::fromUtf8( - UISettings::themes[static_cast(UISettings::default_theme)].second); - QString current_theme = QString::fromStdString(UISettings::values.theme); + QString default_theme = QString::fromStdString(UISettings::default_theme.data()); + QString current_theme = UISettings::values.theme; if (current_theme.isEmpty()) { current_theme = default_theme; @@ -4825,6 +4824,7 @@ void GMainWindow::UpdateUITheme() { AdjustLinkColor(); #else if (current_theme == QStringLiteral("default") || current_theme == QStringLiteral("colorful")) { + LOG_INFO(Frontend, "Theme is default or colorful: {}", current_theme.toStdString()); QIcon::setThemeName(current_theme == QStringLiteral("colorful") ? current_theme : startup_icon_theme); QIcon::setThemeSearchPaths(QStringList(default_theme_paths)); @@ -4832,35 +4832,57 @@ void GMainWindow::UpdateUITheme() { current_theme = QStringLiteral("default_dark"); } } else { + LOG_INFO(Frontend, "Theme is NOT default or colorful: {}", current_theme.toStdString()); QIcon::setThemeName(current_theme); - QIcon::setThemeSearchPaths(QStringList(QStringLiteral(":/icons"))); + // Use icon resources from application binary and current theme subdirectory if it exists + QStringList theme_paths; + theme_paths << QString::fromStdString(":/icons") + << QStringLiteral("%1/%2/icons") + .arg(QString::fromStdString( + Common::FS::GetYuzuPathString(Common::FS::YuzuPath::ThemesDir)), + current_theme); + QIcon::setThemeSearchPaths(theme_paths); AdjustLinkColor(); } #endif if (current_theme != default_theme) { - QString theme_uri{QStringLiteral(":%1/style.qss").arg(current_theme)}; - QFile f(theme_uri); - if (!f.open(QFile::ReadOnly | QFile::Text)) { - LOG_ERROR(Frontend, "Unable to open style \"{}\", fallback to the default theme", - UISettings::values.theme); - current_theme = default_theme; + QString theme_uri{current_theme + QStringLiteral("style.qss")}; + if (tryLoadStylesheet(theme_uri)) { + return; } - } - QString theme_uri{QStringLiteral(":%1/style.qss").arg(current_theme)}; - QFile f(theme_uri); - if (f.open(QFile::ReadOnly | QFile::Text)) { - QTextStream ts(&f); - qApp->setStyleSheet(ts.readAll()); - setStyleSheet(ts.readAll()); - } else { + // Reading new theme failed, loading default stylesheet + LOG_ERROR(Frontend, "Unable to open style \"{}\", fallback to the default theme", + current_theme.toStdString()); + + current_theme = default_theme; + theme_uri = QStringLiteral(":%1/style.qss").arg(default_theme); + if (tryLoadStylesheet(theme_uri)) { + return; + } + + // Reading default failed, loading empty stylesheet LOG_ERROR(Frontend, "Unable to set style \"{}\", stylesheet file not found", - UISettings::values.theme); + current_theme.toStdString()); + qApp->setStyleSheet({}); setStyleSheet({}); } } +bool GMainWindow::tryLoadStylesheet(const QString& theme_path) { + QFile theme_file(theme_path); + if (theme_file.open(QFile::ReadOnly | QFile::Text)) { + LOG_INFO(Frontend, "Loading style in: {}", theme_path.toStdString()); + QTextStream ts(&theme_file); + qApp->setStyleSheet(ts.readAll()); + setStyleSheet(ts.readAll()); + return true; + } + // Opening the file failed + return false; +} + void GMainWindow::LoadTranslation() { bool loaded; @@ -4919,7 +4941,7 @@ void GMainWindow::changeEvent(QEvent* event) { // UpdateUITheme is a decent work around if (event->type() == QEvent::PaletteChange) { const QPalette test_palette(qApp->palette()); - const QString current_theme = QString::fromStdString(UISettings::values.theme); + const QString& current_theme = UISettings::values.theme; // Keeping eye on QPalette::Window to avoid looping. QPalette::Text might be useful too static QColor last_window_color; const QColor window_color = test_palette.color(QPalette::Active, QPalette::Window); diff --git a/src/suyu/main.h b/src/suyu/main.h index e20950e238..6bbcdd7c58 100644 --- a/src/suyu/main.h +++ b/src/suyu/main.h @@ -165,6 +165,12 @@ class GMainWindow : public QMainWindow { CREATE_SHORTCUT_MSGBOX_APPVOLATILE_WARNING, }; + /** + * Try to load a stylesheet from its path. If the path starts with ":/", its embedded in the app + * @returns true if the text file could be opened as read-only + */ + bool tryLoadStylesheet(const QString& theme_path); + public: void filterBarSetChecked(bool state); void UpdateUITheme(); diff --git a/src/suyu/uisettings.cpp b/src/suyu/uisettings.cpp index 60d4063c8c..e382afdf61 100644 --- a/src/suyu/uisettings.cpp +++ b/src/suyu/uisettings.cpp @@ -22,19 +22,18 @@ namespace FS = Common::FS; namespace UISettings { -const Themes themes{{ - {"Default", "default"}, - {"Default Colorful", "colorful"}, - {"Dark", "qdarkstyle"}, - {"Dark Colorful", "colorful_dark"}, - {"Midnight Blue", "qdarkstyle_midnight_blue"}, - {"Midnight Blue Colorful", "colorful_midnight_blue"}, +const Themes included_themes{{ + {"Default", ":/default/"}, + {"Default Colorful", ":/colorful/"}, + {"Dark", ":/qdarkstyle/"}, + {"Dark Colorful", ":/colorful_dark/"}, + {"Midnight Blue", ":/qdarkstyle_midnight_blue/"}, + {"Midnight Blue Colorful", ":/colorful_midnight_blue/"}, }}; bool IsDarkTheme() { - const auto& theme = UISettings::values.theme; - return theme == std::string("qdarkstyle") || theme == std::string("qdarkstyle_midnight_blue") || - theme == std::string("colorful_dark") || theme == std::string("colorful_midnight_blue"); + return UISettings::values.theme.contains(QStringLiteral("dark")) || + UISettings::values.theme.contains(QStringLiteral("midnight")); } Values values = {}; diff --git a/src/suyu/uisettings.h b/src/suyu/uisettings.h index cab889680f..7713c8c73a 100644 --- a/src/suyu/uisettings.h +++ b/src/suyu/uisettings.h @@ -35,6 +35,10 @@ extern template class Setting; namespace UISettings { +/** + * Check if the theme is dark + * @returns true if the current theme contains the string "dark" in its name + */ bool IsDarkTheme(); struct ContextualShortcut { @@ -50,25 +54,16 @@ struct Shortcut { ContextualShortcut shortcut; }; -enum class Theme { - Default, - DefaultColorful, - Dark, - DarkColorful, - MidnightBlue, - MidnightBlueColorful, -}; - -static constexpr Theme default_theme{ +static constexpr std::string_view default_theme{ #ifdef _WIN32 - Theme::DarkColorful + "colorful_dark" #else - Theme::DefaultColorful + "colorful" #endif }; using Themes = std::array, 6>; -extern const Themes themes; +extern const Themes included_themes; struct GameDir { std::string path; @@ -160,7 +155,7 @@ struct Values { QStringList recent_files; Setting language{linkage, {}, "language", Category::Paths}; - std::string theme; + QString theme; // Shortcut name std::vector shortcuts; From 0b2409d1bdd383feb84f160f3dabf679ce6bd62b Mon Sep 17 00:00:00 2001 From: flodavid Date: Sun, 4 Feb 2024 04:04:47 +0100 Subject: [PATCH 2/6] Automatic dark theme switching for Windows and Linux - Windows dark theme uses "fusion" style, which is better suited, but has minor differences - Improve OS theme detection - Linux: - Listen for OS color schemes changes on D-Bus - Read OS scheme for D-Bus. Fallback with gsettings, reading org.gnome.desktop.interface. First "color-scheme" key, then "gtk-theme". Finally, fallback to checking window palette - Windows (dark mode detection was not implemented before): - Force dark palette when OS uses dark mode by setting QT_QPA_PLATFORM to "windows:darkmode=2" - This enables to detect dark mode by checking the window palette - Improve theming capabilites: - Linux uses custom palette when dark mode is detected. By using palette(xxx) in .qss files, there is no need to create a dark stylesheet - Allow themes to have stylesheet variants, dark.qss and light.qss - If current mode is dark, use dark icons for controller and keyboard applets - Add "dark" property to RendererStatusBarButton and GPUStatusBarButton, set to true when dark mode is used. Allows to have distinct colors for GPU API and accuracy buttons depending on dark mode or not - Enable all themes to have dark icon alternatives, not just "default" and "colorful" - If dark mode, icons are loaded from the directory "THEME-NAME_dark/icons" - If current mode is dark, use dark icons for controller and keyboard applets - Only qdarkstyle, qdarkstyle_midnight_blue, colorful_dark and colorful_midnight_blue used elements specific to dark themes --- dist/qt_themes/default/style.qss | 88 +++-- src/suyu/applets/qt_controller.cpp | 16 +- src/suyu/applets/qt_software_keyboard.cpp | 4 +- src/suyu/main.cpp | 392 ++++++++++++++++------ src/suyu/main.h | 48 ++- src/suyu/startup_checks.cpp | 5 + src/suyu/uisettings.cpp | 5 - src/suyu/uisettings.h | 14 +- 8 files changed, 414 insertions(+), 158 deletions(-) diff --git a/dist/qt_themes/default/style.qss b/dist/qt_themes/default/style.qss index 921950c6c0..bd9c1964cf 100644 --- a/dist/qt_themes/default/style.qss +++ b/dist/qt_themes/default/style.qss @@ -1,3 +1,14 @@ +/* +* SPDX-FileCopyrightText: 2018 yuzu Emulator Project +* SPDX-FileCopyrightText: 2024 suyu Emulator Project +* SPDX-License-Identifier: GPL-2.0-or-later +*/ + +QWidget:item:hover { + background-color: #28668d; + color: #eff0f1; +} + QAbstractSpinBox { min-height: 19px; } @@ -94,21 +105,21 @@ QGroupBox#groupPlayer5Connected:checked, QGroupBox#groupPlayer6Connected:checked, QGroupBox#groupPlayer7Connected:checked, QGroupBox#groupPlayer8Connected:checked { - background-color: #f5f5f5; + background-color: palette(window); } QWidget#topControllerApplet { - border-bottom: 1px solid #828790 + border-bottom: 1px solid palette(dark) } QWidget#bottomPerGameInput, QWidget#bottomControllerApplet { - border-top: 1px solid #828790 + border-top: 1px solid palette(dark) } QWidget#topPerGameInput, QWidget#middleControllerApplet { - background-color: #fff; + background-color: palette(base) } QWidget#topPerGameInput QComboBox, @@ -345,7 +356,7 @@ QWidget#lineDialog { QStackedWidget#bottomOSK, QWidget#contentDialog, QWidget#contentRichDialog { - background: rgba(240, 240, 240, 1); + background: palette(base); } QWidget#contentDialog, @@ -402,6 +413,7 @@ QWidget#inputOSK QLineEdit { background: transparent; border: none; color: #ccc; + padding: 0px; } QWidget#inputBoxOSK { @@ -431,6 +443,27 @@ QWidget#boxOSK QLabel#label_characters_box { color: #ccc; } +QWidget#buttonsDialog, +QWidget#buttonsRichDialog, +QWidget#mainOSK, +QWidget#headerOSK, +QWidget#normalOSK, +QWidget#shiftOSK, +QWidget#numOSK, +QWidget#subOSK, +QWidget#inputOSK, +QWidget#inputBoxOSK, +QWidget#charactersOSK, +QWidget#charactersBoxOSK, +QWidget#legendOSK, +QWidget#legendOSK QWidget, +QWidget#legendOSKshift, +QWidget#legendOSKshift QWidget, +QWidget#legendOSKnum, +QWidget#legendOSKnum QWidget { + background: transparent; +} + QWidget#contentDialog QLabel#label_title, QWidget#contentRichDialog QLabel#label_title_rich { color: #888; @@ -471,8 +504,8 @@ QDialog#OverlayDialog QPushButton:pressed { } QDialog#QtSoftwareKeyboardDialog QPushButton { - background: rgba(232, 232, 232, 1); - border: 2px solid rgba(240, 240, 240, 1); + background: palette(window); + border: 2px solid palette(base); } QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift, @@ -481,27 +514,35 @@ QDialog#QtSoftwareKeyboardDialog QPushButton#button_space, QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift_shift, QDialog#QtSoftwareKeyboardDialog QPushButton#button_return_shift, QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift { - background: rgba(218, 218, 218, 1); - border: 2px solid rgba(240, 240, 240, 1); + background: palette(alternate-base); + border: 2px solid palette(base); } QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace, QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift, QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num { - color: rgba(240, 240, 240, 1); - background: rgba(44, 44, 44, 1); - border: 2px solid rgba(240, 240, 240, 1); + color: palette(base); + background: palette(mid); + border: 2px solid palette(base); } QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok, QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift, QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num { - color: rgba(240, 240, 240, 1); - background: rgba(49, 79, 239, 1); - border: 2px solid rgba(240, 240, 240, 1); + color: palette(base); + background: palette(highlight); + border: 2px solid palette(base); } QDialog#QtSoftwareKeyboardDialog QPushButton:focus, +QDialog#QtSoftwareKeyboardDialog QPushButton:hover +{ + background: palette(base); + border: 5px solid rgba(148, 250, 202, 1); + border-radius: 6px; + outline: none; +} + QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:focus, QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift:focus, QDialog#QtSoftwareKeyboardDialog QPushButton#button_space:focus, @@ -514,8 +555,6 @@ QDialog#QtSoftwareKeyboardDialog QPushButton#button_return_shift:focus, QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift:focus, QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num:focus, QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:focus, - -QDialog#QtSoftwareKeyboardDialog QPushButton:hover, QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:hover, QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift:hover, QDialog#QtSoftwareKeyboardDialog QPushButton#button_space:hover, @@ -524,12 +563,11 @@ QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace:hover, QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift:hover, QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift_shift:hover, QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_return_shift:hover, QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift:hover, QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:hover { - color: rgba(0, 0, 0, 1); - background: rgba(255, 255, 255, 1); +QDialog#QtSoftwareKeyboardDialog QPushButton#button_return_shift:hover, +QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:hover +{ border: 5px solid rgba(148, 250, 202, 1); border-radius: 6px; outline: none; @@ -548,7 +586,7 @@ QDialog#QtSoftwareKeyboardDialog QPushButton#button_return_shift:pressed, QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift:pressed, QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num:pressed, QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:pressed { - color: rgba(240, 240, 240, 1); + color: palette(base); background: rgba(150, 150, 150, 1); border: 5px solid rgba(148, 250, 202, 1); border-radius: 6px; @@ -653,8 +691,8 @@ QDialog#QtSoftwareKeyboardDialog QPushButton#button_return_shift:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:disabled { - color: rgba(164, 164, 164, 1); - background-color: rgba(218, 218, 218, 1); + color: palette(midlight); + background-color: palette(alternate-base); } QDialog#QtSoftwareKeyboardDialog QPushButton#button_at:disabled, @@ -671,7 +709,7 @@ QDialog#QtSoftwareKeyboardDialog QPushButton#button_8:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_9:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_0:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_return:disabled { - color: rgba(164, 164, 164, 1); + color: palette(midlight); } QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:disabled, diff --git a/src/suyu/applets/qt_controller.cpp b/src/suyu/applets/qt_controller.cpp index f27ab835e5..d41d23eceb 100644 --- a/src/suyu/applets/qt_controller.cpp +++ b/src/suyu/applets/qt_controller.cpp @@ -384,10 +384,12 @@ bool QtControllerSelectorDialog::CheckIfParametersMet() { void QtControllerSelectorDialog::SetSupportedControllers() { const QString theme = [] { - if (QIcon::themeName().contains(QStringLiteral("dark"))) { - return QStringLiteral("_dark"); - } else if (QIcon::themeName().contains(QStringLiteral("midnight"))) { + if (QIcon::themeName().contains(QStringLiteral("midnight"))) { return QStringLiteral("_midnight"); + } else if (GMainWindow::CheckDarkMode() || + QIcon::themeName().contains(QStringLiteral("dark"))) { + // Use dark icons if current OS mode is dark, or the theme contains "dark" in its name + return QStringLiteral("_dark"); } else { return QString{}; } @@ -572,10 +574,12 @@ void QtControllerSelectorDialog::UpdateControllerIcon(std::size_t player_index) } const QString theme = [] { - if (QIcon::themeName().contains(QStringLiteral("dark"))) { - return QStringLiteral("_dark"); - } else if (QIcon::themeName().contains(QStringLiteral("midnight"))) { + if (QIcon::themeName().contains(QStringLiteral("midnight"))) { return QStringLiteral("_midnight"); + } else if (GMainWindow::CheckDarkMode() || + QIcon::themeName().contains(QStringLiteral("dark"))) { + // Use dark icons if current OS mode is dark, or the theme contains "dark" in its name + return QStringLiteral("_dark"); } else { return QString{}; } diff --git a/src/suyu/applets/qt_software_keyboard.cpp b/src/suyu/applets/qt_software_keyboard.cpp index a1bcfa717e..ca7169e2a2 100644 --- a/src/suyu/applets/qt_software_keyboard.cpp +++ b/src/suyu/applets/qt_software_keyboard.cpp @@ -823,7 +823,9 @@ void QtSoftwareKeyboardDialog::SetControllerImage() { handheld->IsConnected() ? handheld->GetNpadStyleIndex() : player_1->GetNpadStyleIndex(); const QString theme = [] { - if (QIcon::themeName().contains(QStringLiteral("dark")) || + // Use dark icons if current OS mode is dark, or the theme contains "dark", or "midnight" in + // its name + if (GMainWindow::CheckDarkMode() || QIcon::themeName().contains(QStringLiteral("dark")) || QIcon::themeName().contains(QStringLiteral("midnight"))) { return QStringLiteral("_dark"); } else { diff --git a/src/suyu/main.cpp b/src/suyu/main.cpp index 030e4ae511..e6d14717cf 100644 --- a/src/suyu/main.cpp +++ b/src/suyu/main.cpp @@ -9,7 +9,9 @@ #include #include #include +#include #include + #include "core/hle/service/am/applet_manager.h" #include "core/loader/nca.h" #include "core/loader/nro.h" @@ -20,6 +22,9 @@ #endif #ifdef __unix__ #include +#include +#include +#include #include #include "common/linux/gamemode.h" #endif @@ -271,18 +276,6 @@ static void OverrideWindowsFont() { } #endif -bool GMainWindow::CheckDarkMode() { -#ifdef __unix__ - const QPalette test_palette(qApp->palette()); - const QColor text_color = test_palette.color(QPalette::Active, QPalette::Text); - const QColor window_color = test_palette.color(QPalette::Active, QPalette::Window); - return (text_color.value() > window_color.value()); -#else - // TODO: Windows - return false; -#endif // __unix__ -} - GMainWindow::GMainWindow(std::unique_ptr config_, bool has_broken_vulkan) : ui{std::make_unique()}, system{std::make_unique()}, input_subsystem{std::make_shared()}, config{std::move(config_)}, @@ -303,8 +296,6 @@ GMainWindow::GMainWindow(std::unique_ptr config_, bool has_broken_vulk ui->setupUi(this); statusBar()->hide(); - // Check dark mode before a theme is loaded - os_dark_mode = CheckDarkMode(); startup_icon_theme = QIcon::themeName(); // fallback can only be set once, colorful theme icons are okay on both light/dark QIcon::setFallbackThemeName(QStringLiteral("colorful")); @@ -329,6 +320,7 @@ GMainWindow::GMainWindow(std::unique_ptr config_, bool has_broken_vulk SetDefaultUIGeometry(); RestoreUIState(); + UpdateUITheme(); ConnectMenuEvents(); ConnectWidgetEvents(); @@ -449,7 +441,10 @@ GMainWindow::GMainWindow(std::unique_ptr config_, bool has_broken_vulk SDL_EnableScreenSaver(); #endif +#ifdef __unix__ SetupPrepareForSleep(); + ListenColorSchemeChange(); +#endif QStringList args = QApplication::arguments(); @@ -1647,8 +1642,8 @@ void GMainWindow::OnDisplayTitleBars(bool show) { } } -void GMainWindow::SetupPrepareForSleep() { #ifdef __unix__ +void GMainWindow::SetupPrepareForSleep() { auto bus = QDBusConnection::systemBus(); if (bus.isConnected()) { const bool success = bus.connect( @@ -1662,8 +1657,8 @@ void GMainWindow::SetupPrepareForSleep() { } else { LOG_WARNING(Frontend, "QDBusConnection system bus is not connected"); } -#endif // __unix__ } +#endif // __unix__ void GMainWindow::OnPrepareForSleep(bool prepare_sleep) { if (emu_thread == nullptr) { @@ -4799,9 +4794,106 @@ void GMainWindow::filterBarSetChecked(bool state) { emit(OnToggleFilterBar()); } +void GMainWindow::UpdateUITheme() { + LOG_DEBUG(Frontend, "Updating UI"); + QString default_theme = QString::fromStdString(UISettings::default_theme.data()); + QString current_theme = UISettings::values.theme; + if (current_theme.isEmpty()) { + current_theme = default_theme; + } + const bool current_dark_mode = CheckDarkMode(); + + UpdateIcons(current_theme); + + /* Find the stylesheet to load */ + if (TryLoadStylesheet(current_theme)) { + return; + } + + // Reading new theme failed, loading default stylesheet + LOG_ERROR(Frontend, "Unable to open style \"{}\", fallback to the default theme", + current_theme.toStdString()); + + if (TryLoadStylesheet(QStringLiteral(":/%1").arg(default_theme))) { + return; + } + + // Reading default failed, loading empty stylesheet + LOG_ERROR(Frontend, "Unable to set default style, stylesheet file not found"); + + qApp->setStyleSheet({}); + setStyleSheet({}); +} + +void GMainWindow::UpdateIcons(const QString& theme_path) { + // Get the theme directory from its path + std::size_t last_slash = theme_path.toStdString().find_last_of("/"); + QString theme_dir = QString::fromStdString(theme_path.toStdString().substr(last_slash + 1)); + + // Append _dark to the theme name to use dark variant icons + if (CheckDarkMode()) { + LOG_DEBUG(Frontend, "Using icons from: {}", theme_dir.toStdString() + "_dark"); + QIcon::setThemeName(theme_dir + QStringLiteral("_dark")); + } else { + LOG_DEBUG(Frontend, "Using icons from: {}", theme_dir.toStdString()); + QIcon::setThemeName(theme_dir); + } + + const QString theme_directory{ + QString::fromStdString(Common::FS::GetSuyuPathString(Common::FS::SuyuPath::ThemesDir))}; + + // Set path for default icons + // Use icon resources from application binary and current theme local subdirectory, if it exists + QStringList theme_paths; + theme_paths << QString::fromStdString(":/icons") << QStringLiteral("%1").arg(theme_directory); + QIcon::setThemeSearchPaths(theme_paths); + + // Change current directory, to allow user themes to add their own icons + QDir::setCurrent(QStringLiteral("%1/%2").arg(theme_directory, UISettings::values.theme)); + + emit UpdateThemedIcons(); +} + +bool GMainWindow::TryLoadStylesheet(const QString& theme_uri) { + QString style_path; + + // Use themed stylesheet if it exists + if (CheckDarkMode()) { + style_path = theme_uri + QStringLiteral("/dark.qss"); + } else { + style_path = theme_uri + QStringLiteral("/light.qss"); + } + if (!QFile::exists(style_path)) { + LOG_INFO(Frontend, "Themed (light/dark) stylesheet could not be found, using default one"); + // Use common stylesheet if themed one does not exist + style_path = theme_uri + QStringLiteral("/style.qss"); + } + + // Loading stylesheet + QFile style_file(style_path); + if (style_file.open(QFile::ReadOnly | QFile::Text)) { + // Update the color palette before applying the stylesheet + UpdateThemePalette(); + + LOG_INFO(Frontend, "Loading stylesheet in: {}", theme_uri.toStdString()); + QTextStream ts_theme(&style_file); + qApp->setStyleSheet(ts_theme.readAll()); + setStyleSheet(ts_theme.readAll()); + SetCustomStylesheet(); + + return true; + } + // Opening the file failed + return false; +} + +bool GMainWindow::TryLoadStylesheet(const std::filesystem::path& theme_path) { + return TryLoadStylesheet(QString::fromStdString(theme_path.string() + "/")); +} + static void AdjustLinkColor() { QPalette new_pal(qApp->palette()); - if (UISettings::IsDarkTheme()) { + if (GMainWindow::CheckDarkMode()) { new_pal.setColor(QPalette::Link, QColor(0, 190, 255, 255)); } else { new_pal.setColor(QPalette::Link, QColor(0, 140, 200, 255)); @@ -4811,77 +4903,201 @@ static void AdjustLinkColor() { } } -void GMainWindow::UpdateUITheme() { - QString default_theme = QString::fromStdString(UISettings::default_theme.data()); - QString current_theme = UISettings::values.theme; - - if (current_theme.isEmpty()) { - current_theme = default_theme; - } - +void GMainWindow::UpdateThemePalette() { + QPalette themePalette(qApp->palette()); #ifdef _WIN32 - QIcon::setThemeName(current_theme); - AdjustLinkColor(); -#else - if (current_theme == QStringLiteral("default") || current_theme == QStringLiteral("colorful")) { - LOG_INFO(Frontend, "Theme is default or colorful: {}", current_theme.toStdString()); - QIcon::setThemeName(current_theme == QStringLiteral("colorful") ? current_theme - : startup_icon_theme); - QIcon::setThemeSearchPaths(QStringList(default_theme_paths)); - if (CheckDarkMode()) { - current_theme = QStringLiteral("default_dark"); + QColor dark(25, 25, 25); + QColor darkGray(100, 100, 100); + QColor gray(150, 150, 150); + QColor light(230, 230, 230); + // By default, revert fusion style set for Windows dark theme + QString style; + if (CheckDarkMode()) { + // AlternateBase is kept at rgb(233, 231, 227) or rgb(245, 245, 245) on Windows dark + // palette, fix this. Sometimes, it even is rgb(0, 0, 0), but uses a very light gray for + // alternate rows, do not know why + if (themePalette.alternateBase().color() == QColor(233, 231, 227) || + themePalette.alternateBase().color() == QColor(245, 245, 245) || + themePalette.alternateBase().color() == QColor(0, 0, 0)) { + themePalette.setColor(QPalette::AlternateBase, dark); + alternate_base_modified = true; } + // Use fusion theme, since its close to windowsvista, but works well with a dark palette + style = QStringLiteral("fusion"); } else { - LOG_INFO(Frontend, "Theme is NOT default or colorful: {}", current_theme.toStdString()); - QIcon::setThemeName(current_theme); - // Use icon resources from application binary and current theme subdirectory if it exists - QStringList theme_paths; - theme_paths << QString::fromStdString(":/icons") - << QStringLiteral("%1/%2/icons") - .arg(QString::fromStdString( - Common::FS::GetYuzuPathString(Common::FS::YuzuPath::ThemesDir)), - current_theme); - QIcon::setThemeSearchPaths(theme_paths); - AdjustLinkColor(); + // Reset AlternateBase if it has been modified + if (alternate_base_modified) { + themePalette.setColor(QPalette::AlternateBase, QColor(245, 245, 245)); + alternate_base_modified = false; + } + // Reset Windows theme to the default + style = QStringLiteral("windowsvista"); + } + LOG_DEBUG(Frontend, "Using style: {}", style.toStdString()); + qApp->setStyle(style); +#else + if (CheckDarkMode()) { + // Set Dark palette on non Windows platforms (that may not have a dark palette) + LOG_INFO(Frontend, "Using custom dark palette"); + themePalette.setColor(QPalette::Window, QColor(53, 53, 53)); + themePalette.setColor(QPalette::WindowText, Qt::white); + themePalette.setColor(QPalette::Disabled, QPalette::WindowText, QColor(127, 127, 127)); + themePalette.setColor(QPalette::Base, QColor(42, 42, 42)); + themePalette.setColor(QPalette::AlternateBase, QColor(66, 66, 66)); + themePalette.setColor(QPalette::ToolTipBase, Qt::white); + themePalette.setColor(QPalette::ToolTipText, QColor(53, 53, 53)); + themePalette.setColor(QPalette::Text, Qt::white); + themePalette.setColor(QPalette::Disabled, QPalette::Text, QColor(127, 127, 127)); + themePalette.setColor(QPalette::Dark, QColor(35, 35, 35)); + themePalette.setColor(QPalette::Shadow, QColor(20, 20, 20)); + themePalette.setColor(QPalette::Button, QColor(53, 53, 53)); + themePalette.setColor(QPalette::ButtonText, Qt::white); + themePalette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(127, 127, 127)); + themePalette.setColor(QPalette::BrightText, Qt::red); + themePalette.setColor(QPalette::Link, QColor(42, 130, 218)); + themePalette.setColor(QPalette::Highlight, QColor(42, 130, 218)); + themePalette.setColor(QPalette::Disabled, QPalette::Highlight, QColor(80, 80, 80)); + themePalette.setColor(QPalette::HighlightedText, Qt::white); + themePalette.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor(127, 127, 127)); + } else { + LOG_INFO(Frontend, "Using standard palette"); + // Reset light palette on non Windows platforms + themePalette = this->style()->standardPalette(); } #endif - if (current_theme != default_theme) { - QString theme_uri{current_theme + QStringLiteral("style.qss")}; - if (tryLoadStylesheet(theme_uri)) { - return; - } - - // Reading new theme failed, loading default stylesheet - LOG_ERROR(Frontend, "Unable to open style \"{}\", fallback to the default theme", - current_theme.toStdString()); - - current_theme = default_theme; - theme_uri = QStringLiteral(":%1/style.qss").arg(default_theme); - if (tryLoadStylesheet(theme_uri)) { - return; - } - - // Reading default failed, loading empty stylesheet - LOG_ERROR(Frontend, "Unable to set style \"{}\", stylesheet file not found", - current_theme.toStdString()); - - qApp->setStyleSheet({}); - setStyleSheet({}); - } + qApp->setPalette(themePalette); + AdjustLinkColor(); } -bool GMainWindow::tryLoadStylesheet(const QString& theme_path) { - QFile theme_file(theme_path); - if (theme_file.open(QFile::ReadOnly | QFile::Text)) { - LOG_INFO(Frontend, "Loading style in: {}", theme_path.toStdString()); - QTextStream ts(&theme_file); - qApp->setStyleSheet(ts.readAll()); - setStyleSheet(ts.readAll()); - return true; +void GMainWindow::SetCustomStylesheet() { + setStyleSheet(QStringLiteral("QStatusBar::item { border: none; }")); + + // Set "dark" qss property value, that may be used in stylesheets + bool is_dark_mode = CheckDarkMode(); + if (renderer_status_button) { + renderer_status_button->setProperty("dark", is_dark_mode); } - // Opening the file failed + if (gpu_accuracy_button) { + gpu_accuracy_button->setProperty("dark", is_dark_mode); + } +#ifdef _WIN32 + // Windows dark mode uses "fusion" style. Make it look like more "windowsvista" light style + if (is_dark_mode) { + /* the groove expands to the size of the slider by default. by giving it a height, it has a + fixed size */ + /* handle is placed by default on the contents rect of the groove. Negative margin expands + it outside the groove */ + setStyleSheet(QStringLiteral("QSlider:horizontal{ height:30px; }\ + QSlider::sub-page:horizontal { background-color: palette(highlight); }\ + QSlider::add-page:horizontal { background-color: palette(midlight);}\ + QSlider::groove:horizontal { border-width: 1px; margin: 1px 0; height: 2px;}\ + QSlider::handle:horizontal { border-width: 1px; border-style: solid; border-color: palette(dark);\ + width: 10px; margin: -10px 0px; }\ + QSlider::handle { background-color: palette(button); }\ + QSlider::handle:hover { background-color: palette(highlight); }")); + } +#endif +} + +#ifdef __unix__ +bool GMainWindow::ListenColorSchemeChange() { + auto bus = QDBusConnection::sessionBus(); + if (bus.isConnected()) { + const QString dbus_service = QStringLiteral("org.freedesktop.portal.Desktop"); + const QString dbus_path = QStringLiteral("/org/freedesktop/portal/desktop"); + const QString dbus_interface = QStringLiteral("org.freedesktop.portal.Settings"); + const QString dbus_method = QStringLiteral("SettingChanged"); + QStringList dbus_arguments; + dbus_arguments << QStringLiteral("org.freedesktop.appearance") + << QStringLiteral("color-scheme"); + const QString dbus_signature = QStringLiteral("ssv"); + + LOG_INFO(Frontend, "Connected to DBus, listening for OS theme changes"); + return bus.connect(dbus_service, dbus_path, dbus_interface, dbus_method, dbus_arguments, + dbus_signature, this, SLOT(UpdateUITheme())); + } + LOG_WARNING(Frontend, "Unable to connect to DBus to listen for OS theme changes"); return false; } +#endif + +bool GMainWindow::CheckDarkMode() { + const QPalette current_palette(qApp->palette()); +#ifdef __unix__ + QProcess process; + QStringList gdbus_arguments; + + // Using the freedesktop specifications for checking dark mode + LOG_INFO(Frontend, "Retrieving theme from freedesktop color-scheme..."); + gdbus_arguments << QStringLiteral("--dest=org.freedesktop.portal.Desktop") + << QStringLiteral("--object-path /org/freedesktop/portal/desktop") + << QStringLiteral("--method org.freedesktop.portal.Settings.Read " + "org.freedesktop.appearance color-scheme"); + process.start(QStringLiteral("gdbus call --session"), gdbus_arguments); + process.waitForFinished(1000); + QByteArray dbus_output = process.readAllStandardOutput(); + + if (!dbus_output.isEmpty()) { + const int systemColorSchema = QString::fromUtf8(dbus_output).trimmed().right(1).toInt(); + return systemColorSchema == 1; + } + + // Try alternative for Gnome if the previous one failed + QStringList gsettings_arguments; + gsettings_arguments << QStringLiteral("get") + << QStringLiteral("org.gnome.desktop.interface") + << QStringLiteral("color-scheme"); + + LOG_DEBUG(Frontend, "failed, retrieving theme from gsettings color-scheme..."); + process.start(QStringLiteral("gsettings"), gsettings_arguments); + process.waitForFinished(1000); + QByteArray gsettings_output = process.readAllStandardOutput(); + + // Try older gtk-theme method if the previous one failed + if (gsettings_output.isEmpty()) { + LOG_INFO(Frontend, "failed, retrieving theme from gtk-theme..."); + gsettings_arguments.takeLast(); + gsettings_arguments << QStringLiteral("gtk-theme"); + + process.start(QStringLiteral("gsettings"), gsettings_arguments); + process.waitForFinished(1000); + gsettings_output = process.readAllStandardOutput(); + } + + // Interpret gsettings value if it succeeded + if (!gsettings_output.isEmpty()) { + QString systeme_theme = QString::fromUtf8(gsettings_output); + LOG_DEBUG(Frontend, "Gsettings output: {}", systeme_theme.toStdString()); + return systeme_theme.contains(QStringLiteral("dark"), Qt::CaseInsensitive); + } + LOG_DEBUG(Frontend, "failed, retrieving theme from palette"); +#endif + // Use default method based on palette swap by OS. + // It is the only method on Windows with Qt 5. + // Windows needs QT_QPA_PLATFORM env variable set to windows:darkmode=2 to force palette change + return (current_palette.color(QPalette::WindowText).lightness() > + current_palette.color(QPalette::Window).lightness()); +} + +void GMainWindow::changeEvent(QEvent* event) { + // PaletteChange event appears to only reach so far into the GUI, explicitly asking to + // UpdateUITheme is a decent work around + if (event->type() == QEvent::PaletteChange || + event->type() == QEvent::ApplicationPaletteChange) { + LOG_INFO(Frontend, + "Window color palette changed by event: {} (QEvent::PaletteChange is: {})", + event->type(), QEvent::PaletteChange); + const QPalette test_palette(qApp->palette()); + // Keeping eye on QPalette::Window to avoid looping. QPalette::Text might be useful too + const QColor window_color = test_palette.color(QPalette::Active, QPalette::Window); + + if (last_window_color != window_color) { + last_window_color = window_color; + + UpdateUITheme(); + } + } else QWidget::changeEvent(event); +} void GMainWindow::LoadTranslation() { bool loaded; @@ -4935,26 +5151,6 @@ void GMainWindow::SetGamemodeEnabled(bool state) { } #endif -void GMainWindow::changeEvent(QEvent* event) { -#ifdef __unix__ - // PaletteChange event appears to only reach so far into the GUI, explicitly asking to - // UpdateUITheme is a decent work around - if (event->type() == QEvent::PaletteChange) { - const QPalette test_palette(qApp->palette()); - const QString& current_theme = UISettings::values.theme; - // Keeping eye on QPalette::Window to avoid looping. QPalette::Text might be useful too - static QColor last_window_color; - const QColor window_color = test_palette.color(QPalette::Active, QPalette::Window); - if (last_window_color != window_color && (current_theme == QStringLiteral("default") || - current_theme == QStringLiteral("colorful"))) { - UpdateUITheme(); - } - last_window_color = window_color; - } -#endif // __unix__ - QWidget::changeEvent(event); -} - Service::AM::FrontendAppletParameters GMainWindow::ApplicationAppletParameters() { return Service::AM::FrontendAppletParameters{ .applet_id = Service::AM::AppletId::Application, diff --git a/src/suyu/main.h b/src/suyu/main.h index 6bbcdd7c58..d0f1bd96e6 100644 --- a/src/suyu/main.h +++ b/src/suyu/main.h @@ -25,9 +25,8 @@ #include "suyu/util/controller_navigation.h" #ifdef __unix__ +#include #include -#include -#include #endif class QtConfig; @@ -165,14 +164,9 @@ class GMainWindow : public QMainWindow { CREATE_SHORTCUT_MSGBOX_APPVOLATILE_WARNING, }; - /** - * Try to load a stylesheet from its path. If the path starts with ":/", its embedded in the app - * @returns true if the text file could be opened as read-only - */ - bool tryLoadStylesheet(const QString& theme_path); - public: void filterBarSetChecked(bool state); + static bool CheckDarkMode(); void UpdateUITheme(); explicit GMainWindow(std::unique_ptr config_, bool has_broken_vulkan); ~GMainWindow() override; @@ -265,12 +259,44 @@ private: void SetDefaultUIGeometry(); void RestoreUIState(); + /** + * Load the icons used by the current theme. Use dark icons if the current mode is dark + */ + void UpdateIcons(const QString& theme_used); + /** + * Set the palette used by the stylsheet for the dark/light mode selected, according to the OS + */ + void UpdateThemePalette(); + /** + * Try to load a stylesheet from its URI. + * If the path starts with ":/", its embedded in the app, otherwise its in a local directory + * @returns true if the text file could be opened as read-only + */ + bool TryLoadStylesheet(const QString& theme_uri); + /** + * Try to load a stylesheet from filesystem path + * @returns true if the text file could be opened as read-only + */ + bool TryLoadStylesheet(const std::filesystem::path& theme_path); + /** + * Default customizations to the stylesheets + */ + void SetCustomStylesheet(); +#ifdef __unix__ + /** + * Create a signal to update the UI theme when the OS color scheme is changed + * @returns true if we could connect to dbus + */ + bool ListenColorSchemeChange(); +#endif void ConnectWidgetEvents(); void ConnectMenuEvents(); void UpdateMenuState(); +#ifdef __unix__ void SetupPrepareForSleep(); +#endif void PreventOSSleep(); void AllowOSSleep(); @@ -401,6 +427,7 @@ private slots: void ResetWindowSize720(); void ResetWindowSize900(); void ResetWindowSize1080(); + void UpdateUITheme(); void OnAlbum(); void OnCabinet(Service::NFP::CabinetMode mode); void OnMiiEdit(); @@ -447,7 +474,7 @@ private: void OpenURL(const QUrl& url); void LoadTranslation(); void OpenPerGameConfiguration(u64 title_id, const std::string& file_name); - bool CheckDarkMode(); + bool CheckSystemArchiveDecryption(); bool CheckFirmwarePresence(); void SetFirmwareVersion(); void ConfigureFilesystemProvider(const std::string& filepath); @@ -531,7 +558,8 @@ private: QTimer update_input_timer; QString startup_icon_theme; - bool os_dark_mode = false; + bool alternate_base_modified = false; + QColor last_window_color; // FS std::shared_ptr vfs; diff --git a/src/suyu/startup_checks.cpp b/src/suyu/startup_checks.cpp index 292fbcbbaa..32011f6d5c 100644 --- a/src/suyu/startup_checks.cpp +++ b/src/suyu/startup_checks.cpp @@ -5,6 +5,8 @@ #ifdef _WIN32 #include +#include +#include #include #include #elif defined(SUYU_UNIX) @@ -36,6 +38,9 @@ void CheckVulkan() { bool CheckEnvVars(bool* is_child) { #ifdef _WIN32 + // Force adapting theme to follow Windows dark mode + qputenv("QT_QPA_PLATFORM", QByteArray("windows:darkmode=2")); + // Check environment variable to see if we are the child char variable_contents[8]; const DWORD startup_check_var = diff --git a/src/suyu/uisettings.cpp b/src/suyu/uisettings.cpp index e382afdf61..8d65905104 100644 --- a/src/suyu/uisettings.cpp +++ b/src/suyu/uisettings.cpp @@ -31,11 +31,6 @@ const Themes included_themes{{ {"Midnight Blue Colorful", ":/colorful_midnight_blue/"}, }}; -bool IsDarkTheme() { - return UISettings::values.theme.contains(QStringLiteral("dark")) || - UISettings::values.theme.contains(QStringLiteral("midnight")); -} - Values values = {}; u32 CalculateWidth(u32 height, Settings::AspectRatio ratio) { diff --git a/src/suyu/uisettings.h b/src/suyu/uisettings.h index 7713c8c73a..6bb903efa7 100644 --- a/src/suyu/uisettings.h +++ b/src/suyu/uisettings.h @@ -35,12 +35,6 @@ extern template class Setting; namespace UISettings { -/** - * Check if the theme is dark - * @returns true if the current theme contains the string "dark" in its name - */ -bool IsDarkTheme(); - struct ContextualShortcut { std::string keyseq; std::string controller_keyseq; @@ -54,13 +48,7 @@ struct Shortcut { ContextualShortcut shortcut; }; -static constexpr std::string_view default_theme{ -#ifdef _WIN32 - "colorful_dark" -#else - "colorful" -#endif -}; +static constexpr std::string_view default_theme{"colorful"}; using Themes = std::array, 6>; extern const Themes included_themes; From 9bba778d1540dddb6e46973731e6bd564f43a25b Mon Sep 17 00:00:00 2001 From: flodavid Date: Sun, 4 Feb 2024 04:05:50 +0100 Subject: [PATCH 3/6] Rework themes to easily use light/dark palette, using only different icons - Renamed themes: - "colorful" to "default" and "colorful_dark" to "default_dark" - "default" to "monochrome" and "default_dark" to "monochrome_dark" - "colorful_midnight_blue" to "qdarkstyle_midnight_blue" - "qdarkstyle_midnight_blue" to "qdarkstyle_midnight_blue_monochrome" - qdarkstyle is renamed from "Dark" to "Mine Shaft" in the UI - default and monochrome themes all use the same qss stylesheet - Remove the ability to select "default_dark" directly - Default has better support for light and dark - Controller and Keyboard applets icons and style adapt to dark mode - Add "qdarkstyle_monochrome" theme - Remove duplicated icon files --- .reuse/dep5 | 52 +- dist/icons/overlay/osk_button_backspace.png | Bin 1272 -> 2938 bytes dist/icons/overlay/overlay.qrc | 60 +- .../arrow_left.png} | Bin .../arrow_right.png} | Bin .../button_A.png} | Bin .../button_B.png} | Bin .../button_L.png} | Bin .../button_R.png} | Bin .../button_X.png} | Bin .../button_Y.png} | Bin .../button_minus.png} | Bin .../button_plus.png} | Bin .../button_press_stick.png} | Bin .../controller_dual_joycon.png} | Bin .../controller_handheld.png} | Bin .../controller_pro.png} | Bin .../controller_single_joycon_left.png} | Bin .../controller_single_joycon_left_a.png} | Bin .../controller_single_joycon_left_b.png} | Bin .../controller_single_joycon_left_x.png} | Bin .../controller_single_joycon_left_y.png} | Bin .../controller_single_joycon_right.png} | Bin .../osk_button_B.png} | Bin .../osk_button_B_disabled.png} | Bin .../osk_button_Y.png} | Bin .../osk_button_Y_disabled.png} | Bin .../osk_button_backspace.png} | Bin .../osk_button_plus.png} | Bin .../osk_button_plus_disabled.png} | Bin .../osk_button_shift.png} | Bin .../osk_button_shift_on.png} | Bin .../colorful/icons/16x16/connected.png | Bin 575 -> 0 bytes .../icons/16x16/connected_notification.png | Bin 760 -> 0 bytes .../colorful/icons/16x16/disconnected.png | Bin 648 -> 0 bytes dist/qt_themes/colorful/icons/16x16/lock.png | Bin 330 -> 0 bytes .../colorful/icons/256x256/plus_folder.png | Bin 4643 -> 0 bytes .../colorful/icons/48x48/bad_folder.png | Bin 528 -> 0 bytes dist/qt_themes/colorful/icons/48x48/chip.png | Bin 582 -> 0 bytes .../qt_themes/colorful/icons/48x48/folder.png | Bin 460 -> 0 bytes .../colorful/icons/48x48/list-add.png | Bin 204 -> 0 bytes .../colorful/icons/48x48/sd_card.png | Bin 228 -> 0 bytes dist/qt_themes/colorful/icons/48x48/star.png | Bin 1108 -> 0 bytes dist/qt_themes/colorful/style.qrc | 30 - .../qt_themes/colorful_dark/icons/index.theme | 8 - dist/qt_themes/colorful_dark/style.qrc | 57 -- .../colorful_midnight_blue/icons/index.theme | 8 - .../colorful_midnight_blue/style.qrc | 63 -- dist/qt_themes/default/default.qrc | 20 +- .../icons/16x16/checked.png | Bin .../icons/16x16/failed.png | Bin .../icons/16x16/info.png | Bin dist/qt_themes/default/icons/16x16/lock.png | Bin 318 -> 330 bytes .../icons/16x16/sync.png | Bin .../icons/16x16/view-refresh.png | Bin .../default/icons/256x256/plus_folder.png | Bin 1948 -> 4643 bytes .../default/icons/48x48/bad_folder.png | Bin 1007 -> 528 bytes dist/qt_themes/default/icons/48x48/chip.png | Bin 511 -> 582 bytes dist/qt_themes/default/icons/48x48/folder.png | Bin 535 -> 460 bytes .../default/icons/48x48/list-add.png | Bin 204 -> 204 bytes .../icons/48x48/no_avatar.png | Bin .../qt_themes/default/icons/48x48/sd_card.png | Bin 198 -> 228 bytes dist/qt_themes/default/icons/48x48/star.png | Bin 1029 -> 1108 bytes dist/qt_themes/default/icons/index.theme | 5 +- dist/qt_themes/default/style.qss | 116 +-- .../icons/16x16/lock.png | Bin .../icons/16x16/view-refresh.png | Bin dist/qt_themes/default_dark/icons/index.theme | 2 +- dist/qt_themes/default_dark/style.qrc | 25 - dist/qt_themes/default_dark/style.qss | 687 ------------------ dist/qt_themes/monochrome/icons.qrc | 32 + .../qt_themes/monochrome/icons/16x16/lock.png | Bin 0 -> 318 bytes .../monochrome/icons/256x256/plus_folder.png | Bin 0 -> 1948 bytes .../monochrome/icons/48x48/bad_folder.png | Bin 0 -> 1007 bytes .../qt_themes/monochrome/icons/48x48/chip.png | Bin 0 -> 511 bytes .../monochrome/icons/48x48/folder.png | Bin 0 -> 535 bytes .../monochrome/icons/48x48/list-add.png | Bin 0 -> 204 bytes .../monochrome/icons/48x48/sd_card.png | Bin 0 -> 198 bytes .../qt_themes/monochrome/icons/48x48/star.png | Bin 0 -> 1029 bytes .../icons/index.theme | 7 +- dist/qt_themes/monochrome/style.qrc | 5 + .../icons/16x16/lock.png | Bin .../icons/256x256/plus_folder.png | Bin .../icons/48x48/bad_folder.png | Bin .../icons/48x48/chip.png | Bin .../icons/48x48/folder.png | Bin .../icons/48x48/list-add.png | Bin .../icons/48x48/no_avatar.png | Bin .../icons/48x48/sd_card.png | Bin .../icons/48x48/star.png | Bin .../monochrome_dark/icons/index.theme | 14 + .../qdarkstyle/{style.qss => dark.qss} | 85 --- dist/qt_themes/qdarkstyle/icons.qrc | 51 ++ .../qdarkstyle/icons/16x16/connected.png | Bin 575 -> 0 bytes .../icons/16x16/connected_notification.png | Bin 760 -> 0 bytes .../qdarkstyle/icons/16x16/disconnected.png | Bin 648 -> 0 bytes .../qdarkstyle/icons/16x16/view-refresh.png | Bin 362 -> 0 bytes dist/qt_themes/qdarkstyle/icons/index.theme | 14 +- dist/qt_themes/qdarkstyle/style.qrc | 63 +- .../{style.qss => dark.qss} | 89 --- .../qdarkstyle_midnight_blue/icons.qrc | 224 ++++++ .../icons/index.theme | 14 +- .../qdarkstyle_midnight_blue/style.qrc | 229 +----- .../icons.qrc | 33 + .../icons/index.theme | 14 + .../style.qrc | 8 + .../qt_themes/qdarkstyle_monochrome/icons.qrc | 33 + .../qdarkstyle_monochrome/icons/index.theme | 14 + .../qt_themes/qdarkstyle_monochrome/style.qrc | 8 + src/suyu/applets/qt_software_keyboard.cpp | 160 ++-- src/suyu/applets/qt_software_keyboard.h | 9 + src/suyu/main.cpp | 17 +- src/suyu/main.h | 1 - src/suyu/uisettings.cpp | 12 +- src/suyu/uisettings.h | 2 +- 115 files changed, 685 insertions(+), 1586 deletions(-) rename dist/icons/{overlay/arrow_left_dark.png => overlay_dark/arrow_left.png} (100%) rename dist/icons/{overlay/arrow_right_dark.png => overlay_dark/arrow_right.png} (100%) rename dist/icons/{overlay/button_A_dark.png => overlay_dark/button_A.png} (100%) rename dist/icons/{overlay/button_B_dark.png => overlay_dark/button_B.png} (100%) rename dist/icons/{overlay/button_L_dark.png => overlay_dark/button_L.png} (100%) rename dist/icons/{overlay/button_R_dark.png => overlay_dark/button_R.png} (100%) rename dist/icons/{overlay/button_X_dark.png => overlay_dark/button_X.png} (100%) rename dist/icons/{overlay/button_Y_dark.png => overlay_dark/button_Y.png} (100%) rename dist/icons/{overlay/button_minus_dark.png => overlay_dark/button_minus.png} (100%) rename dist/icons/{overlay/button_plus_dark.png => overlay_dark/button_plus.png} (100%) rename dist/icons/{overlay/button_press_stick_dark.png => overlay_dark/button_press_stick.png} (100%) rename dist/icons/{overlay/controller_dual_joycon_dark.png => overlay_dark/controller_dual_joycon.png} (100%) rename dist/icons/{overlay/controller_handheld_dark.png => overlay_dark/controller_handheld.png} (100%) rename dist/icons/{overlay/controller_pro_dark.png => overlay_dark/controller_pro.png} (100%) rename dist/icons/{overlay/controller_single_joycon_left_dark.png => overlay_dark/controller_single_joycon_left.png} (100%) rename dist/icons/{overlay/controller_single_joycon_left_a_dark.png => overlay_dark/controller_single_joycon_left_a.png} (100%) rename dist/icons/{overlay/controller_single_joycon_left_b_dark.png => overlay_dark/controller_single_joycon_left_b.png} (100%) rename dist/icons/{overlay/controller_single_joycon_left_x_dark.png => overlay_dark/controller_single_joycon_left_x.png} (100%) rename dist/icons/{overlay/controller_single_joycon_left_y_dark.png => overlay_dark/controller_single_joycon_left_y.png} (100%) rename dist/icons/{overlay/controller_single_joycon_right_dark.png => overlay_dark/controller_single_joycon_right.png} (100%) rename dist/icons/{overlay/osk_button_B_dark.png => overlay_dark/osk_button_B.png} (100%) rename dist/icons/{overlay/osk_button_B_dark_disabled.png => overlay_dark/osk_button_B_disabled.png} (100%) rename dist/icons/{overlay/osk_button_Y_dark.png => overlay_dark/osk_button_Y.png} (100%) rename dist/icons/{overlay/osk_button_Y_dark_disabled.png => overlay_dark/osk_button_Y_disabled.png} (100%) rename dist/icons/{overlay/osk_button_backspace_dark.png => overlay_dark/osk_button_backspace.png} (100%) rename dist/icons/{overlay/osk_button_plus_dark.png => overlay_dark/osk_button_plus.png} (100%) rename dist/icons/{overlay/osk_button_plus_dark_disabled.png => overlay_dark/osk_button_plus_disabled.png} (100%) rename dist/icons/{overlay/osk_button_shift_dark.png => overlay_dark/osk_button_shift.png} (100%) rename dist/icons/{overlay/osk_button_shift_on_dark.png => overlay_dark/osk_button_shift_on.png} (100%) delete mode 100644 dist/qt_themes/colorful/icons/16x16/connected.png delete mode 100644 dist/qt_themes/colorful/icons/16x16/connected_notification.png delete mode 100644 dist/qt_themes/colorful/icons/16x16/disconnected.png delete mode 100644 dist/qt_themes/colorful/icons/16x16/lock.png delete mode 100644 dist/qt_themes/colorful/icons/256x256/plus_folder.png delete mode 100644 dist/qt_themes/colorful/icons/48x48/bad_folder.png delete mode 100644 dist/qt_themes/colorful/icons/48x48/chip.png delete mode 100644 dist/qt_themes/colorful/icons/48x48/folder.png delete mode 100644 dist/qt_themes/colorful/icons/48x48/list-add.png delete mode 100644 dist/qt_themes/colorful/icons/48x48/sd_card.png delete mode 100644 dist/qt_themes/colorful/icons/48x48/star.png delete mode 100644 dist/qt_themes/colorful/style.qrc delete mode 100644 dist/qt_themes/colorful_dark/icons/index.theme delete mode 100644 dist/qt_themes/colorful_dark/style.qrc delete mode 100644 dist/qt_themes/colorful_midnight_blue/icons/index.theme delete mode 100644 dist/qt_themes/colorful_midnight_blue/style.qrc rename dist/qt_themes/{colorful => default}/icons/16x16/checked.png (100%) rename dist/qt_themes/{colorful => default}/icons/16x16/failed.png (100%) rename dist/qt_themes/{colorful => default}/icons/16x16/info.png (100%) rename dist/qt_themes/{colorful => default}/icons/16x16/sync.png (100%) rename dist/qt_themes/{colorful => default}/icons/16x16/view-refresh.png (100%) rename dist/qt_themes/{colorful => default}/icons/48x48/no_avatar.png (100%) rename dist/qt_themes/{colorful_dark => default_dark}/icons/16x16/lock.png (100%) rename dist/qt_themes/{colorful_dark => default_dark}/icons/16x16/view-refresh.png (100%) delete mode 100644 dist/qt_themes/default_dark/style.qrc delete mode 100644 dist/qt_themes/default_dark/style.qss create mode 100644 dist/qt_themes/monochrome/icons.qrc create mode 100644 dist/qt_themes/monochrome/icons/16x16/lock.png create mode 100644 dist/qt_themes/monochrome/icons/256x256/plus_folder.png create mode 100644 dist/qt_themes/monochrome/icons/48x48/bad_folder.png create mode 100644 dist/qt_themes/monochrome/icons/48x48/chip.png create mode 100644 dist/qt_themes/monochrome/icons/48x48/folder.png create mode 100644 dist/qt_themes/monochrome/icons/48x48/list-add.png create mode 100644 dist/qt_themes/monochrome/icons/48x48/sd_card.png create mode 100644 dist/qt_themes/monochrome/icons/48x48/star.png rename dist/qt_themes/{colorful => monochrome}/icons/index.theme (60%) create mode 100644 dist/qt_themes/monochrome/style.qrc rename dist/qt_themes/{qdarkstyle => monochrome_dark}/icons/16x16/lock.png (100%) rename dist/qt_themes/{qdarkstyle => monochrome_dark}/icons/256x256/plus_folder.png (100%) rename dist/qt_themes/{qdarkstyle => monochrome_dark}/icons/48x48/bad_folder.png (100%) rename dist/qt_themes/{qdarkstyle => monochrome_dark}/icons/48x48/chip.png (100%) rename dist/qt_themes/{qdarkstyle => monochrome_dark}/icons/48x48/folder.png (100%) rename dist/qt_themes/{qdarkstyle => monochrome_dark}/icons/48x48/list-add.png (100%) rename dist/qt_themes/{qdarkstyle => monochrome_dark}/icons/48x48/no_avatar.png (100%) rename dist/qt_themes/{qdarkstyle => monochrome_dark}/icons/48x48/sd_card.png (100%) rename dist/qt_themes/{qdarkstyle => monochrome_dark}/icons/48x48/star.png (100%) create mode 100644 dist/qt_themes/monochrome_dark/icons/index.theme rename dist/qt_themes/qdarkstyle/{style.qss => dark.qss} (93%) create mode 100644 dist/qt_themes/qdarkstyle/icons.qrc delete mode 100644 dist/qt_themes/qdarkstyle/icons/16x16/connected.png delete mode 100644 dist/qt_themes/qdarkstyle/icons/16x16/connected_notification.png delete mode 100644 dist/qt_themes/qdarkstyle/icons/16x16/disconnected.png delete mode 100644 dist/qt_themes/qdarkstyle/icons/16x16/view-refresh.png rename dist/qt_themes/qdarkstyle_midnight_blue/{style.qss => dark.qss} (95%) create mode 100644 dist/qt_themes/qdarkstyle_midnight_blue/icons.qrc create mode 100644 dist/qt_themes/qdarkstyle_midnight_blue_monochrome/icons.qrc create mode 100644 dist/qt_themes/qdarkstyle_midnight_blue_monochrome/icons/index.theme create mode 100644 dist/qt_themes/qdarkstyle_midnight_blue_monochrome/style.qrc create mode 100644 dist/qt_themes/qdarkstyle_monochrome/icons.qrc create mode 100644 dist/qt_themes/qdarkstyle_monochrome/icons/index.theme create mode 100644 dist/qt_themes/qdarkstyle_monochrome/style.qrc diff --git a/.reuse/dep5 b/.reuse/dep5 index baf1354bf6..9779726e3f 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -5,10 +5,13 @@ Comment: It is best to use this file to record copyright information about Files: dist/english_plurals/* dist/icons/controller/*.png dist/icons/overlay/*.png + dist/icons/overlay_dark/*.png dist/languages/* dist/qt_themes/*/icons/48x48/sd_card.png dist/qt_themes/*/icons/index.theme dist/qt_themes/default/style.qss + dist/qt_themes/*/icons.qrc + dist/qt_themes/*/style.qrc Copyright: yuzu Emulator Project suyu Emulator Project License: GPL-2.0-or-later @@ -22,8 +25,7 @@ Copyright: suyu Emulator Project License: GPL-2.0-or-later Files: dist/qt_themes/qdarkstyle*/LICENSE.* - dist/qt_themes/qdarkstyle*/style.qrc - dist/qt_themes/qdarkstyle*/style.qss + dist/qt_themes/qdarkstyle*/dark.qss Copyright: 2013 Colin Duquesnoy 2019 Daniel Cosmo Pizetta License: MIT @@ -33,28 +35,28 @@ Copyright: 2013 Colin Duquesnoy 2019 Daniel Cosmo Pizetta License: CC-BY-4.0 -Files: dist/qt_themes/default/icons/256x256/plus_folder.png - dist/qt_themes/default/icons/48x48/bad_folder.png - dist/qt_themes/default/icons/48x48/chip.png - dist/qt_themes/default/icons/48x48/folder.png - dist/qt_themes/default/icons/48x48/star.png - dist/qt_themes/qdarkstyle/icons/256x256/plus_folder.png - dist/qt_themes/qdarkstyle/icons/48x48/bad_folder.png - dist/qt_themes/qdarkstyle/icons/48x48/chip.png - dist/qt_themes/qdarkstyle/icons/48x48/folder.png - dist/qt_themes/qdarkstyle/icons/48x48/star.png +Files: dist/qt_themes/monochrome/icons/256x256/plus_folder.png + dist/qt_themes/monochrome/icons/48x48/bad_folder.png + dist/qt_themes/monochrome/icons/48x48/chip.png + dist/qt_themes/monochrome/icons/48x48/folder.png + dist/qt_themes/monochrome/icons/48x48/star.png + dist/qt_themes/monochrome_dark/icons/48x48/bad_folder.png + dist/qt_themes/monochrome_dark/icons/48x48/chip.png + dist/qt_themes/monochrome_dark/icons/48x48/folder.png + dist/qt_themes/monochrome_dark/icons/48x48/star.png + dist/qt_themes/monochrome_dark/icons/256x256/plus_folder.png Copyright: Refactoring UI Inc. License: MIT Comment: https://github.com/tailwindlabs/heroicons -Files: dist/qt_themes/colorful/icons/16x16/lock.png - dist/qt_themes/colorful/icons/256x256/plus_folder.png - dist/qt_themes/colorful/icons/48x48/bad_folder.png - dist/qt_themes/colorful/icons/48x48/chip.png - dist/qt_themes/colorful/icons/48x48/folder.png - dist/qt_themes/colorful_dark/icons/16x16/lock.png - dist/qt_themes/colorful/icons/16x16/info.png - dist/qt_themes/colorful/icons/16x16/sync.png +Files: dist/qt_themes/default/icons/16x16/lock.png + dist/qt_themes/default/icons/256x256/plus_folder.png + dist/qt_themes/default/icons/48x48/bad_folder.png + dist/qt_themes/default/icons/48x48/chip.png + dist/qt_themes/default/icons/48x48/folder.png + dist/qt_themes/default_dark/icons/16x16/lock.png + dist/qt_themes/default/icons/16x16/info.png + dist/qt_themes/default/icons/16x16/sync.png Copyright: Icons8 License: MIT Comment: https://github.com/icons8/flat-color-icons @@ -70,15 +72,15 @@ Files: dist/qt_themes/*/icons/48x48/no_avatar.png Copyright: Ionic (http://ionic.io/) License: MIT -Files: dist/qt_themes/colorful/icons/48x48/star.png - dist/qt_themes/colorful/icons/16x16/checked.png - dist/qt_themes/colorful/icons/16x16/failed.png +Files: dist/qt_themes/default/icons/48x48/star.png + dist/qt_themes/default/icons/16x16/checked.png + dist/qt_themes/default/icons/16x16/failed.png Copyright: SVG Repo License: CC0-1.0 Files: dist/qt_themes/*/icons/16x16/view-refresh.png - dist/qt_themes/default/icons/16x16/lock.png - dist/qt_themes/qdarkstyle/icons/16x16/lock.png + dist/qt_themes/monochrome/icons/16x16/lock.png + dist/qt_themes/monochrome_dark/icons/16x16/lock.png Copyright: Google, Inc. License: Apache-2.0 diff --git a/dist/icons/overlay/osk_button_backspace.png b/dist/icons/overlay/osk_button_backspace.png index b7dc33228250bc2af38d43d24d05c2c25cd73a2b..b212efbbc3301cb6cf45863ef2defefd7cfc69ae 100644 GIT binary patch literal 2938 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 delta 1263 zcmVCEmkaxCG}RWF%OnckANy6U%_W+heyPsJ_)Bnp(R%b9}bm&zm{ zQ6Re|=lFTdPv!AIqCj?A&h_)~YYqnz1>#MJnGdJ;1ri0)JbWYT z4kQWWO7<+pV}GA3cLI_GawT)V;^9-jbwFS$ox>JYT^j_(EYEUf zy@lp!$-DWie39YPipS9jqWD0rwY^vInCo4ONIXsu2_8Wd zALy6%d_wW?BG)Vyk025}f+#+a>B5&J&nZAG9zi5{1bjLV(mdfnu4K-Y#edKI-Vq}8K%{xXfn0N5C5s;vy9D(^ zqn0ATkO)n88U3ncm_{cp^1qWXQ?4M_86{=dkPgqMHo0Hpax@t?So zJbymg?lk}L2>e}3h!_Uy!`uxJl(IDZzy3OfNnvfDmDWg^RBM}A`fNOt28 zuuF?=@71vYknH#iV0I82K|h!wh!V3r zt9cGk{n9?K39|#lYx8-nPfkSPBY2ue1L^Q&LG&KG=0p@e#Ho40fn14~sHKo!+UG(P zJ_f9LG?0#KCci=-cdg?Qg$cmjZAv3Woc-RYXgBMLi;AbH{g0pGXfvwk9bwSOzc zBMLjrB6;Ei0p(77(@(^c5sdFK7jTdMEcZVkl9LcmJ z`HPomKDS632r!dr{F~Kw?WBQ#Y-!f~OCgozk_G~@b;YPKIW1`*z-}!@9)8QlBn<>` zFY%NAof(`o5MYlLM4#1qCk+J1*=X2zOqZmAT#1)^fr^{Fx#qmH08%%sc(?!(caOHu z7eM0Ln{O9D;y%Fqq5$%yGKk+5K;D$c^N#|^8@o8O0>~S#%$Ws{H)eg#Er2``r#~9m Z<4=bU9t_=IpXdMp002ovPDHLkV1g|JP>28k diff --git a/dist/icons/overlay/overlay.qrc b/dist/icons/overlay/overlay.qrc index 8d7833aca0..2319e6dd28 100644 --- a/dist/icons/overlay/overlay.qrc +++ b/dist/icons/overlay/overlay.qrc @@ -6,64 +6,66 @@ SPDX-License-Identifier: GPL-2.0-or-later arrow_left.png - arrow_left_dark.png arrow_right.png - arrow_right_dark.png button_minus.png - button_minus_dark.png button_plus.png - button_plus_dark.png button_A.png - button_A_dark.png button_B.png - button_B_dark.png button_X.png - button_X_dark.png button_Y.png - button_Y_dark.png button_L.png - button_L_dark.png button_R.png - button_R_dark.png button_press_stick.png - button_press_stick_dark.png osk_button_B.png osk_button_B_disabled.png - osk_button_B_dark.png - osk_button_B_dark_disabled.png osk_button_Y.png osk_button_Y_disabled.png - osk_button_Y_dark.png - osk_button_Y_dark_disabled.png osk_button_backspace.png - osk_button_backspace_dark.png osk_button_plus.png osk_button_plus_disabled.png - osk_button_plus_dark.png - osk_button_plus_dark_disabled.png osk_button_shift.png - osk_button_shift_dark.png osk_button_shift_on.png - osk_button_shift_on_dark.png osk_button_shift_lock_on.png osk_button_shift_lock_off.png controller_dual_joycon.png - controller_dual_joycon_dark.png controller_pro.png - controller_pro_dark.png controller_handheld.png - controller_handheld_dark.png controller_single_joycon_left.png - controller_single_joycon_left_dark.png controller_single_joycon_right.png - controller_single_joycon_right_dark.png controller_single_joycon_left_a.png - controller_single_joycon_left_a_dark.png controller_single_joycon_left_b.png - controller_single_joycon_left_b_dark.png controller_single_joycon_left_x.png - controller_single_joycon_left_x_dark.png controller_single_joycon_left_y.png - controller_single_joycon_left_y_dark.png + + + ../overlay_dark/arrow_left.png + ../overlay_dark/arrow_right.png + ../overlay_dark/button_minus.png + ../overlay_dark/button_plus.png + ../overlay_dark/button_A.png + ../overlay_dark/button_B.png + ../overlay_dark/button_X.png + ../overlay_dark/button_Y.png + ../overlay_dark/button_L.png + ../overlay_dark/button_R.png + ../overlay_dark/button_press_stick.png + ../overlay_dark/osk_button_B.png + ../overlay_dark/osk_button_B.png + ../overlay_dark/osk_button_Y.png + ../overlay_dark/osk_button_Y.png + ../overlay_dark/osk_button_backspace.png + ../overlay_dark/osk_button_plus.png + ../overlay_dark/osk_button_plus.png + ../overlay_dark/osk_button_shift.png + ../overlay_dark/osk_button_shift_on.png + ../overlay_dark/controller_dual_joycon.png + ../overlay_dark/controller_pro.png + ../overlay_dark/controller_handheld.png + ../overlay_dark/controller_single_joycon_left.png + ../overlay_dark/controller_single_joycon_right.png + ../overlay_dark/controller_single_joycon_left_a.png + ../overlay_dark/controller_single_joycon_left_b.png + ../overlay_dark/controller_single_joycon_left_x.png + ../overlay_dark/controller_single_joycon_left_y.png diff --git a/dist/icons/overlay/arrow_left_dark.png b/dist/icons/overlay_dark/arrow_left.png similarity index 100% rename from dist/icons/overlay/arrow_left_dark.png rename to dist/icons/overlay_dark/arrow_left.png diff --git a/dist/icons/overlay/arrow_right_dark.png b/dist/icons/overlay_dark/arrow_right.png similarity index 100% rename from dist/icons/overlay/arrow_right_dark.png rename to dist/icons/overlay_dark/arrow_right.png diff --git a/dist/icons/overlay/button_A_dark.png b/dist/icons/overlay_dark/button_A.png similarity index 100% rename from dist/icons/overlay/button_A_dark.png rename to dist/icons/overlay_dark/button_A.png diff --git a/dist/icons/overlay/button_B_dark.png b/dist/icons/overlay_dark/button_B.png similarity index 100% rename from dist/icons/overlay/button_B_dark.png rename to dist/icons/overlay_dark/button_B.png diff --git a/dist/icons/overlay/button_L_dark.png b/dist/icons/overlay_dark/button_L.png similarity index 100% rename from dist/icons/overlay/button_L_dark.png rename to dist/icons/overlay_dark/button_L.png diff --git a/dist/icons/overlay/button_R_dark.png b/dist/icons/overlay_dark/button_R.png similarity index 100% rename from dist/icons/overlay/button_R_dark.png rename to dist/icons/overlay_dark/button_R.png diff --git a/dist/icons/overlay/button_X_dark.png b/dist/icons/overlay_dark/button_X.png similarity index 100% rename from dist/icons/overlay/button_X_dark.png rename to dist/icons/overlay_dark/button_X.png diff --git a/dist/icons/overlay/button_Y_dark.png b/dist/icons/overlay_dark/button_Y.png similarity index 100% rename from dist/icons/overlay/button_Y_dark.png rename to dist/icons/overlay_dark/button_Y.png diff --git a/dist/icons/overlay/button_minus_dark.png b/dist/icons/overlay_dark/button_minus.png similarity index 100% rename from dist/icons/overlay/button_minus_dark.png rename to dist/icons/overlay_dark/button_minus.png diff --git a/dist/icons/overlay/button_plus_dark.png b/dist/icons/overlay_dark/button_plus.png similarity index 100% rename from dist/icons/overlay/button_plus_dark.png rename to dist/icons/overlay_dark/button_plus.png diff --git a/dist/icons/overlay/button_press_stick_dark.png b/dist/icons/overlay_dark/button_press_stick.png similarity index 100% rename from dist/icons/overlay/button_press_stick_dark.png rename to dist/icons/overlay_dark/button_press_stick.png diff --git a/dist/icons/overlay/controller_dual_joycon_dark.png b/dist/icons/overlay_dark/controller_dual_joycon.png similarity index 100% rename from dist/icons/overlay/controller_dual_joycon_dark.png rename to dist/icons/overlay_dark/controller_dual_joycon.png diff --git a/dist/icons/overlay/controller_handheld_dark.png b/dist/icons/overlay_dark/controller_handheld.png similarity index 100% rename from dist/icons/overlay/controller_handheld_dark.png rename to dist/icons/overlay_dark/controller_handheld.png diff --git a/dist/icons/overlay/controller_pro_dark.png b/dist/icons/overlay_dark/controller_pro.png similarity index 100% rename from dist/icons/overlay/controller_pro_dark.png rename to dist/icons/overlay_dark/controller_pro.png diff --git a/dist/icons/overlay/controller_single_joycon_left_dark.png b/dist/icons/overlay_dark/controller_single_joycon_left.png similarity index 100% rename from dist/icons/overlay/controller_single_joycon_left_dark.png rename to dist/icons/overlay_dark/controller_single_joycon_left.png diff --git a/dist/icons/overlay/controller_single_joycon_left_a_dark.png b/dist/icons/overlay_dark/controller_single_joycon_left_a.png similarity index 100% rename from dist/icons/overlay/controller_single_joycon_left_a_dark.png rename to dist/icons/overlay_dark/controller_single_joycon_left_a.png diff --git a/dist/icons/overlay/controller_single_joycon_left_b_dark.png b/dist/icons/overlay_dark/controller_single_joycon_left_b.png similarity index 100% rename from dist/icons/overlay/controller_single_joycon_left_b_dark.png rename to dist/icons/overlay_dark/controller_single_joycon_left_b.png diff --git a/dist/icons/overlay/controller_single_joycon_left_x_dark.png b/dist/icons/overlay_dark/controller_single_joycon_left_x.png similarity index 100% rename from dist/icons/overlay/controller_single_joycon_left_x_dark.png rename to dist/icons/overlay_dark/controller_single_joycon_left_x.png diff --git a/dist/icons/overlay/controller_single_joycon_left_y_dark.png b/dist/icons/overlay_dark/controller_single_joycon_left_y.png similarity index 100% rename from dist/icons/overlay/controller_single_joycon_left_y_dark.png rename to dist/icons/overlay_dark/controller_single_joycon_left_y.png diff --git a/dist/icons/overlay/controller_single_joycon_right_dark.png b/dist/icons/overlay_dark/controller_single_joycon_right.png similarity index 100% rename from dist/icons/overlay/controller_single_joycon_right_dark.png rename to dist/icons/overlay_dark/controller_single_joycon_right.png diff --git a/dist/icons/overlay/osk_button_B_dark.png b/dist/icons/overlay_dark/osk_button_B.png similarity index 100% rename from dist/icons/overlay/osk_button_B_dark.png rename to dist/icons/overlay_dark/osk_button_B.png diff --git a/dist/icons/overlay/osk_button_B_dark_disabled.png b/dist/icons/overlay_dark/osk_button_B_disabled.png similarity index 100% rename from dist/icons/overlay/osk_button_B_dark_disabled.png rename to dist/icons/overlay_dark/osk_button_B_disabled.png diff --git a/dist/icons/overlay/osk_button_Y_dark.png b/dist/icons/overlay_dark/osk_button_Y.png similarity index 100% rename from dist/icons/overlay/osk_button_Y_dark.png rename to dist/icons/overlay_dark/osk_button_Y.png diff --git a/dist/icons/overlay/osk_button_Y_dark_disabled.png b/dist/icons/overlay_dark/osk_button_Y_disabled.png similarity index 100% rename from dist/icons/overlay/osk_button_Y_dark_disabled.png rename to dist/icons/overlay_dark/osk_button_Y_disabled.png diff --git a/dist/icons/overlay/osk_button_backspace_dark.png b/dist/icons/overlay_dark/osk_button_backspace.png similarity index 100% rename from dist/icons/overlay/osk_button_backspace_dark.png rename to dist/icons/overlay_dark/osk_button_backspace.png diff --git a/dist/icons/overlay/osk_button_plus_dark.png b/dist/icons/overlay_dark/osk_button_plus.png similarity index 100% rename from dist/icons/overlay/osk_button_plus_dark.png rename to dist/icons/overlay_dark/osk_button_plus.png diff --git a/dist/icons/overlay/osk_button_plus_dark_disabled.png b/dist/icons/overlay_dark/osk_button_plus_disabled.png similarity index 100% rename from dist/icons/overlay/osk_button_plus_dark_disabled.png rename to dist/icons/overlay_dark/osk_button_plus_disabled.png diff --git a/dist/icons/overlay/osk_button_shift_dark.png b/dist/icons/overlay_dark/osk_button_shift.png similarity index 100% rename from dist/icons/overlay/osk_button_shift_dark.png rename to dist/icons/overlay_dark/osk_button_shift.png diff --git a/dist/icons/overlay/osk_button_shift_on_dark.png b/dist/icons/overlay_dark/osk_button_shift_on.png similarity index 100% rename from dist/icons/overlay/osk_button_shift_on_dark.png rename to dist/icons/overlay_dark/osk_button_shift_on.png diff --git a/dist/qt_themes/colorful/icons/16x16/connected.png b/dist/qt_themes/colorful/icons/16x16/connected.png deleted file mode 100644 index 0afc18cb7a19028fd567a7ca7ced62cd164657de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmV-F0>J%=P)0k{|sIn0V`B1xGGFnerg>I4!7^B>UM&p)aM9vQI<{ZJ4 z8HZ4p+_%{7AT1;1-`r}Q8XRRVYW9}G=D3HXRO!FFg z<>v6FfXkm66-$M=OnPPtTpl}lK!#o^J26y#00VLkV5Ig4hAIxCZ~AU@6mMaG2|$+zA&;BarDZyi@16B z4lE8kTwX8y!4LxB2>hW4yn!GbZg+WiA%P|k^Ip;o774}ts6fO6U&y7=hp3TO@-WL? z{^Mh)gLW3&bGqIiV!1gSPQ{V|zW{P&fJjHVbAtc? N002ovPDHLkV1hH82Xp`c diff --git a/dist/qt_themes/colorful/icons/16x16/connected_notification.png b/dist/qt_themes/colorful/icons/16x16/connected_notification.png deleted file mode 100644 index 72466e098e471ae5a97c49a56536dd4bf62b3a08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0*y&TK~y+Tl~Y|v z6j2oZ?(CguoZVz~OB-RWz#nLd9z^@Yo&q%@j2=qtp^PLV$cmEeAL_xE^2wfrs242~ zp$Ef$h%#S%kW`EcLR4x6ZEJVk8F%j7>CU(tNkRF+;a<+Y=R4my_gvyQ4zjp<{ql`; zI^D*(O+BwTbI<>_2MD8-wl5<%-+In!I@(0@^Fzo{bD*j!D3xKFhG&Lp!dzV1$6_(` z^gLuV6YIgUEb0c8*Ie*2x#lAhY;J={1gb21z6E0ugAZC@F^euEux;jDmV`UFz7l>- zK|xT%#N<56!g^D3Wwr@)QUY z@d)MRLDK?Qog0L{ZY_3>K0_%MP_m~6ird7|QOF|6#=1I$H9tA_=53H>6>z~YHTJ@7 zb_Nd4PV}Lux(a+|27GF2$(u@fs~(9UHZ*jca>r)zc$_}(It@ippva0SLlzB`5RY_2 zDJ%pZ9`=H=;M3EPtE-_V5`;>`*WTHAw^h71&5pJA_QIN1DX?Z|p%fSYQs6=ghhYg- zVhSf|d1>iW;`5ymOPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0v$<2K~y+Tl~PS> zQ$Z9x^WL<1ZG=jLsqtf@CIu;o=wGnd1VlHD;-XFKLZw(mq)@*>1VJ>!or+OVq^`wu znJxuC&?1zmaamnO1NME*%5JoAzwQ9hHiSzzQVT5*fC(vPaz_Kh*+6Kq5b=Zyr$6d-BjRvNsUN9r<)$o0v zs;137DRgyhL@Z{(G)=_g8<0qB!nUp3v1>;LeY^L_vp9U_(^UgFXW)W|)!HD0fHMwq z`Rc|0_8q`L@sq zk>1%G63fVBGANuFmY*(fDuPllKmS8eCS`Em`r?L1hp>O&UTLdSRsk4e>gLt9;4C;0 zLcq{BFQXMa*Fk%G45d;@#y$LM{=|d(5AnGC1hkF9bzQ?)OM&Zp`Y#clJ$)W#YAJ!{ z4H0nGY&P-w?HjzG{fJLxahf`;55)a!M*cR#Fvf$Tw4UQO#< z+13h9kDdH|_{gEo)RvScR^ra>BKrFe$hQ&GwNfR74B5P3+o;Y|898=5|6Tg*(O>)p iN=@~G{{?26=FLU_5=aXOVS_yY0000ROSwGo6XvJPv zzlZ+oGn97-o-r-r&$VfgJ0KmA>2yufc!z{~qGQbm$8Tq=^*@-iIzITdZ+^wR?aTAG zy=^&a8Kl52V{ys6@63-oYYcdPN9cVtn5|nNv)ozk?u}LA z|1=jF*xy&`&-?QyY@&mH_rsJ||S^eTg=tDnm{r-UW|<05{U diff --git a/dist/qt_themes/colorful/icons/256x256/plus_folder.png b/dist/qt_themes/colorful/icons/256x256/plus_folder.png deleted file mode 100644 index 760fe6245e72cd0144b4dd198465db6c902ad400..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4643 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 N&`{A*F1u|N`hPMhH%|Zn diff --git a/dist/qt_themes/colorful/icons/48x48/bad_folder.png b/dist/qt_themes/colorful/icons/48x48/bad_folder.png deleted file mode 100644 index 34069c6b230de579d436fa9f0c21ae37af905b2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmV+r0`L8aP)D=(%e@MHK8fkB=Bj zAo71N_TM-+BcNWZW5yA1JUFhvNgbx+#t;a7*^hmf6*R3n7W%qhe}R$vr)HtS?Z$}H zG4o!X(_6sz@(}sdBcmf285ttS{PG$t1;D%q2XCGsu;Kn*4EJ`EV}rNOsB1G50Q+ud zk;W!zsIv`2?JeY3^jMW_j?@CSU7w3IHc5j`^%!idCC8%2D%f^^N-bd7vjgnAMv6H$ zRRc8@7^o_rcZ`lz$ux@g9a}{@0rQS^^6Ppp>nQlxOkH&kI3Aw3BuX6#@;?!z_y14T zWD@^HDbsuT!ZivN`yU9kwIux}`Y&I&S~39%P%Vo&wyKl@Ww{HS`zJUY4#@7Hv$NlKH@gFOfWh#;p`a7> zHS|=Xi|Jg_aj&Q#lU501AZa|+UAa*$TBPeBeF7jKv8Dk59qm|`?ej*L3uX^12YbBVuC(8l1+gV$k**_t@c>ZJWBZB=;`hL$Y!X2M?Al&7anv=x5Djc` zF{wX=?AZ&m9kLRimbq{p`;P&?xFf(F2AivLfXd3&7a92KYV;p~>3ie@1>}zj8+*Yu zi1xtn5y8a+fD4SCBnjp`f!P{6Z7!DRe2Uhd-S73pU@#lExS?7!1ks16+4{ U)=xYDaR2}S07*qoM6N<$f@LZ5LI3~& diff --git a/dist/qt_themes/colorful/icons/48x48/folder.png b/dist/qt_themes/colorful/icons/48x48/folder.png deleted file mode 100644 index 498de4c62940559bcfa3c609f7e7474ee8d86ae3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!hD1*n$B+!?x05z{F*}O5F27(eFndMoj+0rh z&40xH>tws))HAoNDb{TF1AmTbg1vvM{SK{ta!*3~yJ+!)lAVWV&RycPFhE13E=fG| z{;|wSu|F(+sy(|uFZrH++0<`EXXd#6OY88yk-96naQ3a=s-IZ*Mcjyg^Hped$L!qi z%Nu{^ytsFDZ`S68H$NYoZToJXVxeu_-lz9MzHG4Dnwk1|k- z)~iH;!ZoYKb0iMl`PS*vyLEB3S>J-KUs+~KW%p^nb}KG(nEz~9`TJGQDeI0eyQ*M+ z{q3idHxmD6Mc3=>-?Mj)jN*D=sBp1PxMbenmA6-}RqQ-41{geD{an^LB{Ts5V+X_j diff --git a/dist/qt_themes/colorful/icons/48x48/list-add.png b/dist/qt_themes/colorful/icons/48x48/list-add.png deleted file mode 100644 index 74e4882aaedc98b57cce65ae5c0a2683bab31279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCils0(?ST_0ALmnd!^rR{<%ek|4j}{|ryJ8+ZYEoCO|{#S9F5he4R}c>anM zprE6ti(`m~_uJEkTnq|4&KIBkn;y0>KuJVP%j$`*d51w2Hv=64#i!@TrNPv7(8A5T-G@yGywoSu{iDk diff --git a/dist/qt_themes/colorful/icons/48x48/sd_card.png b/dist/qt_themes/colorful/icons/48x48/sd_card.png deleted file mode 100644 index 652d61bc325bb1aad05f0cf316a540539007db27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?31We{epSZZGe6rASi z;uw-~@9nLFybTIGtq-ro-Z`MmY&og?*g;+yH}?gKEOH;;pFMK;H`B`8MbXZ(*FWEC z*meGH_WK=KKQs&offQDYsv`dLmWMB|uJoCySmSNRH zXNIRALK~_ob_p;r)JrZ;FIPU6$&C&jo{= O&EVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGff&c&uf&sqz;-vrp1L;XbK~!i%?U~PS zOi>ia&v{dXiliH?Ea>m5YV=J@_#cF(BsMmFOT@16TZoX5NLUE55E8}4qVW$P%nb1( zn$EO{AYwr)%!F#a<9pxSl&Kl>?zm68m``)xJLk-u`|dgC{+d@RQ>ILKNUVOj#2Qy= zH543u4+o~h}$Yl66AKfZVTN z1_u%lf3?qEJG%pMtyv?S3^;TM*WBQU6Utn$o&iZTwvu=cA^zF6h|BG%2U@d&{S0_= z5ZC;HacHlWtYI|+602FVnIO`WGQ!~RNa5ZVg^L5`$5`c)UviOSjm9gt7)J}8Ennd_IIhAYjbzV_$ z-R3U(L9hBZLcElHUSGJ0}_t za#K6u#u;t;A6y91c|}nN6uuK}$z90DX>AG*=5ypGw*=|DB9H?LhAYw#E3y`AjA6H(U1-B9gn0&roO)bscV1CJA0u^I4ve`2%!{>TpAy09=b-!WT>Oda@r{HvE!H;BCkj^gxa@IHsz20kcfvGmtMh4a|N#xYyvOee95 zjyfs!k|(V=Id - - - - icons/index.theme - icons/16x16/checked.png - icons/16x16/connected.png - icons/16x16/connected_notification.png - icons/16x16/disconnected.png - icons/16x16/failed.png - icons/16x16/info.png - icons/16x16/lock.png - icons/16x16/sync.png - icons/16x16/view-refresh.png - icons/48x48/bad_folder.png - icons/48x48/chip.png - icons/48x48/folder.png - icons/48x48/list-add.png - icons/48x48/no_avatar.png - icons/48x48/sd_card.png - icons/48x48/star.png - icons/256x256/plus_folder.png - - - ../default/style.qss - - diff --git a/dist/qt_themes/colorful_dark/icons/index.theme b/dist/qt_themes/colorful_dark/icons/index.theme deleted file mode 100644 index b37a06df78..0000000000 --- a/dist/qt_themes/colorful_dark/icons/index.theme +++ /dev/null @@ -1,8 +0,0 @@ -[Icon Theme] -Name=colorful_dark -Comment=Colorful theme (Dark style) -Inherits=colorful -Directories=16x16 - -[16x16] -Size=16 diff --git a/dist/qt_themes/colorful_dark/style.qrc b/dist/qt_themes/colorful_dark/style.qrc deleted file mode 100644 index 72451ef023..0000000000 --- a/dist/qt_themes/colorful_dark/style.qrc +++ /dev/null @@ -1,57 +0,0 @@ - - - - - icons/index.theme - icons/16x16/lock.png - icons/16x16/view-refresh.png - - - - ../qdarkstyle/rc/up_arrow_disabled.png - ../qdarkstyle/rc/Hmovetoolbar.png - ../qdarkstyle/rc/stylesheet-branch-end.png - ../qdarkstyle/rc/branch_closed-on.png - ../qdarkstyle/rc/stylesheet-vline.png - ../qdarkstyle/rc/branch_closed.png - ../qdarkstyle/rc/branch_open-on.png - ../qdarkstyle/rc/transparent.png - ../qdarkstyle/rc/right_arrow_disabled.png - ../qdarkstyle/rc/sizegrip.png - ../qdarkstyle/rc/close.png - ../qdarkstyle/rc/close-hover.png - ../qdarkstyle/rc/close-pressed.png - ../qdarkstyle/rc/down_arrow.png - ../qdarkstyle/rc/Vmovetoolbar.png - ../qdarkstyle/rc/left_arrow.png - ../qdarkstyle/rc/stylesheet-branch-more.png - ../qdarkstyle/rc/up_arrow.png - ../qdarkstyle/rc/right_arrow.png - ../qdarkstyle/rc/left_arrow_disabled.png - ../qdarkstyle/rc/Hsepartoolbar.png - ../qdarkstyle/rc/branch_open.png - ../qdarkstyle/rc/Vsepartoolbar.png - ../qdarkstyle/rc/down_arrow_disabled.png - ../qdarkstyle/rc/undock.png - ../qdarkstyle/rc/checkbox_checked_disabled.png - ../qdarkstyle/rc/checkbox_checked_focus.png - ../qdarkstyle/rc/checkbox_checked.png - ../qdarkstyle/rc/checkbox_indeterminate.png - ../qdarkstyle/rc/checkbox_indeterminate_focus.png - ../qdarkstyle/rc/checkbox_unchecked_disabled.png - ../qdarkstyle/rc/checkbox_unchecked_focus.png - ../qdarkstyle/rc/checkbox_unchecked.png - ../qdarkstyle/rc/radio_checked_disabled.png - ../qdarkstyle/rc/radio_checked_focus.png - ../qdarkstyle/rc/radio_checked.png - ../qdarkstyle/rc/radio_unchecked_disabled.png - ../qdarkstyle/rc/radio_unchecked_focus.png - ../qdarkstyle/rc/radio_unchecked.png - - - ../qdarkstyle/style.qss - - diff --git a/dist/qt_themes/colorful_midnight_blue/icons/index.theme b/dist/qt_themes/colorful_midnight_blue/icons/index.theme deleted file mode 100644 index dcb2c50d68..0000000000 --- a/dist/qt_themes/colorful_midnight_blue/icons/index.theme +++ /dev/null @@ -1,8 +0,0 @@ -[Icon Theme] -Name=colorful_midnight_blue -Comment=Colorful theme (Midnight Blue style) -Inherits=colorful -Directories=16x16 - -[16x16] -Size=16 diff --git a/dist/qt_themes/colorful_midnight_blue/style.qrc b/dist/qt_themes/colorful_midnight_blue/style.qrc deleted file mode 100644 index b9821c6722..0000000000 --- a/dist/qt_themes/colorful_midnight_blue/style.qrc +++ /dev/null @@ -1,63 +0,0 @@ - - - - - icons/index.theme - ../colorful_dark/icons/16x16/lock.png - ../qdarkstyle/icons/16x16/view-refresh.png - ../colorful/icons/48x48/bad_folder.png - ../colorful/icons/48x48/chip.png - ../colorful/icons/48x48/folder.png - ../colorful/icons/48x48/list-add.png - ../colorful/icons/48x48/sd_card.png - ../colorful/icons/256x256/plus_folder.png - - - - ../qdarkstyle_midnight_blue/rc/up_arrow_disabled.png - ../qdarkstyle_midnight_blue/rc/Hmovetoolbar.png - ../qdarkstyle_midnight_blue/rc/stylesheet-branch-end.png - ../qdarkstyle_midnight_blue/rc/branch_closed-on.png - ../qdarkstyle_midnight_blue/rc/stylesheet-vline.png - ../qdarkstyle_midnight_blue/rc/branch_closed.png - ../qdarkstyle_midnight_blue/rc/branch_open-on.png - ../qdarkstyle_midnight_blue/rc/transparent.png - ../qdarkstyle_midnight_blue/rc/right_arrow_disabled.png - ../qdarkstyle_midnight_blue/rc/sizegrip.png - ../qdarkstyle_midnight_blue/rc/close.png - ../qdarkstyle_midnight_blue/rc/close-hover.png - ../qdarkstyle_midnight_blue/rc/close-pressed.png - ../qdarkstyle_midnight_blue/rc/down_arrow.png - ../qdarkstyle_midnight_blue/rc/Vmovetoolbar.png - ../qdarkstyle_midnight_blue/rc/left_arrow.png - ../qdarkstyle_midnight_blue/rc/stylesheet-branch-more.png - ../qdarkstyle_midnight_blue/rc/up_arrow.png - ../qdarkstyle_midnight_blue/rc/right_arrow.png - ../qdarkstyle_midnight_blue/rc/left_arrow_disabled.png - ../qdarkstyle_midnight_blue/rc/Hsepartoolbar.png - ../qdarkstyle_midnight_blue/rc/branch_open.png - ../qdarkstyle_midnight_blue/rc/Vsepartoolbar.png - ../qdarkstyle_midnight_blue/rc/down_arrow_disabled.png - ../qdarkstyle_midnight_blue/rc/undock.png - ../qdarkstyle_midnight_blue/rc/checkbox_checked_disabled.png - ../qdarkstyle_midnight_blue/rc/checkbox_checked_focus.png - ../qdarkstyle_midnight_blue/rc/checkbox_checked.png - ../qdarkstyle_midnight_blue/rc/checkbox_indeterminate.png - ../qdarkstyle_midnight_blue/rc/checkbox_indeterminate_focus.png - ../qdarkstyle_midnight_blue/rc/checkbox_unchecked_disabled.png - ../qdarkstyle_midnight_blue/rc/checkbox_unchecked_focus.png - ../qdarkstyle_midnight_blue/rc/checkbox_unchecked.png - ../qdarkstyle_midnight_blue/rc/radio_checked_disabled.png - ../qdarkstyle_midnight_blue/rc/radio_checked_focus.png - ../qdarkstyle_midnight_blue/rc/radio_checked.png - ../qdarkstyle_midnight_blue/rc/radio_unchecked_disabled.png - ../qdarkstyle_midnight_blue/rc/radio_unchecked_focus.png - ../qdarkstyle_midnight_blue/rc/radio_unchecked.png - - - ../qdarkstyle_midnight_blue/style.qss - - diff --git a/dist/qt_themes/default/default.qrc b/dist/qt_themes/default/default.qrc index 4522865b4c..125bc3f342 100644 --- a/dist/qt_themes/default/default.qrc +++ b/dist/qt_themes/default/default.qrc @@ -4,23 +4,37 @@ SPDX-License-Identifier: GPL-2.0-or-later --> + + + style.qss + + + - icons/index.theme icons/16x16/connected.png icons/16x16/connected_notification.png icons/16x16/disconnected.png + icons/16x16/failed.png + icons/16x16/info.png icons/16x16/lock.png + icons/16x16/sync.png + icons/16x16/view-refresh.png icons/48x48/bad_folder.png icons/48x48/chip.png icons/48x48/folder.png icons/48x48/list-add.png + icons/48x48/no_avatar.png icons/48x48/sd_card.png icons/48x48/star.png icons/256x256/plus_folder.png icons/256x256/suyu.png - - style.qss + + + + ../default_dark/icons/index.theme + ../default_dark/icons/16x16/lock.png + ../default_dark/icons/16x16/view-refresh.png diff --git a/dist/qt_themes/colorful/icons/16x16/checked.png b/dist/qt_themes/default/icons/16x16/checked.png similarity index 100% rename from dist/qt_themes/colorful/icons/16x16/checked.png rename to dist/qt_themes/default/icons/16x16/checked.png diff --git a/dist/qt_themes/colorful/icons/16x16/failed.png b/dist/qt_themes/default/icons/16x16/failed.png similarity index 100% rename from dist/qt_themes/colorful/icons/16x16/failed.png rename to dist/qt_themes/default/icons/16x16/failed.png diff --git a/dist/qt_themes/colorful/icons/16x16/info.png b/dist/qt_themes/default/icons/16x16/info.png similarity index 100% rename from dist/qt_themes/colorful/icons/16x16/info.png rename to dist/qt_themes/default/icons/16x16/info.png diff --git a/dist/qt_themes/default/icons/16x16/lock.png b/dist/qt_themes/default/icons/16x16/lock.png index 69d399050804cfa45e00850d4330a5b7cfaa3a43..fd27069d807e26186c8a610bdbcc0ce172562af6 100644 GIT binary patch delta 252 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 N&`{A*F1u|N`hPMhH%|Zn literal 1948 zcma)-eKZsLAIHD5nN5aU-9;WUY$P#{Ym?Uzu!5(^E>B#&inOwpZ8zye?IvXKW~)!Ms)xH zinPlk0077;LI47`YG2aBX8=%(Bzd?~Q{*$RpiC?YcqtZz=o>c=z5GXg`t?63-4fe! zbFgeWf%WwJvdQ=(-W<2)YQ8C{o& zg%KN&u{8KkWTW87Pi~m!JOZ~0vCs!|#E3H1>6G~+t=_=;aI0LIErC@esf7Lra1lT< zUL{8U2vAuo{Vtqwgu!s|aBrP{@QutN5^`F0_o6&8;gQ@@I?pWGjd-lrrD{pw+McyA z<{Ydy^Jk#r2UV2syE+EOj$OiLBbl@NQp?+UMdpXKjail`u+IF!iDa{DftUI1h+kZE z0GS_^&O^mf2*W1qiNGM7b_(}mY%2?y`xRqy99f!HVTYN)XAGU`*d|ya^VQ;K8|kM- z3jerlBsC(&R(~b-X`bGWviEq7Ot&ga$msHIAeU8&^~lmUa?B{)?D9VH$U6Glq-j0I zVG~O986~Y8NtT8=+mA}G-v6l5Xy=%v5EiO@dM;7SYKk|(E>9S;k=Kh^VA*K0504J-a*hl;+5T^(q55GJg8L zGrVw>)<4d=*HGgH&Kl3&7W3+0{OI$?Hl(;#17=+B&dzr*eq8Ocx&Cu7$Vloc3+V!b zP5W29IX^(D)6G2y-le$U*necf?0F{^?!L6QC%M~=`WTkR0F&k&tS2iKEB;v@=;>aU z-V+rDpKb4vQb{)wg-;N~kLg`4QvOemgBk}HJ|)X2qj0LNQ2wtP0Y>E&w! zprWFIzR*eh{r&s!Yj?tGiji5!4`ydL~0$sKS0scSF>V;8?|7YEM!LB`Z zmR?&w2CJplJim6mDjn2JvbJo64=~OI&6E3Cl|#V!5_WX9Vhaa7s!LFjwY@$Fl+UoH z!XufdDz`gmVpLBCenlBaSoUaK2;YacVe4EgDcFNDl4e|pph5F&ey*#OgNQ;e3okpi z4wTdlpm|Ewy7@s6ac7qW&7Q5pDlTwYt+!~HszTdNn=fl7+iVt9T5A~fapw5%(-^z@ z`jK-=F<0UZ9SfCUs4p-fZ=17S4zl3uEJTv&55+ds3MzUm`s!cN=rO8R;iUfWc$X<9 zsHeJb(GnUqf6lYkc$cu%veQrhJ|p)lL@?r(Hy^ASWmYcejvVWma3e}yRmhqczNHRO z{Qt4szjrOkIM=WYFDgk~|MV3Im{s>|PXL=!^J)zp*`=;MF@^q%nbPwfpN7S=&TLA! z8pY?XtLtm?407y*TQt>JhtO6}*dj29k5*mfg&F@?*%z~H2o=l8TDBV4$XGz}1A^vH zzEO3f|0uK+_ChkgZRnUc5Z^Bf11ISl0O5G96Z=%#_uHYp5KA)D=r+*I%`|aKfKlB{ zJVPF|PtDbeloVc9See_AZ0NV*!?2-@vmgV5Y)oyzM`0m??Zw;f;=2m$5-iYGG0_Ua4T1^8k)8-V#duMR9 zXIl;?XR=ymU5;TUze(1MNnXErYbC>*;oPc336Ad{ZFR^bC;vJVxp7IVgjGB}tzbzn z|4S0x3?Yj*F|neAqv$MK)#FI3Q>ci5<$JoYif+Gx6oLfX?61r1Xu?Ra9W4v{9TJU1 z7g$?YVl`fyh@!qiB4@4tI$$Khwz>EEyCjhGB-mC*$NZF^>vz)^DdIR-#gN}6ekRh2 zXW-4fceM7Yf2c})q?U2LpH}v@xm!)PT~#?UM8l2rg3XhB#r7I^Sa2I^bnl6af#l9= zSa97AF_~Graq9C%$({)7W-ABh(CV_(f)Stg4S(jqR|HN@)z*jx=9Dzo(vvF)-y8In zN;B_{gg0;}oOt89<$}b7@)%a%IE|*ryp<|@O!;-otCVvUqLYVTaL0Al{MS!3CGi%} Yh89WFHBF|yt6vw8JpDWxh~e3P1CC-@r2qf` diff --git a/dist/qt_themes/default/icons/48x48/bad_folder.png b/dist/qt_themes/default/icons/48x48/bad_folder.png index 364ec646f6f1c6b5b632fb68efd2602aa2c87f25..34069c6b230de579d436fa9f0c21ae37af905b2e 100644 GIT binary patch delta 503 zcmVMLN`2`L5i1E*bZ0xZA+EWiRRzyd75 z0+!u4eEZa7(PBUW_oJiOcj^3O-H(qLOCa)pFZSO!HzS~4t7FCya6CA!z)2mZY~eTSYnn^Nw}$ z>v}KiDEQb+U3CvQ9-g=)N*xLEKM|z&|4-Fq68}Xh(|h^CH3}8`9|*OzB>g7(FJHJ? tG64xtEsHs}s+0m{xeJ{8Cpa7q$popE`M?eo;{B1n&osBYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vG$ zaR2}!aRGnSI!pin1B6LLK~!i%?U_qx6G0fqceY8JQfje^v^`Z?C}^vKU~SWss8#7B zq7>^BQS_o%D&FixC}>dx@paXk2fb`ZDZ`N1#yeVg56zU<8GBU+9eIp#J@EUkFq1{j3pFdw?%DLe;9&1{xf4~HRFVJbWs4gO*0WZOnAGQDDfvngJ|B@|Er_CrMLvI&}KUPF63tDU+} zHu4pokB2E_rhtzd8%iVXf$ngJ|1ia3wJcx6(n_)N0)IwY>*smAo+q4f{9^0^#k5Ym ztsLbAOnAJ#=$_Rg1-yDZ&wETH%28TCcyq84L#s!mNifwNjkY#ciBu_Sk3cNek5?c3 zsWD#541F15Iv?a4d3h(WRF1L&A|d~3Ea>`)7%IQ{_+{Dc2QLu6iLc^a(T>K3c&rX3 z1zsWj3B_=;jZ8e^3rO;8hQYp#oK3eX^~iLVl1+rr`)T^lJu zs({Fr#zpu9r#Zfe>&A1#;Lj+IubP5$t@m?VuzyUXQpg>F3B3<}qC{lrP&}zm9v86` zt_ui<{7W%#_ltBIm~H4%;-W|$;0Ne4MB*CvM}X_6@#={usi5)06$6iY$_E~HqlmX+ zwH@rsPKnqx5?zS5ieMU;b{2<2fxY35rhVAXKES8oTAPSmy9)Xt1OR#6SL$==RR>Ov#XPMuh06U)WY3f(Jf3*aAUt?W0XXD{?frwy}FYEx@1Okp>)ccpBU+GsvjbfN_gL8l$FL3%p3 z7AA3;zv7H zv$NlKH@gFOfWh#;p`a7>HS|=Xi|Jg_aj&Q#lU501AZa|+UAa*$TBPeBeF7jKv8Dk5 ze;w^um+kXLmkVYMlpEEerQBx#g;3;qrw4ny->$UZmIbjTWRb2Te(?ZM&|~|G3*z^{ zq-+vF0qojdHgVK7zYq;~zqlj79R{1La)8Rp))yK0 z>T2{Kfa!bW0|n%d2^)LCHHh}W@Dahqe*=IEjGiP3<~)Jf8ar(+mgszn)}G`TEFb57 zrOHkr+06?jN9vE!)Eh{BA4vTZFb0xF)Cb}q+CH!X7z0To>I0Mk^tVg^WtNXe+6UHl z0>7F3WqnsRU-W+9EdCE@3Mha(U=39Kwt-~tF_(V@tbhe@rpPOZE8smK ze>p4rtoJlw(sS~Sy_Ung-iEwoLv)`?aNS?OM9DdRze{bt7Y*)v=M)A$(H#DiS)^wYk?h>bk0U9E8N#dFJ zk7Z7Z{bBJ_?b-c#$@lcjrhY3rGspE`T8H<(#ta z__C`C_SfHjI(Z}Ue^zw8&i*}n=g26o2Zjq5>x4_@{atx`@A(p6txs?A`x& zH+P$zDR?}dd{Y-5qcq?&j$$V^VkMm620jJ78Zm`e_>qz)*nf;QVHMxeR!9z)a0X9MeSdR~J!&X``4#E0ETKP|3pDHOwoRWba)+CxW{lhf5VzqmN=u#sSn&Z| z;{&+H2XKuK;2IymH9mlAd;r(@0IpF0t+klgR;^uQtEs2}_oa4>zVMhO2Et<$-76Q` z@eQMQ`;Vx#7cGgnMl~#>_8Fozs^&HfIKb$Wd2k=g^itz9+6HD()!K_OR?wVESyVL! z%ZfH8@e*w(W;ppv)}K?`k`@X>S1?**}8GQ4U;xaoziYw&aP9>#K6FCLDMcJ zMv;L*jPcAXhggPH51kpFeh6)-s@NsKz)&x_JiT1`SSCY{P>+xfP&EvkxzRcGd*aWf ccAs{iWzSA@?$SRO+zyiTboFyt=akR{02`=D;Q#;t delta 149 zcmaFDc#Ls^WqpOGi(^Q}y|>pL`5Fv3SR6k5uRo@K6Ysy;;tX-dvfr70TTlQgYD^lA8tm5GmKYK9DMB>XWemnD#Xmdutj3| x>TEw(y-SO~EY62-=%@ed%(4DlnH&a{XiVnHj+glfIxdw<{Dl&Kl>?zm68m``)x zJLk-u`|dgC{+d@RQ>ILKNUVOj#2Qy=H543u4+o~h}$Yl66AKfZVTN1_u%lf3?qEJG%pMtyv?S3^;TM*WBQU6Utn$ zo&iZTwvu=cA%FhawusB^sRvrKg8dA5auC=2fpKWBmaJhl0}`ukA$A@?EYz-GLc83N zR2i~@-3+j^UtP0GUKoGfTDF3<3`o4O3FGG}#9~1~7Gx=Rq*UF1#$pCUt@}aRW7M*? zFIdTd+^cDzNaPvBpaJoSxrN<+^__ph*a3+*&Bya=F@F$haL%bA;cA#&lm&i;;Jijj z;F$58JZBI+8HE1>9PN9b{WutT9gy42RWxmMAsSzZM)jRA#;F-)j;a$PBPcJBp*{ra zCAz4~kC)iVanB{k0g2ZigJmnCTcu4?3#MW8?Hosw<8vr?%vOyZMuj_Cn|cVvX)Jw2 zYd$#+aDUD75vq)IV#wUorm2I-Ey{db%`4u1)fS)pbKt?UY2;AG*=5ypGw*=|DB9H?LhAYw#E3y`AjA6H(U1-B9gn0&r zoPT;;ZFgQ#K_4S^S`Li41I&xHWS;Hp;0--D^p*T0lzP1k(b_t$Elx!bCsZtp)qj<*O-oPg=d**0_9}GA%|M|Xej&tVxXD-ZPc9DpYdjqf?NCHoQ zS21cCMHX-wW!zdW0rO_jS7;o=X+Bks&Z4hSNC5qKPoST8mu+NJV>djmi?yxVq@d|F zxlh#Z0}n*oUVp=yM)4l|)2;^^MB9g1a~FX1*o{sA`M^Tpr|4T}O4Q^MlFR22Fot>u z9tXt!6L^FDDIc=*9Tt6WXWU%?)?ha{2^3lS7XiOT%xV+Drk0Rg65YU%r9O;GC;Y}_ zglv!Y1wak3EF{lCQNQgHa|_sEsW$@OLh=s)&rlmfAb++2pYi^h29-ZRi3@Lu?#q<- z6RNkNi5e1&2_I@uEpq4@ujnh^_`3|fS^c&gka;sZN^$|~JHSj|z0HJWjM@5Z#Y5tIWjT|}m^rw8d` z7tUQKskO>|#$|+Dpv^^4=KATN8|MRQBj#;e9)A%(M&Ob;SLj_Pg-p`v98v$80Y?g7 z0=NT_$prR`dXyzJ<3~-?2XwECfY?wk1p9nqi-DcG6#K;W3C?;WPCd{i#9CcqvQR0n z_1iH9oYH*~t%9@5xND91I1fAWns6y9{r1Y`UjWO+n2jQ449JUP0(*qeC+rusb-;HY z^M9!_jD5RIpi&cSOkErk=oBLDx;+o*@Gv{5i(6j@(@(lx^mUpxpM$z4v5M3HYk?jQ zgAY;X*HZnrTTGAUs1fZ$WbjS!gWT>0ffk%wY7%vUbsYQhO6WFuxs}u$Eja&E#_msH z`nN7?ChGP?dx1(Ho=P3#Hdb=hnw&r}@Mz0JI909@?jw}1WBs@$2zTI53+Ft7r4Ob>lo6-L4Y};3R4rOrlcXJ3v_k&NARG(<%BeaDteBN6Q9Q0EGrQ3sIBtx~rYT d9Om%9;xE_n=@mA1l}`Ww002ovPDHLkV1gj%$m9S3 diff --git a/dist/qt_themes/default/icons/index.theme b/dist/qt_themes/default/icons/index.theme index 21b35e3e3c..6c455463ee 100644 --- a/dist/qt_themes/default/icons/index.theme +++ b/dist/qt_themes/default/icons/index.theme @@ -1,7 +1,6 @@ [Icon Theme] Name=default -Comment=default theme -Inherits=colorful +Comment=Colorful theme Directories=16x16,48x48,256x256 [16x16] @@ -9,6 +8,6 @@ Size=16 [48x48] Size=48 - + [256x256] Size=256 diff --git a/dist/qt_themes/default/style.qss b/dist/qt_themes/default/style.qss index bd9c1964cf..16b779b1b8 100644 --- a/dist/qt_themes/default/style.qss +++ b/dist/qt_themes/default/style.qss @@ -22,7 +22,7 @@ QPushButton#TogglableStatusBarButton { } QPushButton#TogglableStatusBarButton:checked { - color: #000000; + color: palette(text); } QPushButton#TogglableStatusBarButton:hover { @@ -49,6 +49,10 @@ QPushButton#RendererStatusBarButton:!checked { color: #0066ff; } +QPushButton#RendererStatusBarButton:!checked[dark=true] { + color: #00ccdd; +} + QPushButton#GPUStatusBarButton { color: #656565; border: 1px solid transparent; @@ -65,13 +69,21 @@ QPushButton#GPUStatusBarButton:checked { color: #b06020; } +QPushButton#GPUStatusBarButton:checked[dark=true] { + color: #ff8040; +} + QPushButton#GPUStatusBarButton:!checked { color: #109010; } +QPushButton#GPUStatusBarButton:!checked[dark=true] { + color: #40dd40; +} + QPushButton#DockingStatusBarButton { min-width: 0px; - color: #000000; + color: palette(text); border: 1px solid transparent; background-color: transparent; padding: 0px 3px 0px 3px; @@ -131,10 +143,6 @@ QWidget#connectedControllers { background: transparent; } -QWidget#closeButtons { - background: transparent; -} - QWidget#playersSupported, QWidget#controllersSupported, QWidget#controllerSupported1, @@ -383,7 +391,7 @@ QStackedWidget#stackedDialog QTextBrowser QScrollBar::vertical { border-radius: 4px; } -QStackedWidget#stackedDialog QTextBrowser QScrollBar::horizoncal { +QStackedWidget#stackedDialog QTextBrowser QScrollBar::horizontal { background: #cdcdcd; height: 15px; margin: 3px 15px 3px 15px; @@ -592,42 +600,6 @@ QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:pressed { border-radius: 6px; } -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num { - image: url(:/overlay/osk_button_B.png); - image-position: right; - qproperty-icon: url(:/overlay/osk_button_backspace.png); - qproperty-iconSize: 36px; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift { - image: url(:/overlay/osk_button_Y.png); - image-position: right; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num { - image: url(:/overlay/osk_button_plus.png); - image-position: right; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift { - image: url(:/overlay/osk_button_shift_lock_off.png); - image-position: left; - qproperty-icon: url(:/overlay/osk_button_shift.png); - qproperty-iconSize: 36px; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift_shift { - image: url(:/overlay/osk_button_shift_lock_off.png); - image-position: left; - qproperty-icon: url(:/overlay/osk_button_shift_on.png); - qproperty-iconSize: 36px; -} - QDialog#QtSoftwareKeyboardDialog QPushButton#button_left_bracket, QDialog#QtSoftwareKeyboardDialog QPushButton#button_right_bracket, QDialog#QtSoftwareKeyboardDialog QPushButton#button_left_parenthesis, @@ -640,47 +612,6 @@ QDialog#QtSoftwareKeyboardDialog QWidget#titleOSK QLabel { color: #ccc; } -QDialog#QtSoftwareKeyboardDialog QWidget#button_L, -QDialog#QtSoftwareKeyboardDialog QWidget#button_L_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_L_num { - image: url(:/overlay/button_L.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_left, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_left_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_left_num { - image: url(:/overlay/arrow_left.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_R, -QDialog#QtSoftwareKeyboardDialog QWidget#button_R_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_R_num { - image: url(:/overlay/button_R.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_right, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_right_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_right_num { - image: url(:/overlay/arrow_right.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_press_stick, -QDialog#QtSoftwareKeyboardDialog QWidget#button_press_stick_shift { - image: url(:/overlay/button_press_stick.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_X, -QDialog#QtSoftwareKeyboardDialog QWidget#button_X_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_X_num { - image: url(:/overlay/button_X.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_A, -QDialog#QtSoftwareKeyboardDialog QWidget#button_A_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_A_num { - image: url(:/overlay/button_A.png); -} - QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_space:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_return:disabled, @@ -711,20 +642,3 @@ QDialog#QtSoftwareKeyboardDialog QPushButton#button_0:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_return:disabled { color: palette(midlight); } - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num:disabled { - image: url(:/overlay/osk_button_plus_disabled.png); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:disabled { - image: url(:/overlay/osk_button_B_disabled.png); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift:disabled { - image: url(:/overlay/osk_button_Y_disabled.png); -} diff --git a/dist/qt_themes/colorful_dark/icons/16x16/lock.png b/dist/qt_themes/default_dark/icons/16x16/lock.png similarity index 100% rename from dist/qt_themes/colorful_dark/icons/16x16/lock.png rename to dist/qt_themes/default_dark/icons/16x16/lock.png diff --git a/dist/qt_themes/colorful_dark/icons/16x16/view-refresh.png b/dist/qt_themes/default_dark/icons/16x16/view-refresh.png similarity index 100% rename from dist/qt_themes/colorful_dark/icons/16x16/view-refresh.png rename to dist/qt_themes/default_dark/icons/16x16/view-refresh.png diff --git a/dist/qt_themes/default_dark/icons/index.theme b/dist/qt_themes/default_dark/icons/index.theme index 60a072d1d6..32d84fa9bd 100644 --- a/dist/qt_themes/default_dark/icons/index.theme +++ b/dist/qt_themes/default_dark/icons/index.theme @@ -1,7 +1,7 @@ [Icon Theme] Name=default_dark Comment=Colorful theme (Dark style) -Inherits=colorful +Inherits=default Directories=16x16 [16x16] diff --git a/dist/qt_themes/default_dark/style.qrc b/dist/qt_themes/default_dark/style.qrc deleted file mode 100644 index 7de4737c2c..0000000000 --- a/dist/qt_themes/default_dark/style.qrc +++ /dev/null @@ -1,25 +0,0 @@ - - - - ../colorful/icons/16x16/connected.png - ../colorful/icons/16x16/connected_notification.png - ../colorful/icons/16x16/disconnected.png - icons/index.theme - ../colorful_dark/icons/16x16/lock.png - ../colorful_dark/icons/16x16/view-refresh.png - ../colorful/icons/48x48/bad_folder.png - ../colorful/icons/48x48/chip.png - ../colorful/icons/48x48/folder.png - ../qdarkstyle/icons/48x48/no_avatar.png - ../colorful/icons/48x48/list-add.png - ../colorful/icons/48x48/sd_card.png - ../colorful/icons/256x256/plus_folder.png - - - - style.qss - - diff --git a/dist/qt_themes/default_dark/style.qss b/dist/qt_themes/default_dark/style.qss deleted file mode 100644 index ca6daa2d52..0000000000 --- a/dist/qt_themes/default_dark/style.qss +++ /dev/null @@ -1,687 +0,0 @@ -/* -* SPDX-FileCopyrightText: 2018 yuzu Emulator Project -* SPDX-License-Identifier: GPL-2.0-or-later -*/ -QAbstractSpinBox { - min-height: 19px; -} - -QPushButton#TogglableStatusBarButton { - color: #959595; - border: 1px solid transparent; - background-color: transparent; - padding: 0px 3px 0px 3px; - text-align: center; -} - -QPushButton#TogglableStatusBarButton:checked { - color: palette(text); -} - -QPushButton#TogglableStatusBarButton:hover { - border: 1px solid #76797C; -} - -QPushButton#RendererStatusBarButton { - color: #656565; - border: 1px solid transparent; - background-color: transparent; - padding: 0px 3px 0px 3px; - text-align: center; -} - -QPushButton#RendererStatusBarButton:hover { - border: 1px solid #76797C; -} - -QPushButton#RendererStatusBarButton:checked { - color: #e85c00; -} - -QPushButton#RendererStatusBarButton:!checked { - color: #00ccdd; -} - -QPushButton#GPUStatusBarButton { - color: #656565; - border: 1px solid transparent; - background-color: transparent; - padding: 0px 3px 0px 3px; - text-align: center; -} - -QPushButton#GPUStatusBarButton:hover { - border: 1px solid #76797C; -} - -QPushButton#GPUStatusBarButton:checked { - color: #ff8040; -} - -QPushButton#GPUStatusBarButton:!checked { - color: #40dd40; -} - -QPushButton#DockingStatusBarButton { - min-width: 0px; - color: palette(text); - border: 1px solid transparent; - background-color: transparent; - padding: 0px 3px 0px 3px; - text-align: center; -} - -QPushButton#DockingStatusBarButton:hover { - border: 1px solid #76797C; -} - -QPushButton#buttonRefreshDevices { - min-width: 21px; - min-height: 21px; - max-width: 21px; - max-height: 21px; -} - -QWidget#bottomPerGameInput, -QWidget#topControllerApplet, -QWidget#bottomControllerApplet, -QGroupBox#groupPlayer1Connected:checked, -QGroupBox#groupPlayer2Connected:checked, -QGroupBox#groupPlayer3Connected:checked, -QGroupBox#groupPlayer4Connected:checked, -QGroupBox#groupPlayer5Connected:checked, -QGroupBox#groupPlayer6Connected:checked, -QGroupBox#groupPlayer7Connected:checked, -QGroupBox#groupPlayer8Connected:checked { - background-color: #f5f5f5; -} - -QWidget#topControllerApplet { - border-bottom: 1px solid #828790 -} - -QWidget#bottomPerGameInput, -QWidget#bottomControllerApplet { - border-top: 1px solid #828790 -} - -QWidget#topPerGameInput, -QWidget#middleControllerApplet { - background-color: #fff; -} - -QWidget#topPerGameInput QComboBox, -QWidget#middleControllerApplet QComboBox { - width: 120px; -} - -QWidget#connectedControllers { - background: transparent; -} - -QWidget#playersSupported, -QWidget#controllersSupported, -QWidget#controllerSupported1, -QWidget#controllerSupported2, -QWidget#controllerSupported3, -QWidget#controllerSupported4, -QWidget#controllerSupported5, -QWidget#controllerSupported6 { - border: none; - background: transparent; -} - -QGroupBox#groupPlayer1Connected, -QGroupBox#groupPlayer2Connected, -QGroupBox#groupPlayer3Connected, -QGroupBox#groupPlayer4Connected, -QGroupBox#groupPlayer5Connected, -QGroupBox#groupPlayer6Connected, -QGroupBox#groupPlayer7Connected, -QGroupBox#groupPlayer8Connected { - border: 1px solid #828790; - border-radius: 3px; - padding: 0px; - min-height: 98px; - max-height: 98px; -} - -QGroupBox#groupPlayer1Connected:unchecked, -QGroupBox#groupPlayer2Connected:unchecked, -QGroupBox#groupPlayer3Connected:unchecked, -QGroupBox#groupPlayer4Connected:unchecked, -QGroupBox#groupPlayer5Connected:unchecked, -QGroupBox#groupPlayer6Connected:unchecked, -QGroupBox#groupPlayer7Connected:unchecked, -QGroupBox#groupPlayer8Connected:unchecked { - border: 1px solid #d9d9d9; -} - -QGroupBox#groupPlayer1Connected::title, -QGroupBox#groupPlayer2Connected::title, -QGroupBox#groupPlayer3Connected::title, -QGroupBox#groupPlayer4Connected::title, -QGroupBox#groupPlayer5Connected::title, -QGroupBox#groupPlayer6Connected::title, -QGroupBox#groupPlayer7Connected::title, -QGroupBox#groupPlayer8Connected::title { - subcontrol-origin: margin; - subcontrol-position: top left; - padding-left: 0px; - padding-right: 0px; - padding-top: 1px; - margin-left: 0px; - margin-right: -4px; - margin-bottom: 4px; -} - -QCheckBox#checkboxPlayer1Connected, -QCheckBox#checkboxPlayer2Connected, -QCheckBox#checkboxPlayer3Connected, -QCheckBox#checkboxPlayer4Connected, -QCheckBox#checkboxPlayer5Connected, -QCheckBox#checkboxPlayer6Connected, -QCheckBox#checkboxPlayer7Connected, -QCheckBox#checkboxPlayer8Connected { - spacing: 0px; -} - -QWidget#Player1LEDs QCheckBox, -QWidget#Player2LEDs QCheckBox, -QWidget#Player3LEDs QCheckBox, -QWidget#Player4LEDs QCheckBox, -QWidget#Player5LEDs QCheckBox, -QWidget#Player6LEDs QCheckBox, -QWidget#Player7LEDs QCheckBox, -QWidget#Player8LEDs QCheckBox { - spacing: 0px; -} - -QWidget#Player1LEDs QCheckBox::indicator, -QWidget#Player2LEDs QCheckBox::indicator, -QWidget#Player3LEDs QCheckBox::indicator, -QWidget#Player4LEDs QCheckBox::indicator, -QWidget#Player5LEDs QCheckBox::indicator, -QWidget#Player6LEDs QCheckBox::indicator, -QWidget#Player7LEDs QCheckBox::indicator, -QWidget#Player8LEDs QCheckBox::indicator { - width: 6px; - height: 6px; - margin-left: 0px; -} - -QWidget#bottomPerGameInput QCheckBox#checkboxPlayer1Connected::indicator, -QWidget#bottomPerGameInput QCheckBox#checkboxPlayer2Connected::indicator, -QWidget#bottomPerGameInput QCheckBox#checkboxPlayer3Connected::indicator, -QWidget#bottomPerGameInput QCheckBox#checkboxPlayer4Connected::indicator, -QWidget#bottomPerGameInput QCheckBox#checkboxPlayer5Connected::indicator, -QWidget#bottomPerGameInput QCheckBox#checkboxPlayer6Connected::indicator, -QWidget#bottomPerGameInput QCheckBox#checkboxPlayer7Connected::indicator, -QWidget#bottomPerGameInput QCheckBox#checkboxPlayer8Connected::indicator { - width: 12px; - height: 12px; -} - -QCheckBox#checkboxPlayer1Connected::indicator, -QCheckBox#checkboxPlayer2Connected::indicator, -QCheckBox#checkboxPlayer3Connected::indicator, -QCheckBox#checkboxPlayer4Connected::indicator, -QCheckBox#checkboxPlayer5Connected::indicator, -QCheckBox#checkboxPlayer6Connected::indicator, -QCheckBox#checkboxPlayer7Connected::indicator, -QCheckBox#checkboxPlayer8Connected::indicator { - width: 14px; - height: 14px; -} - -QGroupBox#groupPlayer1Connected::indicator, -QGroupBox#groupPlayer2Connected::indicator, -QGroupBox#groupPlayer3Connected::indicator, -QGroupBox#groupPlayer4Connected::indicator, -QGroupBox#groupPlayer5Connected::indicator, -QGroupBox#groupPlayer6Connected::indicator, -QGroupBox#groupPlayer7Connected::indicator, -QGroupBox#groupPlayer8Connected::indicator { - width: 16px; - height: 16px; -} - -QWidget#Player1LEDs QCheckBox::indicator:checked, -QWidget#Player2LEDs QCheckBox::indicator:checked, -QWidget#Player3LEDs QCheckBox::indicator:checked, -QWidget#Player4LEDs QCheckBox::indicator:checked, -QWidget#Player5LEDs QCheckBox::indicator:checked, -QWidget#Player6LEDs QCheckBox::indicator:checked, -QWidget#Player7LEDs QCheckBox::indicator:checked, -QWidget#Player8LEDs QCheckBox::indicator:checked, -QGroupBox#groupPlayer1Connected::indicator:checked, -QGroupBox#groupPlayer2Connected::indicator:checked, -QGroupBox#groupPlayer3Connected::indicator:checked, -QGroupBox#groupPlayer4Connected::indicator:checked, -QGroupBox#groupPlayer5Connected::indicator:checked, -QGroupBox#groupPlayer6Connected::indicator:checked, -QGroupBox#groupPlayer7Connected::indicator:checked, -QGroupBox#groupPlayer8Connected::indicator:checked, -QCheckBox#checkboxPlayer1Connected::indicator:checked, -QCheckBox#checkboxPlayer2Connected::indicator:checked, -QCheckBox#checkboxPlayer3Connected::indicator:checked, -QCheckBox#checkboxPlayer4Connected::indicator:checked, -QCheckBox#checkboxPlayer5Connected::indicator:checked, -QCheckBox#checkboxPlayer6Connected::indicator:checked, -QCheckBox#checkboxPlayer7Connected::indicator:checked, -QCheckBox#checkboxPlayer8Connected::indicator:checked, -QGroupBox#groupConnectedController::indicator:checked { - border-radius: 2px; - border: 1px solid #929192; - background: #39ff14; - image: none; -} - -QWidget#Player1LEDs QCheckBox::indicator:unchecked, -QWidget#Player2LEDs QCheckBox::indicator:unchecked, -QWidget#Player3LEDs QCheckBox::indicator:unchecked, -QWidget#Player4LEDs QCheckBox::indicator:unchecked, -QWidget#Player5LEDs QCheckBox::indicator:unchecked, -QWidget#Player6LEDs QCheckBox::indicator:unchecked, -QWidget#Player7LEDs QCheckBox::indicator:unchecked, -QWidget#Player8LEDs QCheckBox::indicator:unchecked, -QGroupBox#groupPlayer1Connected::indicator:unchecked, -QGroupBox#groupPlayer2Connected::indicator:unchecked, -QGroupBox#groupPlayer3Connected::indicator:unchecked, -QGroupBox#groupPlayer4Connected::indicator:unchecked, -QGroupBox#groupPlayer5Connected::indicator:unchecked, -QGroupBox#groupPlayer6Connected::indicator:unchecked, -QGroupBox#groupPlayer7Connected::indicator:unchecked, -QGroupBox#groupPlayer8Connected::indicator:unchecked, -QCheckBox#checkboxPlayer1Connected::indicator:unchecked, -QCheckBox#checkboxPlayer2Connected::indicator:unchecked, -QCheckBox#checkboxPlayer3Connected::indicator:unchecked, -QCheckBox#checkboxPlayer4Connected::indicator:unchecked, -QCheckBox#checkboxPlayer5Connected::indicator:unchecked, -QCheckBox#checkboxPlayer6Connected::indicator:unchecked, -QCheckBox#checkboxPlayer7Connected::indicator:unchecked, -QCheckBox#checkboxPlayer8Connected::indicator:unchecked, -QGroupBox#groupConnectedController::indicator:unchecked { - border-radius: 2px; - border: 1px solid #929192; - background: transparent; - image: none; -} - -QWidget#controllerPlayer1, -QWidget#controllerPlayer2, -QWidget#controllerPlayer3, -QWidget#controllerPlayer4, -QWidget#controllerPlayer5, -QWidget#controllerPlayer6, -QWidget#controllerPlayer7, -QWidget#controllerPlayer8 { - background: transparent; -} - -QDialog#QtSoftwareKeyboardDialog, -QStackedWidget#topOSK { - background: rgba(51, 51, 51, .9); -} - - -QDialog#OverlayDialog, -QStackedWidget#stackedDialog { - background: rgba(51, 51, 51, .7); -} - -QWidget#boxOSK, -QWidget#lineOSK, -QWidget#richDialog, -QWidget#lineDialog { - background: transparent; -} - -QStackedWidget#bottomOSK, -QWidget#contentDialog, -QWidget#contentRichDialog { - background: rgba(240, 240, 240, 1); -} - -QWidget#contentDialog, -QWidget#contentRichDialog { - margin: 5px; - border-radius: 6px; -} - -QWidget#buttonsDialog, -QWidget#buttonsRichDialog { - margin: 5px; - border-top: 2px solid rgba(44, 44, 44, 1); -} - -QWidget#legendOSKnum { - border-top: 1px solid rgba(44, 44, 44, 1); -} - -QStackedWidget#stackedDialog QTextBrowser QScrollBar::vertical { - background: #cdcdcd; - width: 15px; - margin: 15px 3px 15px 3px; - border: 1px transparent; - border-radius: 4px; -} - -QStackedWidget#stackedDialog QTextBrowser QScrollBar::horizoncal { - background: #cdcdcd; - height: 15px; - margin: 3px 15px 3px 15px; - border: 1px transparent; - border-radius: 4px; -} - -QStackedWidget#stackedDialog QTextBrowser QScrollBar::handle { - background: #fff; - border-radius: 4px; - min-height: 5px; - min-width: 5px; -} - -QStackedWidget#stackedDialog QTextBrowser QScrollBar::add-line, -QStackedWidget#stackedDialog QTextBrowser QScrollBar::sub-line, -QStackedWidget#stackedDialog QTextBrowser QScrollBar::add-page, -QStackedWidget#stackedDialog QTextBrowser QScrollBar::sub-page { - background: none; -} - -QWidget#inputOSK { - border-bottom: 3px solid rgba(255, 255, 255, .9); -} - -QWidget#inputOSK QLineEdit { - background: transparent; - border: none; - color: #ccc; -} - -QWidget#inputBoxOSK { - border: 2px solid rgba(255, 255, 255, .9); -} - -QWidget#inputBoxOSK QTextEdit { - background: transparent; - border: none; - color: #ccc; -} - -QWidget#richDialog QTextBrowser { - background: transparent; - border: none; - padding: 35px 65px; -} - - -QWidget#lineOSK QLabel#label_header { - color: #f0f0f0; -} - -QWidget#lineOSK QLabel#label_sub, -QWidget#lineOSK QLabel#label_characters, -QWidget#boxOSK QLabel#label_characters_box { - color: #ccc; -} - -QWidget#contentDialog QLabel#label_title, -QWidget#contentRichDialog QLabel#label_title_rich { - color: #888; -} - -QWidget#contentDialog QLabel#label_dialog { - padding: 20px 65px; -} - -QWidget#contentDialog QLabel#label_title, -QWidget#contentRichDialog QLabel#label_title_rich { - padding: 0px 65px; -} - -QDialog#OverlayDialog QPushButton { - color: rgba(49, 79, 239, 1); - background: transparent; - border: none; - padding: 0px; - min-width: 0px; -} - -QDialog#OverlayDialog QPushButton:focus, -QDialog#OverlayDialog QPushButton:hover { - color: rgba(49, 79, 239, 1); - background: rgba(255, 255, 255, 1); - border: 5px solid rgba(148, 250, 202, 1); - border-radius: 6px; - outline: none; -} - -QDialog#OverlayDialog QPushButton:pressed { - color: rgba(240, 240, 240, 1); - background: rgba(150, 150, 150, 1); - border: 5px solid rgba(148, 250, 202, 1); - border-radius: 6px; - outline: none; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton { - background: rgba(232, 232, 232, 1); - border: 2px solid rgba(240, 240, 240, 1); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_return, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift_shift, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_return_shift, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift { - background: rgba(218, 218, 218, 1); - border: 2px solid rgba(240, 240, 240, 1); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num { - color: rgba(240, 240, 240, 1); - background: rgba(44, 44, 44, 1); - border: 2px solid rgba(240, 240, 240, 1); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num { - color: rgba(240, 240, 240, 1); - background: rgba(49, 79, 239, 1); - border: 2px solid rgba(240, 240, 240, 1); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton:focus, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:focus, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift:focus, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space:focus, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_return:focus, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace:focus, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift:focus, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift_shift:focus, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift:focus, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_return_shift:focus, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift:focus, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num:focus, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:focus, - -QDialog#QtSoftwareKeyboardDialog QPushButton:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_return:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift_shift:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_return_shift:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num:hover, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:hover { - color: rgba(0, 0, 0, 1); - background: rgba(255, 255, 255, 1); - border: 5px solid rgba(148, 250, 202, 1); - border-radius: 6px; - outline: none; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton:pressed, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:pressed, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift:pressed, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space:pressed, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_return:pressed, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace:pressed, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift:pressed, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift_shift:pressed, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift:pressed, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_return_shift:pressed, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift:pressed, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num:pressed, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:pressed { - color: rgba(240, 240, 240, 1); - background: rgba(150, 150, 150, 1); - border: 5px solid rgba(148, 250, 202, 1); - border-radius: 6px; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num { - image: url(:/overlay/osk_button_B.png); - image-position: right; - qproperty-icon: url(:/overlay/osk_button_backspace.png); - qproperty-iconSize: 36px; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift { - image: url(:/overlay/osk_button_Y.png); - image-position: right; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num { - image: url(:/overlay/osk_button_plus.png); - image-position: right; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift { - image: url(:/overlay/osk_button_shift_lock_off.png); - image-position: left; - qproperty-icon: url(:/overlay/osk_button_shift.png); - qproperty-iconSize: 36px; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift_shift { - image: url(:/overlay/osk_button_shift_lock_off.png); - image-position: left; - qproperty-icon: url(:/overlay/osk_button_shift_on.png); - qproperty-iconSize: 36px; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_left_bracket, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_right_bracket, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_left_parenthesis, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_right_parenthesis { - padding-bottom: 7px; -} - -QDialog#QtSoftwareKeyboardDialog QWidget#titleOSK QLabel { - background: transparent; - color: #ccc; -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_L, -QDialog#QtSoftwareKeyboardDialog QWidget#button_L_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_L_num { - image: url(:/overlay/button_L.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_left, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_left_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_left_num { - image: url(:/overlay/arrow_left.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_R, -QDialog#QtSoftwareKeyboardDialog QWidget#button_R_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_R_num { - image: url(:/overlay/button_R.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_right, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_right_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_right_num { - image: url(:/overlay/arrow_right.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_press_stick, -QDialog#QtSoftwareKeyboardDialog QWidget#button_press_stick_shift { - image: url(:/overlay/button_press_stick.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_X, -QDialog#QtSoftwareKeyboardDialog QWidget#button_X_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_X_num { - image: url(:/overlay/button_X.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_A, -QDialog#QtSoftwareKeyboardDialog QWidget#button_A_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_A_num { - image: url(:/overlay/button_A.png); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_return:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_return_shift:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:disabled { - color: rgba(164, 164, 164, 1); - background-color: rgba(218, 218, 218, 1); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_at:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_slash:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_percent:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_1:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_2:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_3:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_4:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_5:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_6:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_7:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_8:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_9:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_0:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_return:disabled { - color: rgba(164, 164, 164, 1); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num:disabled { - image: url(:/overlay/osk_button_plus_disabled.png); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:disabled { - image: url(:/overlay/osk_button_B_disabled.png); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift:disabled { - image: url(:/overlay/osk_button_Y_disabled.png); -} diff --git a/dist/qt_themes/monochrome/icons.qrc b/dist/qt_themes/monochrome/icons.qrc new file mode 100644 index 0000000000..4eb16294fe --- /dev/null +++ b/dist/qt_themes/monochrome/icons.qrc @@ -0,0 +1,32 @@ + + + + + icons/index.theme + icons/16x16/lock.png + icons/48x48/bad_folder.png + icons/48x48/chip.png + icons/48x48/folder.png + icons/48x48/list-add.png + icons/48x48/sd_card.png + icons/48x48/star.png + icons/256x256/plus_folder.png + + + + + ../monochrome_dark/icons/index.theme + ../monochrome_dark/icons/16x16/lock.png + ../monochrome_dark/icons/48x48/bad_folder.png + ../monochrome_dark/icons/48x48/chip.png + ../monochrome_dark/icons/48x48/folder.png + ../monochrome_dark/icons/48x48/list-add.png + ../monochrome_dark/icons/48x48/no_avatar.png + ../monochrome_dark/icons/48x48/sd_card.png + ../monochrome_dark/icons/48x48/star.png + ../monochrome_dark/icons/256x256/plus_folder.png + + diff --git a/dist/qt_themes/monochrome/icons/16x16/lock.png b/dist/qt_themes/monochrome/icons/16x16/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..69d399050804cfa45e00850d4330a5b7cfaa3a43 GIT binary patch literal 318 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 Yh89WFHBF|yt6vw8JpDWxh~e3P1CC-@r2qf` literal 0 HcmV?d00001 diff --git a/dist/qt_themes/monochrome/icons/48x48/bad_folder.png b/dist/qt_themes/monochrome/icons/48x48/bad_folder.png new file mode 100644 index 0000000000000000000000000000000000000000..364ec646f6f1c6b5b632fb68efd2602aa2c87f25 GIT binary patch literal 1007 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vG$aR2}!aRGnSI!pin1B6LLK~!i%?U_qx z6G0fqceY8JQfje^v^`Z?C}^vKU~SWss8#7Bq7>^BQS_o%D&FixC}>dx@paXk2fb!jWysaGN1x$Fnz386RA_cs9JkNVfB+5}*KzMVo z5<{y;q)9N<9gVg&R*6(8YL7rH){j>o{HZZs%M5)PVmcq>8+myruvCt+0wN**YAopb zi5M!s`S@ko?FTOqzlpEnUD1xlhIp(FB?VwYW}3myAWYoh(Hxy15i^77XU%ODqNIRm zsA)TAnqQsWj3B_=;jZ8e^3r zO;8hQYp#oK3eX^~iLVl1+rr`)T^lJus({Fr#zpu9r#Zfe>&A1#;Lj+IubP5$t@m?V zuuP;<$Q^+Ry$^k&L}ckuJgH9}7qJws3kZk&OEGZwi*y>8ZRk?sqDUR!2k0|I;u`ly zfa|C6>WL?*pz*^M1CM&j2Of5#h__<39qh|aiP$v~U5K}eU>cZq7KcNDz2T0geb~-E zz^C9^n}}TFz5u5E5Rnrej8uAxaM_G!0EK=Rp=(?hfG77T^ho4iLv7dvX}nq6NNrBuZx2B0n{&Y%FbQ3BjX|dkvr%emElgoI zw0EU!l-g)MR&=5T4ne0Kvq5?~w-zRGn!oAM^*Tr!RzSCZ@~MLUANU0C!aI=u%gB)< d$Nzz*{RLYl6+9v2Tqpnl002ovPDHLkV1lP2!l3{F literal 0 HcmV?d00001 diff --git a/dist/qt_themes/monochrome/icons/48x48/chip.png b/dist/qt_themes/monochrome/icons/48x48/chip.png new file mode 100644 index 0000000000000000000000000000000000000000..1b573d51af66864f03a7e20179d3ea4d5f36a012 GIT binary patch literal 511 zcmV9EdCE@3Mha(U=39Kwt-~tF_(V@tbhe@rpPOZE8smKIV=0D_cUSBbMlS7Ve^b~ zpCI|hZY>H}i=fZIrA1)D1@I{LT3H0%iJ()9pbkp0*SBv$NROG$ZR`C;c@8vM#WlBm z{-GACg|z-hS|#Kl^7*&fDJ`V(w`ieRqP0$ZEg|VT>qFz6Y$1y&q@7Zx@kTj?21PC) zHMxM)jIsc&7LsTWuF!bVv`}9saWpNoO|;gDRts6n>E5-FHCYQuD)BkSjYNaI%<}%J z58;F3UVI|X%|r>jh`p8;fgjL6pjLKcQNTIyl_2?73nvPx#1ZP1_K>z@;j|==^1poj532;bRa{vG$asU7#askq98zBGy0jx!G;=NG{;w3(V&)^%7sC5cDp(K0(Eum7VP&2?Hew~5;RZehy&5rvSNM^VC)kWN zVHMxeR!9z)a0X9MeRGaIYAAsD73r}op+A}nH0$iPO`j}shnuBljNAke zx8X5LOP&H)@c~@p1GvTqaE%Y(8Xv$lK7ea{0N3~cu2BH3wV2petzBcQsi*+=rFM+I z@R%hA!ebQOD;L`F4WoDakEpd5Es3~BH7uj{8KO0+<~9sC!03~Ca39O`<1^X@W>MAJ zi!oNvoJv_#H3rLyHYV{BZ6{_ytlBSEK+1 z9X(wfLp;3So;KuSP~dUC`0U^Gu!R9iB3fEjPkbdm@pg-Z*l@4;Y#AsZGNCu2rl{_h ojlvg2t|q1;trMCncE~dD#zk`|?lR_b0UE~O>FVdQ&MBb@0NraiKmY&$ literal 0 HcmV?d00001 diff --git a/dist/qt_themes/monochrome/icons/48x48/sd_card.png b/dist/qt_themes/monochrome/icons/48x48/sd_card.png new file mode 100644 index 0000000000000000000000000000000000000000..6bcb7f6b1d93ab9bf8731849832aa88df68b0fd3 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?31We{epSZZGe6s+)c zaSX}0_x8FYUxNV$i^GTi^~cn&+=x(=%u};{v&H06PkCtJvZCsP{SW0+&pdlL-EzG| z-1TF9PY%8>U;^s5J>Boa&B$C$hNGxBS?WfCd ieyFWGC%N1H)%2fvs!qH~tv4HLK~kQselF{r5}E)AjzNq7 literal 0 HcmV?d00001 diff --git a/dist/qt_themes/monochrome/icons/48x48/star.png b/dist/qt_themes/monochrome/icons/48x48/star.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b78f0c3e543913b18d4f95956109c7d2646ba8 GIT binary patch literal 1029 zcmV+g1p51lP)X)lQZo@-L=cu)ZHg3&%A{3AU{olP z1-a8`)uIOkK?H#db72rfkkLY-$D*Q0B3jg{0v8dMp}mlZe3E70Z83B4od0>=d**0_ z9}GA%|M|Xej&tVxXD-ZPc9DpYdjqf?NCHoQS21cCMHX-wW!zdW0rO_jS7;o=X+Bks z&Z4hSNC5qKPoST8mu+NJV>djmi?yxVq@d|Fxlh#Z0}n*oUc;J3@gDort_K=K+lN_m z7l8HHjZOghz(U}s=v!w>)Z`M9%jXd=hI$7c2gLppc!T{ZAF}iv7JYAL++6_HU^h4k z6j}Ng0l!7eY7@eymXKT$-N2BgK8#8y{KjO2Y>)N@Kn<`gB+o%nzwHup3)o?)Hv->6 z@(%#dP#Z%awgI2<{+b4rKR}5KZ;9^9l=l;`HOTxDU^IeA61d{Se>Eca2vF)bfin>W zo}%`CFBG7bLKKbDRzmp>tP=HJZ7K*qfakzHE#ieypcdE-YyuXC;I0MAeLUK50sCyH zfQvwG2qDwR)!I|S(|Nx^<+#6SuYrmf%}P{gP3dD2SQ#|h?r?fl42qN*&`iR&v&woIo+~%R@L- zt`Y7dl&@p`xF!g9;7<$ZJj6y&w`}R6QIB=wJR9Av6A9oXY8y>Un14sh237!t2005+lkvK%ox>dF@W0|O*YW8UHg=Uy00000NkvXXu0mjfk8a2c literal 0 HcmV?d00001 diff --git a/dist/qt_themes/colorful/icons/index.theme b/dist/qt_themes/monochrome/icons/index.theme similarity index 60% rename from dist/qt_themes/colorful/icons/index.theme rename to dist/qt_themes/monochrome/icons/index.theme index 6eb3c69495..c2764622e0 100644 --- a/dist/qt_themes/colorful/icons/index.theme +++ b/dist/qt_themes/monochrome/icons/index.theme @@ -1,8 +1,9 @@ [Icon Theme] -Name=colorful -Comment=Colorful theme +Name=monochrome +Comment=Monochrome light icons +Inherits=default Directories=16x16,48x48,256x256 - + [16x16] Size=16 diff --git a/dist/qt_themes/monochrome/style.qrc b/dist/qt_themes/monochrome/style.qrc new file mode 100644 index 0000000000..54778e2f54 --- /dev/null +++ b/dist/qt_themes/monochrome/style.qrc @@ -0,0 +1,5 @@ + + + ../default/style.qss + + diff --git a/dist/qt_themes/qdarkstyle/icons/16x16/lock.png b/dist/qt_themes/monochrome_dark/icons/16x16/lock.png similarity index 100% rename from dist/qt_themes/qdarkstyle/icons/16x16/lock.png rename to dist/qt_themes/monochrome_dark/icons/16x16/lock.png diff --git a/dist/qt_themes/qdarkstyle/icons/256x256/plus_folder.png b/dist/qt_themes/monochrome_dark/icons/256x256/plus_folder.png similarity index 100% rename from dist/qt_themes/qdarkstyle/icons/256x256/plus_folder.png rename to dist/qt_themes/monochrome_dark/icons/256x256/plus_folder.png diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/bad_folder.png b/dist/qt_themes/monochrome_dark/icons/48x48/bad_folder.png similarity index 100% rename from dist/qt_themes/qdarkstyle/icons/48x48/bad_folder.png rename to dist/qt_themes/monochrome_dark/icons/48x48/bad_folder.png diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/chip.png b/dist/qt_themes/monochrome_dark/icons/48x48/chip.png similarity index 100% rename from dist/qt_themes/qdarkstyle/icons/48x48/chip.png rename to dist/qt_themes/monochrome_dark/icons/48x48/chip.png diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/folder.png b/dist/qt_themes/monochrome_dark/icons/48x48/folder.png similarity index 100% rename from dist/qt_themes/qdarkstyle/icons/48x48/folder.png rename to dist/qt_themes/monochrome_dark/icons/48x48/folder.png diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/list-add.png b/dist/qt_themes/monochrome_dark/icons/48x48/list-add.png similarity index 100% rename from dist/qt_themes/qdarkstyle/icons/48x48/list-add.png rename to dist/qt_themes/monochrome_dark/icons/48x48/list-add.png diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/no_avatar.png b/dist/qt_themes/monochrome_dark/icons/48x48/no_avatar.png similarity index 100% rename from dist/qt_themes/qdarkstyle/icons/48x48/no_avatar.png rename to dist/qt_themes/monochrome_dark/icons/48x48/no_avatar.png diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/sd_card.png b/dist/qt_themes/monochrome_dark/icons/48x48/sd_card.png similarity index 100% rename from dist/qt_themes/qdarkstyle/icons/48x48/sd_card.png rename to dist/qt_themes/monochrome_dark/icons/48x48/sd_card.png diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/star.png b/dist/qt_themes/monochrome_dark/icons/48x48/star.png similarity index 100% rename from dist/qt_themes/qdarkstyle/icons/48x48/star.png rename to dist/qt_themes/monochrome_dark/icons/48x48/star.png diff --git a/dist/qt_themes/monochrome_dark/icons/index.theme b/dist/qt_themes/monochrome_dark/icons/index.theme new file mode 100644 index 0000000000..9ca318d09e --- /dev/null +++ b/dist/qt_themes/monochrome_dark/icons/index.theme @@ -0,0 +1,14 @@ +[Icon Theme] +Name=monochrome_dark +Comment=Monochrome dark icons +Inherits=default_dark +Directories=16x16,48x48,256x256 + +[16x16] +Size=16 + +[48x48] +Size=48 + +[256x256] +Size=256 diff --git a/dist/qt_themes/qdarkstyle/style.qss b/dist/qt_themes/qdarkstyle/dark.qss similarity index 93% rename from dist/qt_themes/qdarkstyle/style.qss rename to dist/qt_themes/qdarkstyle/dark.qss index 328ac942fc..09397f89f5 100644 --- a/dist/qt_themes/qdarkstyle/style.qss +++ b/dist/qt_themes/qdarkstyle/dark.qss @@ -1380,10 +1380,6 @@ QWidget#connectedControllers { background: transparent; } -QWidget#closeButtons { - background: transparent; -} - QWidget#playersSupported, QWidget#controllersSupported, QWidget#controllerSupported1, @@ -1843,40 +1839,17 @@ QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:pressed { QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace, QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift, QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num { - image: url(:/overlay/osk_button_B_dark.png); image-position: right; - qproperty-icon: url(:/overlay/osk_button_backspace_dark.png); qproperty-iconSize: 36px; } -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift { - image: url(:/overlay/osk_button_Y_dark.png); - image-position: right; -} - QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok, QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift, QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num { color: rgba(44, 44, 44, 1); - image: url(:/overlay/osk_button_plus_dark.png); image-position: right; } -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift { - image: url(:/overlay/osk_button_shift_lock_off.png); - image-position: left; - qproperty-icon: url(:/overlay/osk_button_shift_dark.png); - qproperty-iconSize: 36px; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift_shift { - image: url(:/overlay/osk_button_shift_lock_off.png); - image-position: left; - qproperty-icon: url(:/overlay/osk_button_shift_on_dark.png); - qproperty-iconSize: 36px; -} - QDialog#QtSoftwareKeyboardDialog QPushButton#button_left_bracket, QDialog#QtSoftwareKeyboardDialog QPushButton#button_right_bracket, QDialog#QtSoftwareKeyboardDialog QPushButton#button_left_parenthesis, @@ -1889,47 +1862,6 @@ QDialog#QtSoftwareKeyboardDialog QWidget#titleOSK QLabel { color: #ccc; } -QDialog#QtSoftwareKeyboardDialog QWidget#button_L, -QDialog#QtSoftwareKeyboardDialog QWidget#button_L_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_L_num { - image: url(:/overlay/button_L_dark.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_left, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_left_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_left_num { - image: url(:/overlay/arrow_left_dark.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_R, -QDialog#QtSoftwareKeyboardDialog QWidget#button_R_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_R_num { - image: url(:/overlay/button_R_dark.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_right, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_right_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_right_num { - image: url(:/overlay/arrow_right_dark.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_press_stick, -QDialog#QtSoftwareKeyboardDialog QWidget#button_press_stick_shift { - image: url(:/overlay/button_press_stick_dark.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_X, -QDialog#QtSoftwareKeyboardDialog QWidget#button_X_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_X_num { - image: url(:/overlay/button_X_dark.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_A, -QDialog#QtSoftwareKeyboardDialog QWidget#button_A_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_A_num { - image: url(:/overlay/button_A_dark.png); -} - QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_space:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_return:disabled, @@ -1961,23 +1893,6 @@ QDialog#QtSoftwareKeyboardDialog QPushButton#button_return:disabled { color: rgba(144, 144, 144, 1); } -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num:disabled { - image: url(:/overlay/osk_button_plus_dark_disabled.png); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:disabled { - image: url(:/overlay/osk_button_B_dark_disabled.png); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift:disabled { - image: url(:/overlay/osk_button_Y_dark_disabled.png); -} - QDialog#QtSoftwareKeyboardDialog QFrame, QDialog#QtSoftwareKeyboardDialog QFrame[frameShape="0"], QDialog#OverlayDialog QFrame, diff --git a/dist/qt_themes/qdarkstyle/icons.qrc b/dist/qt_themes/qdarkstyle/icons.qrc new file mode 100644 index 0000000000..d7ec900649 --- /dev/null +++ b/dist/qt_themes/qdarkstyle/icons.qrc @@ -0,0 +1,51 @@ + + + icons/index.theme + ../default_dark/icons/16x16/lock.png + + + icons/index.theme + ../default_dark/icons/16x16/lock.png + + + rc/branch_closed-on.png + rc/branch_closed.png + rc/branch_open-on.png + rc/branch_open.png + rc/checkbox_checked.png + rc/checkbox_checked_disabled.png + rc/checkbox_checked_focus.png + rc/checkbox_indeterminate.png + rc/checkbox_indeterminate_focus.png + rc/checkbox_unchecked.png + rc/checkbox_unchecked_disabled.png + rc/checkbox_unchecked_focus.png + rc/close-hover.png + rc/close-pressed.png + rc/close.png + rc/down_arrow.png + rc/down_arrow_disabled.png + rc/Hmovetoolbar.png + rc/Hsepartoolbar.png + rc/left_arrow.png + rc/left_arrow_disabled.png + rc/radio_checked.png + rc/radio_checked_disabled.png + rc/radio_checked_focus.png + rc/radio_unchecked.png + rc/radio_unchecked_disabled.png + rc/radio_unchecked_focus.png + rc/right_arrow.png + rc/right_arrow_disabled.png + rc/sizegrip.png + rc/stylesheet-branch-end.png + rc/stylesheet-branch-more.png + rc/stylesheet-vline.png + rc/transparent.png + rc/undock.png + rc/up_arrow.png + rc/up_arrow_disabled.png + rc/Vmovetoolbar.png + rc/Vsepartoolbar.png + + diff --git a/dist/qt_themes/qdarkstyle/icons/16x16/connected.png b/dist/qt_themes/qdarkstyle/icons/16x16/connected.png deleted file mode 100644 index 0afc18cb7a19028fd567a7ca7ced62cd164657de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmV-F0>J%=P)0k{|sIn0V`B1xGGFnerg>I4!7^B>UM&p)aM9vQI<{ZJ4 z8HZ4p+_%{7AT1;1-`r}Q8XRRVYW9}G=D3HXRO!FFg z<>v6FfXkm66-$M=OnPPtTpl}lK!#o^J26y#00VLkV5Ig4hAIxCZ~AU@6mMaG2|$+zA&;BarDZyi@16B z4lE8kTwX8y!4LxB2>hW4yn!GbZg+WiA%P|k^Ip;o774}ts6fO6U&y7=hp3TO@-WL? z{^Mh)gLW3&bGqIiV!1gSPQ{V|zW{P&fJjHVbAtc? N002ovPDHLkV1hH82Xp`c diff --git a/dist/qt_themes/qdarkstyle/icons/16x16/connected_notification.png b/dist/qt_themes/qdarkstyle/icons/16x16/connected_notification.png deleted file mode 100644 index 72466e098e471ae5a97c49a56536dd4bf62b3a08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0*y&TK~y+Tl~Y|v z6j2oZ?(CguoZVz~OB-RWz#nLd9z^@Yo&q%@j2=qtp^PLV$cmEeAL_xE^2wfrs242~ zp$Ef$h%#S%kW`EcLR4x6ZEJVk8F%j7>CU(tNkRF+;a<+Y=R4my_gvyQ4zjp<{ql`; zI^D*(O+BwTbI<>_2MD8-wl5<%-+In!I@(0@^Fzo{bD*j!D3xKFhG&Lp!dzV1$6_(` z^gLuV6YIgUEb0c8*Ie*2x#lAhY;J={1gb21z6E0ugAZC@F^euEux;jDmV`UFz7l>- zK|xT%#N<56!g^D3Wwr@)QUY z@d)MRLDK?Qog0L{ZY_3>K0_%MP_m~6ird7|QOF|6#=1I$H9tA_=53H>6>z~YHTJ@7 zb_Nd4PV}Lux(a+|27GF2$(u@fs~(9UHZ*jca>r)zc$_}(It@ippva0SLlzB`5RY_2 zDJ%pZ9`=H=;M3EPtE-_V5`;>`*WTHAw^h71&5pJA_QIN1DX?Z|p%fSYQs6=ghhYg- zVhSf|d1>iW;`5ymOPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0v$<2K~y+Tl~PS> zQ$Z9x^WL<1ZG=jLsqtf@CIu;o=wGnd1VlHD;-XFKLZw(mq)@*>1VJ>!or+OVq^`wu znJxuC&?1zmaamnO1NME*%5JoAzwQ9hHiSzzQVT5*fC(vPaz_Kh*+6Kq5b=Zyr$6d-BjRvNsUN9r<)$o0v zs;137DRgyhL@Z{(G)=_g8<0qB!nUp3v1>;LeY^L_vp9U_(^UgFXW)W|)!HD0fHMwq z`Rc|0_8q`L@sq zk>1%G63fVBGANuFmY*(fDuPllKmS8eCS`Em`r?L1hp>O&UTLdSRsk4e>gLt9;4C;0 zLcq{BFQXMa*Fk%G45d;@#y$LM{=|d(5AnGC1hkF9bzQ?)OM&Zp`Y#clJ$)W#YAJ!{ z4H0nGY&P-w?HjzG{fJLxahf`;55)a!M*cR#Fvf$Tw4UQO#< z+13h9kDdH|_{gEo)RvScR^ra>BKrFe$hQ&GwNfR74B5P3+o;Y|898=5|6Tg*(O>)p iN=@~G{{?26=FLU_5=aXOVS_yY00002?p zD}XSgpwrRCKtah8*NBqf{Irtt#G+J&^73-M%)IR4TP^t%4d#k2I8Aju - - icons/index.theme - icons/16x16/connected.png - icons/16x16/disconnected.png - icons/16x16/connected_notification.png - icons/16x16/lock.png - icons/16x16/view-refresh.png - icons/48x48/bad_folder.png - icons/48x48/chip.png - icons/48x48/folder.png - icons/48x48/no_avatar.png - icons/48x48/list-add.png - icons/48x48/sd_card.png - icons/48x48/star.png - icons/256x256/plus_folder.png - - - rc/up_arrow_disabled.png - rc/Hmovetoolbar.png - rc/stylesheet-branch-end.png - rc/branch_closed-on.png - rc/stylesheet-vline.png - rc/branch_closed.png - rc/branch_open-on.png - rc/transparent.png - rc/right_arrow_disabled.png - rc/sizegrip.png - rc/close.png - rc/close-hover.png - rc/close-pressed.png - rc/down_arrow.png - rc/Vmovetoolbar.png - rc/left_arrow.png - rc/stylesheet-branch-more.png - rc/up_arrow.png - rc/right_arrow.png - rc/left_arrow_disabled.png - rc/Hsepartoolbar.png - rc/branch_open.png - rc/Vsepartoolbar.png - rc/down_arrow_disabled.png - rc/undock.png - rc/checkbox_checked_disabled.png - rc/checkbox_checked_focus.png - rc/checkbox_checked.png - rc/checkbox_indeterminate.png - rc/checkbox_indeterminate_focus.png - rc/checkbox_unchecked_disabled.png - rc/checkbox_unchecked_focus.png - rc/checkbox_unchecked.png - rc/radio_checked_disabled.png - rc/radio_checked_focus.png - rc/radio_checked.png - rc/radio_unchecked_disabled.png - rc/radio_unchecked_focus.png - rc/radio_unchecked.png - - - style.qss - + + dark.qss + diff --git a/dist/qt_themes/qdarkstyle_midnight_blue/style.qss b/dist/qt_themes/qdarkstyle_midnight_blue/dark.qss similarity index 95% rename from dist/qt_themes/qdarkstyle_midnight_blue/style.qss rename to dist/qt_themes/qdarkstyle_midnight_blue/dark.qss index eb0889b139..a90ac5d5e0 100644 --- a/dist/qt_themes/qdarkstyle_midnight_blue/style.qss +++ b/dist/qt_themes/qdarkstyle_midnight_blue/dark.qss @@ -2779,41 +2779,10 @@ QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:pressed { border-radius: 6px; } -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num { - image: url(:/overlay/osk_button_B_dark.png); - image-position: right; - qproperty-icon: url(:/overlay/osk_button_backspace_dark.png); - qproperty-iconSize: 36px; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift { - image: url(:/overlay/osk_button_Y_dark.png); - image-position: right; -} - QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok, QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift, QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num { color: rgba(44, 44, 44, 1); - image: url(:/overlay/osk_button_plus_dark.png); - image-position: right; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift { - image: url(:/overlay/osk_button_shift_lock_off.png); - image-position: left; - qproperty-icon: url(:/overlay/osk_button_shift_dark.png); - qproperty-iconSize: 36px; -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_shift_shift { - image: url(:/overlay/osk_button_shift_lock_off.png); - image-position: left; - qproperty-icon: url(:/overlay/osk_button_shift_on_dark.png); - qproperty-iconSize: 36px; } QDialog#QtSoftwareKeyboardDialog QPushButton#button_left_bracket, @@ -2828,47 +2797,6 @@ QDialog#QtSoftwareKeyboardDialog QWidget#titleOSK QLabel { color: #ccc; } -QDialog#QtSoftwareKeyboardDialog QWidget#button_L, -QDialog#QtSoftwareKeyboardDialog QWidget#button_L_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_L_num { - image: url(:/overlay/button_L_dark.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_left, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_left_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_left_num { - image: url(:/overlay/arrow_left_dark.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_R, -QDialog#QtSoftwareKeyboardDialog QWidget#button_R_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_R_num { - image: url(:/overlay/button_R_dark.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_right, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_right_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#arrow_right_num { - image: url(:/overlay/arrow_right_dark.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_press_stick, -QDialog#QtSoftwareKeyboardDialog QWidget#button_press_stick_shift { - image: url(:/overlay/button_press_stick_dark.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_X, -QDialog#QtSoftwareKeyboardDialog QWidget#button_X_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_X_num { - image: url(:/overlay/button_X_dark.png); -} - -QDialog#QtSoftwareKeyboardDialog QWidget#button_A, -QDialog#QtSoftwareKeyboardDialog QWidget#button_A_shift, -QDialog#QtSoftwareKeyboardDialog QWidget#button_A_num { - image: url(:/overlay/button_A_dark.png); -} - QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_space:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_return:disabled, @@ -2899,20 +2827,3 @@ QDialog#QtSoftwareKeyboardDialog QPushButton#button_0:disabled, QDialog#QtSoftwareKeyboardDialog QPushButton#button_return:disabled { color: rgba(144, 144, 144, 1); } - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_shift:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_ok_num:disabled { - image: url(:/overlay/osk_button_plus_dark_disabled.png); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_shift:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_backspace_num:disabled { - image: url(:/overlay/osk_button_B_dark_disabled.png); -} - -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space:disabled, -QDialog#QtSoftwareKeyboardDialog QPushButton#button_space_shift:disabled { - image: url(:/overlay/osk_button_Y_dark_disabled.png); -} diff --git a/dist/qt_themes/qdarkstyle_midnight_blue/icons.qrc b/dist/qt_themes/qdarkstyle_midnight_blue/icons.qrc new file mode 100644 index 0000000000..1a071adda6 --- /dev/null +++ b/dist/qt_themes/qdarkstyle_midnight_blue/icons.qrc @@ -0,0 +1,224 @@ + + + + + icons/index.theme + + + icons/index.theme + + + + rc/arrow_down.png + rc/arrow_down@2x.png + rc/arrow_down_disabled.png + rc/arrow_down_disabled@2x.png + rc/arrow_down_focus.png + rc/arrow_down_focus@2x.png + rc/arrow_down_pressed.png + rc/arrow_down_pressed@2x.png + rc/arrow_left.png + rc/arrow_left@2x.png + rc/arrow_left_disabled.png + rc/arrow_left_disabled@2x.png + rc/arrow_left_focus.png + rc/arrow_left_focus@2x.png + rc/arrow_left_pressed.png + rc/arrow_left_pressed@2x.png + rc/arrow_right.png + rc/arrow_right@2x.png + rc/arrow_right_disabled.png + rc/arrow_right_disabled@2x.png + rc/arrow_right_focus.png + rc/arrow_right_focus@2x.png + rc/arrow_right_pressed.png + rc/arrow_right_pressed@2x.png + rc/arrow_up.png + rc/arrow_up@2x.png + rc/arrow_up_disabled.png + rc/arrow_up_disabled@2x.png + rc/arrow_up_focus.png + rc/arrow_up_focus@2x.png + rc/arrow_up_pressed.png + rc/arrow_up_pressed@2x.png + rc/base_icon.png + rc/base_icon@2x.png + rc/base_icon_disabled.png + rc/base_icon_disabled@2x.png + rc/base_icon_focus.png + rc/base_icon_focus@2x.png + rc/base_icon_pressed.png + rc/base_icon_pressed@2x.png + rc/branch_closed.png + rc/branch_closed@2x.png + rc/branch_closed_disabled.png + rc/branch_closed_disabled@2x.png + rc/branch_closed_focus.png + rc/branch_closed_focus@2x.png + rc/branch_closed_pressed.png + rc/branch_closed_pressed@2x.png + rc/branch_end.png + rc/branch_end@2x.png + rc/branch_end_disabled.png + rc/branch_end_disabled@2x.png + rc/branch_end_focus.png + rc/branch_end_focus@2x.png + rc/branch_end_pressed.png + rc/branch_end_pressed@2x.png + rc/branch_line.png + rc/branch_line@2x.png + rc/branch_line_disabled.png + rc/branch_line_disabled@2x.png + rc/branch_line_focus.png + rc/branch_line_focus@2x.png + rc/branch_line_pressed.png + rc/branch_line_pressed@2x.png + rc/branch_more.png + rc/branch_more@2x.png + rc/branch_more_disabled.png + rc/branch_more_disabled@2x.png + rc/branch_more_focus.png + rc/branch_more_focus@2x.png + rc/branch_more_pressed.png + rc/branch_more_pressed@2x.png + rc/branch_open.png + rc/branch_open@2x.png + rc/branch_open_disabled.png + rc/branch_open_disabled@2x.png + rc/branch_open_focus.png + rc/branch_open_focus@2x.png + rc/branch_open_pressed.png + rc/branch_open_pressed@2x.png + rc/checkbox_checked.png + rc/checkbox_checked@2x.png + rc/checkbox_checked_disabled.png + rc/checkbox_checked_disabled@2x.png + rc/checkbox_checked_focus.png + rc/checkbox_checked_focus@2x.png + rc/checkbox_checked_pressed.png + rc/checkbox_checked_pressed@2x.png + rc/checkbox_indeterminate.png + rc/checkbox_indeterminate@2x.png + rc/checkbox_indeterminate_disabled.png + rc/checkbox_indeterminate_disabled@2x.png + rc/checkbox_indeterminate_focus.png + rc/checkbox_indeterminate_focus@2x.png + rc/checkbox_indeterminate_pressed.png + rc/checkbox_indeterminate_pressed@2x.png + rc/checkbox_unchecked.png + rc/checkbox_unchecked@2x.png + rc/checkbox_unchecked_disabled.png + rc/checkbox_unchecked_disabled@2x.png + rc/checkbox_unchecked_focus.png + rc/checkbox_unchecked_focus@2x.png + rc/checkbox_unchecked_pressed.png + rc/checkbox_unchecked_pressed@2x.png + rc/line_horizontal.png + rc/line_horizontal@2x.png + rc/line_horizontal_disabled.png + rc/line_horizontal_disabled@2x.png + rc/line_horizontal_focus.png + rc/line_horizontal_focus@2x.png + rc/line_horizontal_pressed.png + rc/line_horizontal_pressed@2x.png + rc/line_vertical.png + rc/line_vertical@2x.png + rc/line_vertical_disabled.png + rc/line_vertical_disabled@2x.png + rc/line_vertical_focus.png + rc/line_vertical_focus@2x.png + rc/line_vertical_pressed.png + rc/line_vertical_pressed@2x.png + rc/radio_checked.png + rc/radio_checked@2x.png + rc/radio_checked_disabled.png + rc/radio_checked_disabled@2x.png + rc/radio_checked_focus.png + rc/radio_checked_focus@2x.png + rc/radio_checked_pressed.png + rc/radio_checked_pressed@2x.png + rc/radio_unchecked.png + rc/radio_unchecked@2x.png + rc/radio_unchecked_disabled.png + rc/radio_unchecked_disabled@2x.png + rc/radio_unchecked_focus.png + rc/radio_unchecked_focus@2x.png + rc/radio_unchecked_pressed.png + rc/radio_unchecked_pressed@2x.png + rc/toolbar_move_horizontal.png + rc/toolbar_move_horizontal@2x.png + rc/toolbar_move_horizontal_disabled.png + rc/toolbar_move_horizontal_disabled@2x.png + rc/toolbar_move_horizontal_focus.png + rc/toolbar_move_horizontal_focus@2x.png + rc/toolbar_move_horizontal_pressed.png + rc/toolbar_move_horizontal_pressed@2x.png + rc/toolbar_move_vertical.png + rc/toolbar_move_vertical@2x.png + rc/toolbar_move_vertical_disabled.png + rc/toolbar_move_vertical_disabled@2x.png + rc/toolbar_move_vertical_focus.png + rc/toolbar_move_vertical_focus@2x.png + rc/toolbar_move_vertical_pressed.png + rc/toolbar_move_vertical_pressed@2x.png + rc/toolbar_separator_horizontal.png + rc/toolbar_separator_horizontal@2x.png + rc/toolbar_separator_horizontal_disabled.png + rc/toolbar_separator_horizontal_disabled@2x.png + rc/toolbar_separator_horizontal_focus.png + rc/toolbar_separator_horizontal_focus@2x.png + rc/toolbar_separator_horizontal_pressed.png + rc/toolbar_separator_horizontal_pressed@2x.png + rc/toolbar_separator_vertical.png + rc/toolbar_separator_vertical@2x.png + rc/toolbar_separator_vertical_disabled.png + rc/toolbar_separator_vertical_disabled@2x.png + rc/toolbar_separator_vertical_focus.png + rc/toolbar_separator_vertical_focus@2x.png + rc/toolbar_separator_vertical_pressed.png + rc/toolbar_separator_vertical_pressed@2x.png + rc/transparent.png + rc/transparent@2x.png + rc/transparent_disabled.png + rc/transparent_disabled@2x.png + rc/transparent_focus.png + rc/transparent_focus@2x.png + rc/transparent_pressed.png + rc/transparent_pressed@2x.png + rc/window_close.png + rc/window_close@2x.png + rc/window_close_disabled.png + rc/window_close_disabled@2x.png + rc/window_close_focus.png + rc/window_close_focus@2x.png + rc/window_close_pressed.png + rc/window_close_pressed@2x.png + rc/window_grip.png + rc/window_grip@2x.png + rc/window_grip_disabled.png + rc/window_grip_disabled@2x.png + rc/window_grip_focus.png + rc/window_grip_focus@2x.png + rc/window_grip_pressed.png + rc/window_grip_pressed@2x.png + rc/window_minimize.png + rc/window_minimize@2x.png + rc/window_minimize_disabled.png + rc/window_minimize_disabled@2x.png + rc/window_minimize_focus.png + rc/window_minimize_focus@2x.png + rc/window_minimize_pressed.png + rc/window_minimize_pressed@2x.png + rc/window_undock.png + rc/window_undock@2x.png + rc/window_undock_disabled.png + rc/window_undock_disabled@2x.png + rc/window_undock_focus.png + rc/window_undock_focus@2x.png + rc/window_undock_pressed.png + rc/window_undock_pressed@2x.png + + diff --git a/dist/qt_themes/qdarkstyle_midnight_blue/icons/index.theme b/dist/qt_themes/qdarkstyle_midnight_blue/icons/index.theme index 20f9f6d633..34c449f19a 100644 --- a/dist/qt_themes/qdarkstyle_midnight_blue/icons/index.theme +++ b/dist/qt_themes/qdarkstyle_midnight_blue/icons/index.theme @@ -1,14 +1,4 @@ [Icon Theme] Name=qdarkstyle_midnight_blue -Comment=dark theme -Inherits=colorful -Directories=16x16,48x48,256x256 - -[16x16] -Size=16 - -[48x48] -Size=48 - -[256x256] -Size=256 +Comment=Dark theme (Midnight Blue style) +Inherits=default_dark diff --git a/dist/qt_themes/qdarkstyle_midnight_blue/style.qrc b/dist/qt_themes/qdarkstyle_midnight_blue/style.qrc index dc3d7fecbd..0cdaefa035 100644 --- a/dist/qt_themes/qdarkstyle_midnight_blue/style.qrc +++ b/dist/qt_themes/qdarkstyle_midnight_blue/style.qrc @@ -1,228 +1,5 @@ - - icons/index.theme - ../qdarkstyle/icons/16x16/lock.png - ../qdarkstyle/icons/16x16/view-refresh.png - ../qdarkstyle/icons/48x48/bad_folder.png - ../qdarkstyle/icons/48x48/chip.png - ../qdarkstyle/icons/48x48/folder.png - ../qdarkstyle/icons/48x48/no_avatar.png - ../qdarkstyle/icons/48x48/list-add.png - ../qdarkstyle/icons/48x48/sd_card.png - ../qdarkstyle/icons/48x48/star.png - ../qdarkstyle/icons/256x256/plus_folder.png - - - rc/arrow_down.png - rc/arrow_down@2x.png - rc/arrow_down_disabled.png - rc/arrow_down_disabled@2x.png - rc/arrow_down_focus.png - rc/arrow_down_focus@2x.png - rc/arrow_down_pressed.png - rc/arrow_down_pressed@2x.png - rc/arrow_left.png - rc/arrow_left@2x.png - rc/arrow_left_disabled.png - rc/arrow_left_disabled@2x.png - rc/arrow_left_focus.png - rc/arrow_left_focus@2x.png - rc/arrow_left_pressed.png - rc/arrow_left_pressed@2x.png - rc/arrow_right.png - rc/arrow_right@2x.png - rc/arrow_right_disabled.png - rc/arrow_right_disabled@2x.png - rc/arrow_right_focus.png - rc/arrow_right_focus@2x.png - rc/arrow_right_pressed.png - rc/arrow_right_pressed@2x.png - rc/arrow_up.png - rc/arrow_up@2x.png - rc/arrow_up_disabled.png - rc/arrow_up_disabled@2x.png - rc/arrow_up_focus.png - rc/arrow_up_focus@2x.png - rc/arrow_up_pressed.png - rc/arrow_up_pressed@2x.png - rc/base_icon.png - rc/base_icon@2x.png - rc/base_icon_disabled.png - rc/base_icon_disabled@2x.png - rc/base_icon_focus.png - rc/base_icon_focus@2x.png - rc/base_icon_pressed.png - rc/base_icon_pressed@2x.png - rc/branch_closed.png - rc/branch_closed@2x.png - rc/branch_closed_disabled.png - rc/branch_closed_disabled@2x.png - rc/branch_closed_focus.png - rc/branch_closed_focus@2x.png - rc/branch_closed_pressed.png - rc/branch_closed_pressed@2x.png - rc/branch_end.png - rc/branch_end@2x.png - rc/branch_end_disabled.png - rc/branch_end_disabled@2x.png - rc/branch_end_focus.png - rc/branch_end_focus@2x.png - rc/branch_end_pressed.png - rc/branch_end_pressed@2x.png - rc/branch_line.png - rc/branch_line@2x.png - rc/branch_line_disabled.png - rc/branch_line_disabled@2x.png - rc/branch_line_focus.png - rc/branch_line_focus@2x.png - rc/branch_line_pressed.png - rc/branch_line_pressed@2x.png - rc/branch_more.png - rc/branch_more@2x.png - rc/branch_more_disabled.png - rc/branch_more_disabled@2x.png - rc/branch_more_focus.png - rc/branch_more_focus@2x.png - rc/branch_more_pressed.png - rc/branch_more_pressed@2x.png - rc/branch_open.png - rc/branch_open@2x.png - rc/branch_open_disabled.png - rc/branch_open_disabled@2x.png - rc/branch_open_focus.png - rc/branch_open_focus@2x.png - rc/branch_open_pressed.png - rc/branch_open_pressed@2x.png - rc/checkbox_checked.png - rc/checkbox_checked@2x.png - rc/checkbox_checked_disabled.png - rc/checkbox_checked_disabled@2x.png - rc/checkbox_checked_focus.png - rc/checkbox_checked_focus@2x.png - rc/checkbox_checked_pressed.png - rc/checkbox_checked_pressed@2x.png - rc/checkbox_indeterminate.png - rc/checkbox_indeterminate@2x.png - rc/checkbox_indeterminate_disabled.png - rc/checkbox_indeterminate_disabled@2x.png - rc/checkbox_indeterminate_focus.png - rc/checkbox_indeterminate_focus@2x.png - rc/checkbox_indeterminate_pressed.png - rc/checkbox_indeterminate_pressed@2x.png - rc/checkbox_unchecked.png - rc/checkbox_unchecked@2x.png - rc/checkbox_unchecked_disabled.png - rc/checkbox_unchecked_disabled@2x.png - rc/checkbox_unchecked_focus.png - rc/checkbox_unchecked_focus@2x.png - rc/checkbox_unchecked_pressed.png - rc/checkbox_unchecked_pressed@2x.png - rc/line_horizontal.png - rc/line_horizontal@2x.png - rc/line_horizontal_disabled.png - rc/line_horizontal_disabled@2x.png - rc/line_horizontal_focus.png - rc/line_horizontal_focus@2x.png - rc/line_horizontal_pressed.png - rc/line_horizontal_pressed@2x.png - rc/line_vertical.png - rc/line_vertical@2x.png - rc/line_vertical_disabled.png - rc/line_vertical_disabled@2x.png - rc/line_vertical_focus.png - rc/line_vertical_focus@2x.png - rc/line_vertical_pressed.png - rc/line_vertical_pressed@2x.png - rc/radio_checked.png - rc/radio_checked@2x.png - rc/radio_checked_disabled.png - rc/radio_checked_disabled@2x.png - rc/radio_checked_focus.png - rc/radio_checked_focus@2x.png - rc/radio_checked_pressed.png - rc/radio_checked_pressed@2x.png - rc/radio_unchecked.png - rc/radio_unchecked@2x.png - rc/radio_unchecked_disabled.png - rc/radio_unchecked_disabled@2x.png - rc/radio_unchecked_focus.png - rc/radio_unchecked_focus@2x.png - rc/radio_unchecked_pressed.png - rc/radio_unchecked_pressed@2x.png - rc/toolbar_move_horizontal.png - rc/toolbar_move_horizontal@2x.png - rc/toolbar_move_horizontal_disabled.png - rc/toolbar_move_horizontal_disabled@2x.png - rc/toolbar_move_horizontal_focus.png - rc/toolbar_move_horizontal_focus@2x.png - rc/toolbar_move_horizontal_pressed.png - rc/toolbar_move_horizontal_pressed@2x.png - rc/toolbar_move_vertical.png - rc/toolbar_move_vertical@2x.png - rc/toolbar_move_vertical_disabled.png - rc/toolbar_move_vertical_disabled@2x.png - rc/toolbar_move_vertical_focus.png - rc/toolbar_move_vertical_focus@2x.png - rc/toolbar_move_vertical_pressed.png - rc/toolbar_move_vertical_pressed@2x.png - rc/toolbar_separator_horizontal.png - rc/toolbar_separator_horizontal@2x.png - rc/toolbar_separator_horizontal_disabled.png - rc/toolbar_separator_horizontal_disabled@2x.png - rc/toolbar_separator_horizontal_focus.png - rc/toolbar_separator_horizontal_focus@2x.png - rc/toolbar_separator_horizontal_pressed.png - rc/toolbar_separator_horizontal_pressed@2x.png - rc/toolbar_separator_vertical.png - rc/toolbar_separator_vertical@2x.png - rc/toolbar_separator_vertical_disabled.png - rc/toolbar_separator_vertical_disabled@2x.png - rc/toolbar_separator_vertical_focus.png - rc/toolbar_separator_vertical_focus@2x.png - rc/toolbar_separator_vertical_pressed.png - rc/toolbar_separator_vertical_pressed@2x.png - rc/transparent.png - rc/transparent@2x.png - rc/transparent_disabled.png - rc/transparent_disabled@2x.png - rc/transparent_focus.png - rc/transparent_focus@2x.png - rc/transparent_pressed.png - rc/transparent_pressed@2x.png - rc/window_close.png - rc/window_close@2x.png - rc/window_close_disabled.png - rc/window_close_disabled@2x.png - rc/window_close_focus.png - rc/window_close_focus@2x.png - rc/window_close_pressed.png - rc/window_close_pressed@2x.png - rc/window_grip.png - rc/window_grip@2x.png - rc/window_grip_disabled.png - rc/window_grip_disabled@2x.png - rc/window_grip_focus.png - rc/window_grip_focus@2x.png - rc/window_grip_pressed.png - rc/window_grip_pressed@2x.png - rc/window_minimize.png - rc/window_minimize@2x.png - rc/window_minimize_disabled.png - rc/window_minimize_disabled@2x.png - rc/window_minimize_focus.png - rc/window_minimize_focus@2x.png - rc/window_minimize_pressed.png - rc/window_minimize_pressed@2x.png - rc/window_undock.png - rc/window_undock@2x.png - rc/window_undock_disabled.png - rc/window_undock_disabled@2x.png - rc/window_undock_focus.png - rc/window_undock_focus@2x.png - rc/window_undock_pressed.png - rc/window_undock_pressed@2x.png - - - style.qss - + + dark.qss + diff --git a/dist/qt_themes/qdarkstyle_midnight_blue_monochrome/icons.qrc b/dist/qt_themes/qdarkstyle_midnight_blue_monochrome/icons.qrc new file mode 100644 index 0000000000..60b95db02a --- /dev/null +++ b/dist/qt_themes/qdarkstyle_midnight_blue_monochrome/icons.qrc @@ -0,0 +1,33 @@ + + + + + + + icons/index.theme + ../monochrome_dark/icons/16x16/lock.png + ../monochrome_dark/icons/48x48/bad_folder.png + ../monochrome_dark/icons/48x48/chip.png + ../monochrome_dark/icons/48x48/folder.png + ../monochrome_dark/icons/48x48/list-add.png + ../monochrome_dark/icons/48x48/sd_card.png + ../monochrome_dark/icons/48x48/star.png + ../monochrome_dark/icons/256x256/plus_folder.png + + + + icons/index.theme + ../monochrome_dark/icons/16x16/lock.png + ../monochrome_dark/icons/48x48/bad_folder.png + ../monochrome_dark/icons/48x48/chip.png + ../monochrome_dark/icons/48x48/folder.png + ../monochrome_dark/icons/48x48/list-add.png + ../monochrome_dark/icons/48x48/no_avatar.png + ../monochrome_dark/icons/48x48/sd_card.png + ../monochrome_dark/icons/48x48/star.png + ../monochrome_dark/icons/256x256/plus_folder.png + + diff --git a/dist/qt_themes/qdarkstyle_midnight_blue_monochrome/icons/index.theme b/dist/qt_themes/qdarkstyle_midnight_blue_monochrome/icons/index.theme new file mode 100644 index 0000000000..d6ed7d55ec --- /dev/null +++ b/dist/qt_themes/qdarkstyle_midnight_blue_monochrome/icons/index.theme @@ -0,0 +1,14 @@ +[Icon Theme] +Name=qdarkstyle_midnight_blue_monochrome +Comment=Monochrome dark theme (Midnight Blue style) +Inherits=qdarkstyle_midnight_blue +Directories=16x16,48x48,256x256 + +[16x16] +Size=16 + +[48x48] +Size=48 + +[256x256] +Size=256 diff --git a/dist/qt_themes/qdarkstyle_midnight_blue_monochrome/style.qrc b/dist/qt_themes/qdarkstyle_midnight_blue_monochrome/style.qrc new file mode 100644 index 0000000000..eeb5f34cbb --- /dev/null +++ b/dist/qt_themes/qdarkstyle_midnight_blue_monochrome/style.qrc @@ -0,0 +1,8 @@ + + + ../qdarkstyle_midnight_blue/dark.qss + + + ../qdarkstyle/dark.qss + + diff --git a/dist/qt_themes/qdarkstyle_monochrome/icons.qrc b/dist/qt_themes/qdarkstyle_monochrome/icons.qrc new file mode 100644 index 0000000000..355fe22beb --- /dev/null +++ b/dist/qt_themes/qdarkstyle_monochrome/icons.qrc @@ -0,0 +1,33 @@ + + + + + + + icons/index.theme + ../monochrome_dark/icons/16x16/lock.png + ../monochrome_dark/icons/48x48/bad_folder.png + ../monochrome_dark/icons/48x48/chip.png + ../monochrome_dark/icons/48x48/folder.png + ../monochrome_dark/icons/48x48/list-add.png + ../monochrome_dark/icons/48x48/sd_card.png + ../monochrome_dark/icons/48x48/star.png + ../monochrome_dark/icons/256x256/plus_folder.png + + + + icons/index.theme + ../monochrome_dark/icons/16x16/lock.png + ../monochrome_dark/icons/48x48/bad_folder.png + ../monochrome_dark/icons/48x48/chip.png + ../monochrome_dark/icons/48x48/folder.png + ../monochrome_dark/icons/48x48/list-add.png + ../monochrome_dark/icons/48x48/no_avatar.png + ../monochrome_dark/icons/48x48/sd_card.png + ../monochrome_dark/icons/48x48/star.png + ../monochrome_dark/icons/256x256/plus_folder.png + + diff --git a/dist/qt_themes/qdarkstyle_monochrome/icons/index.theme b/dist/qt_themes/qdarkstyle_monochrome/icons/index.theme new file mode 100644 index 0000000000..a8fd60ba29 --- /dev/null +++ b/dist/qt_themes/qdarkstyle_monochrome/icons/index.theme @@ -0,0 +1,14 @@ +[Icon Theme] +Name=qdarkstyle_monochrome +Comment=Monochrome dark theme (Mine Shaft style) +Inherits=qdarkstyle +Directories=16x16,48x48,256x256 + +[16x16] +Size=16 + +[48x48] +Size=48 + +[256x256] +Size=256 diff --git a/dist/qt_themes/qdarkstyle_monochrome/style.qrc b/dist/qt_themes/qdarkstyle_monochrome/style.qrc new file mode 100644 index 0000000000..76f7767ca8 --- /dev/null +++ b/dist/qt_themes/qdarkstyle_monochrome/style.qrc @@ -0,0 +1,8 @@ + + + ../qdarkstyle/dark.qss + + + ../qdarkstyle/dark.qss + + diff --git a/src/suyu/applets/qt_software_keyboard.cpp b/src/suyu/applets/qt_software_keyboard.cpp index ca7169e2a2..3a88656a17 100644 --- a/src/suyu/applets/qt_software_keyboard.cpp +++ b/src/suyu/applets/qt_software_keyboard.cpp @@ -372,6 +372,14 @@ QtSoftwareKeyboardDialog::~QtSoftwareKeyboardDialog() { StopInputThread(); } +QString QtSoftwareKeyboardDialog::theme() { + if (GMainWindow::CheckDarkMode()) { + return QStringLiteral("_dark"); + } else { + return QString{}; + } +} + void QtSoftwareKeyboardDialog::ShowNormalKeyboard(QPoint pos, QSize size) { if (isVisible()) { return; @@ -382,6 +390,7 @@ void QtSoftwareKeyboardDialog::ShowNormalKeyboard(QPoint pos, QSize size) { SetKeyboardType(); SetPasswordMode(); SetControllerImage(); + SetButtonImages(); DisableKeyboardButtons(); SetBackspaceOkEnabled(); @@ -449,6 +458,7 @@ void QtSoftwareKeyboardDialog::ShowInlineKeyboard( SetKeyboardType(); SetControllerImage(); + SetButtonImages(); DisableKeyboardButtons(); SetBackspaceOkEnabled(); @@ -822,70 +832,146 @@ void QtSoftwareKeyboardDialog::SetControllerImage() { const auto controller_type = handheld->IsConnected() ? handheld->GetNpadStyleIndex() : player_1->GetNpadStyleIndex(); - const QString theme = [] { - // Use dark icons if current OS mode is dark, or the theme contains "dark", or "midnight" in - // its name - if (GMainWindow::CheckDarkMode() || QIcon::themeName().contains(QStringLiteral("dark")) || - QIcon::themeName().contains(QStringLiteral("midnight"))) { - return QStringLiteral("_dark"); - } else { - return QString{}; - } - }(); - switch (controller_type) { case Core::HID::NpadStyleIndex::Fullkey: case Core::HID::NpadStyleIndex::GameCube: ui->icon_controller->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_pro%1.png);").arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_pro.png);").arg(theme())); ui->icon_controller_shift->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_pro%1.png);").arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_pro.png);").arg(theme())); ui->icon_controller_num->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_pro%1.png);").arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_pro.png);").arg(theme())); break; case Core::HID::NpadStyleIndex::JoyconDual: ui->icon_controller->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_dual_joycon%1.png);").arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_dual_joycon.png);").arg(theme())); ui->icon_controller_shift->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_dual_joycon%1.png);").arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_dual_joycon.png);").arg(theme())); ui->icon_controller_num->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_dual_joycon%1.png);").arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_dual_joycon.png);").arg(theme())); break; case Core::HID::NpadStyleIndex::JoyconLeft: ui->icon_controller->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_single_joycon_left%1.png);") - .arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_single_joycon_left.png);") + .arg(theme())); ui->icon_controller_shift->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_single_joycon_left%1.png);") - .arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_single_joycon_left.png);") + .arg(theme())); ui->icon_controller_num->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_single_joycon_left%1.png);") - .arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_single_joycon_left.png);") + .arg(theme())); break; case Core::HID::NpadStyleIndex::JoyconRight: ui->icon_controller->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_single_joycon_right%1.png);") - .arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_single_joycon_right.png);") + .arg(theme())); ui->icon_controller_shift->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_single_joycon_right%1.png);") - .arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_single_joycon_right.png);") + .arg(theme())); ui->icon_controller_num->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_single_joycon_right%1.png);") - .arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_single_joycon_right.png);") + .arg(theme())); break; case Core::HID::NpadStyleIndex::Handheld: ui->icon_controller->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_handheld%1.png);").arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_handheld.png);").arg(theme())); ui->icon_controller_shift->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_handheld%1.png);").arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_handheld.png);").arg(theme())); ui->icon_controller_num->setStyleSheet( - QStringLiteral("image: url(:/overlay/controller_handheld%1.png);").arg(theme)); + QStringLiteral("image: url(:/overlay%1/controller_handheld.png);").arg(theme())); break; default: break; } } +void QtSoftwareKeyboardDialog::SetButtonImages() { + QString button_backspace_stylesheet = + QStringLiteral("QPushButton {" + " image: url(:/overlay%1/osk_button_B.png);" + " image-position: right;" + " qproperty-icon: url(:/overlay%1/osk_button_backspace.png); }" + "QPushButton:disabled { image: url(:/overlay%1/osk_button_B_disabled.png);}") + .arg(theme()); + ui->button_backspace->setStyleSheet(button_backspace_stylesheet); + ui->button_backspace_shift->setStyleSheet(button_backspace_stylesheet); + ui->button_backspace_shift->setIconSize(ui->button_backspace->iconSize()); + ui->button_backspace_num->setStyleSheet(button_backspace_stylesheet); + + QString button_space_stylesheet = + QStringLiteral("QPushButton {" + " image: url(:/overlay%1/osk_button_Y.png);" + " image-position: right;" + " qproperty-icon: url(:/overlay%1/osk_button_space.png); }" + "QPushButton:disabled { image: url(:/overlay%1/osk_button_Y_disabled.png);}") + .arg(theme()); + ui->button_space->setStyleSheet(button_space_stylesheet); + ui->button_space_shift->setStyleSheet(button_space_stylesheet); + + QString button_ok_stylesheet = + QStringLiteral( + "QPushButton { image: url(:/overlay%1/osk_button_plus.png); }" + "QPushButton:disabled { image: url(:/overlay%1/osk_button_plus_disabled.png); }") + .arg(theme()); + ui->button_ok->setStyleSheet(button_ok_stylesheet); + ui->button_ok_shift->setStyleSheet(button_ok_stylesheet); + ui->button_ok_num->setStyleSheet(button_ok_stylesheet); + + QString button_shift_stylesheet = + QStringLiteral("image: url(:/overlay/osk_button_shift_lock_off.png);" + "image-position: left;" + "qproperty-icon: url(:/overlay%1/osk_button_shift.png);") + .arg(theme()); + ui->button_shift->setStyleSheet(button_shift_stylesheet); + + QString button_shift_shift_stylesheet = + QStringLiteral("image: url(:/overlay/osk_button_shift_lock_off.png);" + "image-position: left;" + "qproperty-icon: url(:/overlay%1/osk_button_shift_on.png);") + .arg(theme()); + ui->button_shift_shift->setStyleSheet(button_shift_shift_stylesheet); + ui->button_shift_shift->setIconSize(ui->button_shift->iconSize()); + + QString L_stylesheet = QStringLiteral("image: url(:/overlay%1/button_L.png);").arg(theme()); + ui->button_L->setStyleSheet(L_stylesheet); + ui->button_L_shift->setStyleSheet(L_stylesheet); + ui->button_L_num->setStyleSheet(L_stylesheet); + + QString R_stylesheet = QStringLiteral("image: url(:/overlay%1/button_R.png);").arg(theme()); + ui->button_R->setStyleSheet(R_stylesheet); + ui->button_R_shift->setStyleSheet(R_stylesheet); + ui->button_R_num->setStyleSheet(R_stylesheet); + + QString arrow_left_stylesheet = + QStringLiteral("image: url(:/overlay%1/arrow_left.png);").arg(theme()); + ui->arrow_left->setStyleSheet(arrow_left_stylesheet); + ui->arrow_left_shift->setStyleSheet(arrow_left_stylesheet); + ui->arrow_left_num->setStyleSheet(arrow_left_stylesheet); + + QString arrow_right_stylesheet = + QStringLiteral("image: url(:/overlay%1/arrow_right.png);").arg(theme()); + ui->arrow_right->setStyleSheet(arrow_right_stylesheet); + ui->arrow_right_shift->setStyleSheet(arrow_right_stylesheet); + ui->arrow_right_num->setStyleSheet(arrow_right_stylesheet); + + QString button_press_stick_stylesheet = + QStringLiteral("image: url(:/overlay%1/button_press_stick.png);").arg(theme()); + ui->button_press_stick->setStyleSheet(button_press_stick_stylesheet); + ui->button_press_stick_shift->setStyleSheet(button_press_stick_stylesheet); + + QString button_X_stylesheet = + QStringLiteral("image: url(:/overlay%1/button_X.png);").arg(theme()); + ui->button_X->setStyleSheet(button_X_stylesheet); + ui->button_X_shift->setStyleSheet(button_X_stylesheet); + ui->button_X_num->setStyleSheet(button_X_stylesheet); + + QString button_A_stylesheet = + QStringLiteral("image: url(:/overlay%1/button_A.png);").arg(theme()); + ui->button_A->setStyleSheet(button_A_stylesheet); + ui->button_A_shift->setStyleSheet(button_A_stylesheet); + ui->button_A_num->setStyleSheet(button_A_stylesheet); +} + void QtSoftwareKeyboardDialog::DisableKeyboardButtons() { switch (bottom_osk_index) { case BottomOSKIndex::LowerCase: @@ -1052,10 +1138,8 @@ void QtSoftwareKeyboardDialog::ChangeBottomOSKIndex() { ui->bottomOSK->setCurrentIndex(static_cast(bottom_osk_index)); ui->button_shift_shift->setStyleSheet( - QStringLiteral("image: url(:/overlay/osk_button_shift_lock_off.png);" - "\nimage-position: left;")); + QStringLiteral("image: url(:/overlay/osk_button_shift_lock_off.png);")); - ui->button_shift_shift->setIconSize(ui->button_shift->iconSize()); ui->button_backspace_shift->setIconSize(ui->button_backspace->iconSize()); break; case BottomOSKIndex::UpperCase: @@ -1066,9 +1150,6 @@ void QtSoftwareKeyboardDialog::ChangeBottomOSKIndex() { QStringLiteral("image: url(:/overlay/osk_button_shift_lock_off.png);" "\nimage-position: left;")); - ui->button_shift_shift->setIconSize(ui->button_shift->iconSize()); - ui->button_backspace_shift->setIconSize(ui->button_backspace->iconSize()); - ui->label_shift_shift->setText(QStringLiteral("Caps Lock")); bottom_osk_index = BottomOSKIndex::LowerCase; @@ -1080,9 +1161,6 @@ void QtSoftwareKeyboardDialog::ChangeBottomOSKIndex() { QStringLiteral("image: url(:/overlay/osk_button_shift_lock_on.png);" "\nimage-position: left;")); - ui->button_shift_shift->setIconSize(ui->button_shift->iconSize()); - ui->button_backspace_shift->setIconSize(ui->button_backspace->iconSize()); - ui->label_shift_shift->setText(QStringLiteral("Caps Lock Off")); } break; diff --git a/src/suyu/applets/qt_software_keyboard.h b/src/suyu/applets/qt_software_keyboard.h index 7e2fdf09ea..fda6ac623d 100644 --- a/src/suyu/applets/qt_software_keyboard.h +++ b/src/suyu/applets/qt_software_keyboard.h @@ -80,6 +80,12 @@ private: NumberPad, }; + /** + * Get the current theme suffix + * @return an empty string for light theme, "_dark" for dark theme + */ + QString theme(); + /** * Moves and resizes the window to a specified position and size. * @@ -109,6 +115,9 @@ private: /// Sets the controller image at the bottom left of the software keyboard. void SetControllerImage(); + /// Sets the controller image at the bottom left of the software keyboard. + void SetButtonImages(); + /// Disables buttons based on initialize_parameters. void DisableKeyboardButtons(); diff --git a/src/suyu/main.cpp b/src/suyu/main.cpp index e6d14717cf..b687e2500d 100644 --- a/src/suyu/main.cpp +++ b/src/suyu/main.cpp @@ -9,7 +9,6 @@ #include #include #include -#include #include #include "core/hle/service/am/applet_manager.h" @@ -297,12 +296,11 @@ GMainWindow::GMainWindow(std::unique_ptr config_, bool has_broken_vulk statusBar()->hide(); startup_icon_theme = QIcon::themeName(); - // fallback can only be set once, colorful theme icons are okay on both light/dark - QIcon::setFallbackThemeName(QStringLiteral("colorful")); + // fallback can only be set once, default theme icons are okay on both light/dark + QIcon::setFallbackThemeName(QStringLiteral("default")); QIcon::setFallbackSearchPaths(QStringList(QStringLiteral(":/icons"))); default_theme_paths = QIcon::themeSearchPaths(); - UpdateUITheme(); SetDiscordEnabled(UISettings::values.enable_discord_presence.GetValue()); discord_rpc->Update(); @@ -3612,8 +3610,6 @@ void GMainWindow::OnConfigure() { multiplayer_state->UpdateCredentials(); } - emit UpdateThemedIcons(); - const auto reload = UISettings::values.is_game_list_reload_pending.exchange(false); if (reload || Settings::values.language_index.GetValue() != old_language_index) { game_list->PopulateAsync(UISettings::values.game_dirs); @@ -5030,9 +5026,9 @@ bool GMainWindow::CheckDarkMode() { // Using the freedesktop specifications for checking dark mode LOG_INFO(Frontend, "Retrieving theme from freedesktop color-scheme..."); gdbus_arguments << QStringLiteral("--dest=org.freedesktop.portal.Desktop") - << QStringLiteral("--object-path /org/freedesktop/portal/desktop") - << QStringLiteral("--method org.freedesktop.portal.Settings.Read " - "org.freedesktop.appearance color-scheme"); + << QStringLiteral("--object-path /org/freedesktop/portal/desktop") + << QStringLiteral("--method org.freedesktop.portal.Settings.Read") + << QStringLiteral("org.freedesktop.appearance color-scheme"); process.start(QStringLiteral("gdbus call --session"), gdbus_arguments); process.waitForFinished(1000); QByteArray dbus_output = process.readAllStandardOutput(); @@ -5096,7 +5092,8 @@ void GMainWindow::changeEvent(QEvent* event) { UpdateUITheme(); } - } else QWidget::changeEvent(event); + } + QWidget::changeEvent(event); } void GMainWindow::LoadTranslation() { diff --git a/src/suyu/main.h b/src/suyu/main.h index d0f1bd96e6..f9a5057d83 100644 --- a/src/suyu/main.h +++ b/src/suyu/main.h @@ -167,7 +167,6 @@ class GMainWindow : public QMainWindow { public: void filterBarSetChecked(bool state); static bool CheckDarkMode(); - void UpdateUITheme(); explicit GMainWindow(std::unique_ptr config_, bool has_broken_vulkan); ~GMainWindow() override; diff --git a/src/suyu/uisettings.cpp b/src/suyu/uisettings.cpp index 8d65905104..7cf32ddd0e 100644 --- a/src/suyu/uisettings.cpp +++ b/src/suyu/uisettings.cpp @@ -23,12 +23,12 @@ namespace FS = Common::FS; namespace UISettings { const Themes included_themes{{ - {"Default", ":/default/"}, - {"Default Colorful", ":/colorful/"}, - {"Dark", ":/qdarkstyle/"}, - {"Dark Colorful", ":/colorful_dark/"}, - {"Midnight Blue", ":/qdarkstyle_midnight_blue/"}, - {"Midnight Blue Colorful", ":/colorful_midnight_blue/"}, + {"Default", ":/default"}, + {"Default monochrome", ":/monochrome"}, + {"Mine Shaft", ":/qdarkstyle"}, + {"Mine Shaft monochrome", ":/qdarkstyle_monochrome"}, + {"Midnight Blue", ":/qdarkstyle_midnight_blue"}, + {"Midnight Blue monochrome", ":/qdarkstyle_midnight_blue_monochrome"}, }}; Values values = {}; diff --git a/src/suyu/uisettings.h b/src/suyu/uisettings.h index 6bb903efa7..75571acde8 100644 --- a/src/suyu/uisettings.h +++ b/src/suyu/uisettings.h @@ -48,7 +48,7 @@ struct Shortcut { ContextualShortcut shortcut; }; -static constexpr std::string_view default_theme{"colorful"}; +static constexpr std::string_view default_theme{":/default"}; using Themes = std::array, 6>; extern const Themes included_themes; From 7c9545c82afacd88dc4cf7ab0f7ca353618829cb Mon Sep 17 00:00:00 2001 From: flodavid Date: Mon, 12 Feb 2024 04:01:25 +0100 Subject: [PATCH 4/6] Add dark mode configuration setting in UI tab - Allows to choose "Auto", "Always On" or "Always Off" - Dark mode options are only shown if the style does not support theme - If Auto is chosen, value is retrieved from OS - On Windows, the application needs a restart to apply the settings - Use the default dark palette for Windows, like on Linux --- src/common/settings.cpp | 1 + src/common/settings.h | 1 + src/common/settings_enums.h | 2 + src/suyu/configuration/configure_ui.cpp | 67 +++++++++ src/suyu/configuration/configure_ui.h | 1 + src/suyu/configuration/configure_ui.ui | 14 ++ src/suyu/configuration/qt_config.cpp | 10 +- src/suyu/main.cpp | 192 +++++++++++++++--------- src/suyu/startup_checks.cpp | 4 - src/suyu/uisettings.h | 3 + 10 files changed, 221 insertions(+), 74 deletions(-) diff --git a/src/common/settings.cpp b/src/common/settings.cpp index 948c557674..3339d5b4f0 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -67,6 +67,7 @@ SWITCHABLE(u8, true); // Used in UISettings // TODO see if we can move this to uisettings.cpp SWITCHABLE(ConfirmStop, true); +SWITCHABLE(DarkModeState, true); #undef SETTING #undef SWITCHABLE diff --git a/src/common/settings.h b/src/common/settings.h index 829759c94b..77788befe7 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -90,6 +90,7 @@ SWITCHABLE(u8, true); // Used in UISettings // TODO see if we can move this to uisettings.h SWITCHABLE(ConfirmStop, true); +SWITCHABLE(DarkModeState, true); #undef SETTING #undef SWITCHABLE diff --git a/src/common/settings_enums.h b/src/common/settings_enums.h index fabae6d687..777f5b1b0a 100644 --- a/src/common/settings_enums.h +++ b/src/common/settings_enums.h @@ -155,6 +155,8 @@ ENUM(ConsoleMode, Handheld, Docked); ENUM(AppletMode, HLE, LLE); +ENUM(DarkModeState, Off, On, Auto); + template inline std::string CanonicalizeEnum(Type id) { const auto group = EnumMetadata::Canonicalizations(); diff --git a/src/suyu/configuration/configure_ui.cpp b/src/suyu/configuration/configure_ui.cpp index 046b34721e..589c035589 100644 --- a/src/suyu/configuration/configure_ui.cpp +++ b/src/suyu/configuration/configure_ui.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include "common/common_types.h" #include "common/fs/path_util.h" @@ -29,6 +30,8 @@ #include "suyu/uisettings.h" #include "ui_configure_ui.h" +using Settings::DarkModeState; + namespace { constexpr std::array default_game_icon_sizes{ std::make_pair(0, QT_TRANSLATE_NOOP("ConfigureUI", "None")), @@ -153,6 +156,9 @@ ConfigureUi::ConfigureUi(Core::System& system_, QWidget* parent) &ConfigureUi::RequestGameListUpdate); connect(ui->row_2_text_combobox, QOverload::of(&QComboBox::currentIndexChanged), this, &ConfigureUi::RequestGameListUpdate); + // Update available dark mode options depending on selected style + connect(ui->theme_combobox, QOverload::of(&QComboBox::currentIndexChanged), this, + &ConfigureUi::UpdateDarkModeOptions); // Update text ComboBoxes after user interaction. connect(ui->row_1_text_combobox, QOverload::of(&QComboBox::activated), @@ -185,6 +191,8 @@ ConfigureUi::~ConfigureUi() = default; void ConfigureUi::ApplyConfiguration() { UISettings::values.theme = ui->theme_combobox->itemData(ui->theme_combobox->currentIndex()).toString(); + UISettings::values.dark_mode_state = + static_cast(ui->dark_mode_combobox->currentData().toUInt()); UISettings::values.show_add_ons = ui->show_add_ons->isChecked(); UISettings::values.show_compat = ui->show_compat->isChecked(); UISettings::values.show_size = ui->show_size->isChecked(); @@ -206,12 +214,71 @@ void ConfigureUi::ApplyConfiguration() { system.ApplySettings(); } +void ConfigureUi::UpdateDarkModeOptions() { + ui->dark_mode_combobox->clear(); + + QString selected_theme = ui->theme_combobox->currentData().toString(); + + /* Dark mode option are added according to the modes the current style supports */ + bool has_common_style = QFile::exists(selected_theme + QStringLiteral("/style.qss")); + bool has_light_style = QFile::exists(selected_theme + QStringLiteral("/light.qss")); + bool has_dark_style = QFile::exists(selected_theme + QStringLiteral("/dark.qss")); +#ifdef _WIN32 + // Indicate which option needs a restart to be applied, depending on current environment + // variable + QByteArray current_qt_qpa = qgetenv("QT_QPA_PLATFORM"); + if (current_qt_qpa.contains("darkmode=2")) { + if (has_common_style || (has_dark_style && has_light_style)) { + ui->dark_mode_combobox->addItem(tr("Auto"), QVariant::fromValue(DarkModeState::Auto)); + } + if (has_common_style || has_dark_style) { + ui->dark_mode_combobox->addItem(tr("Always On") + + QStringLiteral(" (%1)").arg(tr("Needs restart")), + QVariant::fromValue(DarkModeState::On)); + } + if (has_common_style || has_light_style) { + ui->dark_mode_combobox->addItem(tr("Always Off") + + QStringLiteral(" (%1)").arg(tr("Needs restart")), + QVariant::fromValue(DarkModeState::Off)); + } + } else { + if (has_common_style || (has_dark_style && has_light_style)) { + ui->dark_mode_combobox->addItem(tr("Auto") + + QStringLiteral(" (%1)").arg(tr("Needs restart")), + QVariant::fromValue(DarkModeState::Auto)); + } + if (has_common_style || has_dark_style) { + ui->dark_mode_combobox->addItem(tr("Always On"), + QVariant::fromValue(DarkModeState::On)); + } + if (has_common_style || has_light_style) { + ui->dark_mode_combobox->addItem(tr("Always Off"), + QVariant::fromValue(DarkModeState::Off)); + } + } +#else + if (has_common_style || (has_dark_style && has_light_style)) { + ui->dark_mode_combobox->addItem(tr("Auto"), QVariant::fromValue(DarkModeState::Auto)); + } + if (has_common_style || has_dark_style) { + ui->dark_mode_combobox->addItem(tr("Always On"), QVariant::fromValue(DarkModeState::On)); + } + if (has_common_style || has_light_style) { + ui->dark_mode_combobox->addItem(tr("Always Off"), QVariant::fromValue(DarkModeState::Off)); + } +#endif +} + void ConfigureUi::RequestGameListUpdate() { UISettings::values.is_game_list_reload_pending.exchange(true); } void ConfigureUi::SetConfiguration() { ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme)); + // Dark mode options are populated after the theme is selected, to get the current configuration + UpdateDarkModeOptions(); + ui->dark_mode_combobox->setCurrentIndex( + ui->dark_mode_combobox->findData(QVariant::fromValue(UISettings::values.dark_mode_state))); ui->language_combobox->setCurrentIndex(ui->language_combobox->findData( QString::fromStdString(UISettings::values.language.GetValue()))); ui->show_add_ons->setChecked(UISettings::values.show_add_ons.GetValue()); diff --git a/src/suyu/configuration/configure_ui.h b/src/suyu/configuration/configure_ui.h index 2a2563a131..a52ad7cc74 100644 --- a/src/suyu/configuration/configure_ui.h +++ b/src/suyu/configuration/configure_ui.h @@ -34,6 +34,7 @@ signals: void LanguageChanged(const QString& locale); private: + void UpdateDarkModeOptions(); void RequestGameListUpdate(); void SetConfiguration(); diff --git a/src/suyu/configuration/configure_ui.ui b/src/suyu/configuration/configure_ui.ui index b8e6483814..cdd46005fd 100644 --- a/src/suyu/configuration/configure_ui.ui +++ b/src/suyu/configuration/configure_ui.ui @@ -63,6 +63,20 @@ + + + + + + Dark Mode: + + + + + + + + diff --git a/src/suyu/configuration/qt_config.cpp b/src/suyu/configuration/qt_config.cpp index 2868db4ebb..2ed14ee2be 100644 --- a/src/suyu/configuration/qt_config.cpp +++ b/src/suyu/configuration/qt_config.cpp @@ -260,8 +260,10 @@ void QtConfig::ReadShortcutValues() { void QtConfig::ReadUIValues() { BeginGroup(Settings::TranslateCategory(Settings::Category::Ui)); - UISettings::values.theme = QString::fromStdString( - ReadStringSetting(std::string("theme"), std::string(UISettings::default_theme))); + UISettings::values.theme = + QString::fromStdString(ReadStringSetting("theme", std::string(UISettings::default_theme))); + UISettings::values.dark_mode_state = static_cast( + ReadIntegerSetting("dark_mode_state", static_cast(DarkModeState::Auto))); ReadUIGamelistValues(); ReadUILayoutValues(); @@ -467,8 +469,10 @@ void QtConfig::SaveUIValues() { WriteCategory(Settings::Category::Ui); WriteCategory(Settings::Category::UiGeneral); - WriteStringSetting(std::string("theme"), UISettings::values.theme.toStdString(), + WriteStringSetting("theme", UISettings::values.theme.toStdString(), std::make_optional(std::string(UISettings::default_theme))); + WriteIntegerSetting("dark_mode_state", static_cast(UISettings::values.dark_mode_state), + std::make_optional(static_cast(DarkModeState::Auto))); SaveUIGamelistValues(); SaveUILayoutValues(); diff --git a/src/suyu/main.cpp b/src/suyu/main.cpp index b687e2500d..13089859f2 100644 --- a/src/suyu/main.cpp +++ b/src/suyu/main.cpp @@ -3536,6 +3536,7 @@ void GMainWindow::ResetWindowSize1080() { void GMainWindow::OnConfigure() { const QString old_theme = UISettings::values.theme; + DarkModeState old_dark_mode_state = UISettings::values.dark_mode_state; const bool old_discord_presence = UISettings::values.enable_discord_presence.GetValue(); const auto old_language_index = Settings::values.language_index.GetValue(); #ifdef __unix__ @@ -3594,7 +3595,8 @@ void GMainWindow::OnConfigure() { } InitializeHotkeys(); - if (UISettings::values.theme != old_theme) { + if (UISettings::values.theme != old_theme || + UISettings::values.dark_mode_state != old_dark_mode_state) { UpdateUITheme(); } if (UISettings::values.enable_discord_presence.GetValue() != old_discord_presence) { @@ -4791,13 +4793,11 @@ void GMainWindow::filterBarSetChecked(bool state) { } void GMainWindow::UpdateUITheme() { - LOG_DEBUG(Frontend, "Updating UI"); - QString default_theme = QString::fromStdString(UISettings::default_theme.data()); + const QString default_theme = QString::fromStdString(UISettings::default_theme.data()); QString current_theme = UISettings::values.theme; if (current_theme.isEmpty()) { current_theme = default_theme; } - const bool current_dark_mode = CheckDarkMode(); UpdateIcons(current_theme); @@ -4860,7 +4860,7 @@ bool GMainWindow::TryLoadStylesheet(const QString& theme_uri) { style_path = theme_uri + QStringLiteral("/light.qss"); } if (!QFile::exists(style_path)) { - LOG_INFO(Frontend, "Themed (light/dark) stylesheet could not be found, using default one"); + LOG_DEBUG(Frontend, "No themed (light/dark) stylesheet, using default one"); // Use common stylesheet if themed one does not exist style_path = theme_uri + QStringLiteral("/style.qss"); } @@ -4871,7 +4871,7 @@ bool GMainWindow::TryLoadStylesheet(const QString& theme_uri) { // Update the color palette before applying the stylesheet UpdateThemePalette(); - LOG_INFO(Frontend, "Loading stylesheet in: {}", theme_uri.toStdString()); + LOG_DEBUG(Frontend, "Loading stylesheet in: {}", theme_uri.toStdString()); QTextStream ts_theme(&style_file); qApp->setStyleSheet(ts_theme.readAll()); setStyleSheet(ts_theme.readAll()); @@ -4903,12 +4903,34 @@ void GMainWindow::UpdateThemePalette() { QPalette themePalette(qApp->palette()); #ifdef _WIN32 QColor dark(25, 25, 25); - QColor darkGray(100, 100, 100); - QColor gray(150, 150, 150); - QColor light(230, 230, 230); - // By default, revert fusion style set for Windows dark theme - QString style; + QString style_name; if (CheckDarkMode()) { + // We check that the dark mode state is "On" and force a dark palette + if (UISettings::values.dark_mode_state == DarkModeState::On) { + // Set Default Windows Dark palette on Windows platforms to force Dark mode + themePalette.setColor(QPalette::Window, Qt::black); + themePalette.setColor(QPalette::WindowText, Qt::white); + themePalette.setColor(QPalette::Disabled, QPalette::WindowText, QColor(127, 127, 127)); + themePalette.setColor(QPalette::Base, Qt::black); + themePalette.setColor(QPalette::AlternateBase, dark); + themePalette.setColor(QPalette::ToolTipBase, Qt::white); + themePalette.setColor(QPalette::ToolTipText, Qt::black); + themePalette.setColor(QPalette::Text, Qt::white); + themePalette.setColor(QPalette::Disabled, QPalette::Text, QColor(127, 127, 127)); + themePalette.setColor(QPalette::Dark, QColor(128, 128, 128)); + themePalette.setColor(QPalette::Shadow, Qt::white); + themePalette.setColor(QPalette::Button, Qt::black); + themePalette.setColor(QPalette::ButtonText, Qt::white); + themePalette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(127, 127, 127)); + themePalette.setColor(QPalette::BrightText, QColor(192, 192, 192)); + themePalette.setColor(QPalette::Link, QColor(0, 140, 200)); + themePalette.setColor(QPalette::Highlight, QColor(24, 70, 93)); + themePalette.setColor(QPalette::Disabled, QPalette::Highlight, QColor(0, 85, 255)); + themePalette.setColor(QPalette::HighlightedText, QColor(239, 240, 241)); + themePalette.setColor(QPalette::Disabled, QPalette::HighlightedText, + QColor(239, 240, 241)); + } + // AlternateBase is kept at rgb(233, 231, 227) or rgb(245, 245, 245) on Windows dark // palette, fix this. Sometimes, it even is rgb(0, 0, 0), but uses a very light gray for // alternate rows, do not know why @@ -4919,22 +4941,23 @@ void GMainWindow::UpdateThemePalette() { alternate_base_modified = true; } // Use fusion theme, since its close to windowsvista, but works well with a dark palette - style = QStringLiteral("fusion"); + style_name = QStringLiteral("fusion"); } else { // Reset AlternateBase if it has been modified if (alternate_base_modified) { themePalette.setColor(QPalette::AlternateBase, QColor(245, 245, 245)); alternate_base_modified = false; } + // Reset light palette + themePalette = this->style()->standardPalette(); // Reset Windows theme to the default - style = QStringLiteral("windowsvista"); + style_name = QStringLiteral("windowsvista"); } - LOG_DEBUG(Frontend, "Using style: {}", style.toStdString()); - qApp->setStyle(style); + LOG_DEBUG(Frontend, "Using style: {}", style_name.toStdString()); + qApp->setStyle(style_name); #else if (CheckDarkMode()) { // Set Dark palette on non Windows platforms (that may not have a dark palette) - LOG_INFO(Frontend, "Using custom dark palette"); themePalette.setColor(QPalette::Window, QColor(53, 53, 53)); themePalette.setColor(QPalette::WindowText, Qt::white); themePalette.setColor(QPalette::Disabled, QPalette::WindowText, QColor(127, 127, 127)); @@ -4956,8 +4979,7 @@ void GMainWindow::UpdateThemePalette() { themePalette.setColor(QPalette::HighlightedText, Qt::white); themePalette.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor(127, 127, 127)); } else { - LOG_INFO(Frontend, "Using standard palette"); - // Reset light palette on non Windows platforms + // Reset light palette themePalette = this->style()->standardPalette(); } #endif @@ -5018,61 +5040,72 @@ bool GMainWindow::ListenColorSchemeChange() { #endif bool GMainWindow::CheckDarkMode() { - const QPalette current_palette(qApp->palette()); + bool is_dark_mode_auto; +#ifdef _WIN32 + // Dark mode cannot be changed after the app started on Windows + is_dark_mode_auto = qgetenv("QT_QPA_PLATFORM").contains("darkmode=2"); +#else + is_dark_mode_auto = UISettings::values.dark_mode_state == DarkModeState::Auto; +#endif + if (!is_dark_mode_auto) { + return UISettings::values.dark_mode_state == DarkModeState::On; + } else { + const QPalette current_palette(qApp->palette()); #ifdef __unix__ - QProcess process; - QStringList gdbus_arguments; + QProcess process; - // Using the freedesktop specifications for checking dark mode - LOG_INFO(Frontend, "Retrieving theme from freedesktop color-scheme..."); - gdbus_arguments << QStringLiteral("--dest=org.freedesktop.portal.Desktop") - << QStringLiteral("--object-path /org/freedesktop/portal/desktop") - << QStringLiteral("--method org.freedesktop.portal.Settings.Read") - << QStringLiteral("org.freedesktop.appearance color-scheme"); - process.start(QStringLiteral("gdbus call --session"), gdbus_arguments); - process.waitForFinished(1000); - QByteArray dbus_output = process.readAllStandardOutput(); + // Using the freedesktop specifications for checking dark mode + LOG_DEBUG(Frontend, "Retrieving theme from freedesktop color-scheme..."); + QStringList gdbus_arguments; + gdbus_arguments << QStringLiteral("--dest=org.freedesktop.portal.Desktop") + << QStringLiteral("--object-path /org/freedesktop/portal/desktop") + << QStringLiteral("--method org.freedesktop.portal.Settings.Read") + << QStringLiteral("org.freedesktop.appearance color-scheme"); + process.start(QStringLiteral("gdbus call --session"), gdbus_arguments); + process.waitForFinished(1000); + QByteArray dbus_output = process.readAllStandardOutput(); - if (!dbus_output.isEmpty()) { - const int systemColorSchema = QString::fromUtf8(dbus_output).trimmed().right(1).toInt(); - return systemColorSchema == 1; - } + if (!dbus_output.isEmpty()) { + const int systemColorSchema = QString::fromUtf8(dbus_output).trimmed().right(1).toInt(); + return systemColorSchema == 1; + } - // Try alternative for Gnome if the previous one failed - QStringList gsettings_arguments; - gsettings_arguments << QStringLiteral("get") - << QStringLiteral("org.gnome.desktop.interface") - << QStringLiteral("color-scheme"); - - LOG_DEBUG(Frontend, "failed, retrieving theme from gsettings color-scheme..."); - process.start(QStringLiteral("gsettings"), gsettings_arguments); - process.waitForFinished(1000); - QByteArray gsettings_output = process.readAllStandardOutput(); - - // Try older gtk-theme method if the previous one failed - if (gsettings_output.isEmpty()) { - LOG_INFO(Frontend, "failed, retrieving theme from gtk-theme..."); - gsettings_arguments.takeLast(); - gsettings_arguments << QStringLiteral("gtk-theme"); + // Try alternative for Gnome if the previous one failed + QStringList gsettings_arguments; + gsettings_arguments << QStringLiteral("get") + << QStringLiteral("org.gnome.desktop.interface") + << QStringLiteral("color-scheme"); + LOG_DEBUG(Frontend, "failed, retrieving theme from gsettings color-scheme..."); process.start(QStringLiteral("gsettings"), gsettings_arguments); process.waitForFinished(1000); - gsettings_output = process.readAllStandardOutput(); - } + QByteArray gsettings_output = process.readAllStandardOutput(); - // Interpret gsettings value if it succeeded - if (!gsettings_output.isEmpty()) { - QString systeme_theme = QString::fromUtf8(gsettings_output); - LOG_DEBUG(Frontend, "Gsettings output: {}", systeme_theme.toStdString()); - return systeme_theme.contains(QStringLiteral("dark"), Qt::CaseInsensitive); - } - LOG_DEBUG(Frontend, "failed, retrieving theme from palette"); + // Try older gtk-theme method if the previous one failed + if (gsettings_output.isEmpty()) { + LOG_DEBUG(Frontend, "failed, retrieving theme from gtk-theme..."); + gsettings_arguments.takeLast(); + gsettings_arguments << QStringLiteral("gtk-theme"); + + process.start(QStringLiteral("gsettings"), gsettings_arguments); + process.waitForFinished(1000); + gsettings_output = process.readAllStandardOutput(); + } + + // Interpret gsettings value if it succeeded + if (!gsettings_output.isEmpty()) { + QString systeme_theme = QString::fromUtf8(gsettings_output); + LOG_DEBUG(Frontend, "Gsettings output: {}", systeme_theme.toStdString()); + return systeme_theme.contains(QStringLiteral("dark"), Qt::CaseInsensitive); + } + LOG_DEBUG(Frontend, "failed, retrieving theme from palette"); #endif - // Use default method based on palette swap by OS. - // It is the only method on Windows with Qt 5. - // Windows needs QT_QPA_PLATFORM env variable set to windows:darkmode=2 to force palette change - return (current_palette.color(QPalette::WindowText).lightness() > - current_palette.color(QPalette::Window).lightness()); + // Use default method based on palette swap by OS. It is the only method on Windows with + // Qt 5. Windows needs QT_QPA_PLATFORM env variable set to windows:darkmode=2 to force + // palette change + return (current_palette.color(QPalette::WindowText).lightness() > + current_palette.color(QPalette::Window).lightness()); + } } void GMainWindow::changeEvent(QEvent* event) { @@ -5080,9 +5113,9 @@ void GMainWindow::changeEvent(QEvent* event) { // UpdateUITheme is a decent work around if (event->type() == QEvent::PaletteChange || event->type() == QEvent::ApplicationPaletteChange) { - LOG_INFO(Frontend, - "Window color palette changed by event: {} (QEvent::PaletteChange is: {})", - event->type(), QEvent::PaletteChange); + LOG_DEBUG(Frontend, + "Window color palette changed by event: {} (QEvent::PaletteChange is: {})", + event->type(), QEvent::PaletteChange); const QPalette test_palette(qApp->palette()); // Keeping eye on QPalette::Window to avoid looping. QPalette::Text might be useful too const QColor window_color = test_palette.color(QPalette::Active, QPalette::Window); @@ -5274,6 +5307,31 @@ int main(int argc, char* argv[]) { QCoreApplication::setApplicationName(QStringLiteral("suyu")); #ifdef _WIN32 + QByteArray current_qt_qpa = qgetenv("QT_QPA_PLATFORM"); + // Follow dark mode setting, if the "-platform" launch option is not set. + // Otherwise, just follow dark mode for the window decoration (title bar). + if (!current_qt_qpa.contains(":darkmode=")) { + if (UISettings::values.dark_mode_state == DarkModeState::Auto) { + // When setting is Auto, force adapting window decoration and stylesheet palette to use + // Windows theme. Default is darkmode:0, which always uses light palette + if (current_qt_qpa.isEmpty()) { + // Set the value + qputenv("QT_QPA_PLATFORM", QByteArray("windows:darkmode=2")); + } else { + // Concatenate to the existing value + qputenv("QT_QPA_PLATFORM", current_qt_qpa + ",darkmode=2"); + } + } else { + // When setting is no Auto, adapt window decoration to the palette used + if (current_qt_qpa.isEmpty()) { + // Set the value + qputenv("QT_QPA_PLATFORM", QByteArray("windows:darkmode=1")); + } else { + // Concatenate to the existing value + qputenv("QT_QPA_PLATFORM", current_qt_qpa + ",darkmode=1"); + } + } + } // Increases the maximum open file limit to 8192 _setmaxstdio(8192); #endif diff --git a/src/suyu/startup_checks.cpp b/src/suyu/startup_checks.cpp index 32011f6d5c..07e8bcb5d8 100644 --- a/src/suyu/startup_checks.cpp +++ b/src/suyu/startup_checks.cpp @@ -6,7 +6,6 @@ #ifdef _WIN32 #include #include -#include #include #include #elif defined(SUYU_UNIX) @@ -38,9 +37,6 @@ void CheckVulkan() { bool CheckEnvVars(bool* is_child) { #ifdef _WIN32 - // Force adapting theme to follow Windows dark mode - qputenv("QT_QPA_PLATFORM", QByteArray("windows:darkmode=2")); - // Check environment variable to see if we are the child char variable_contents[8]; const DWORD startup_check_var = diff --git a/src/suyu/uisettings.h b/src/suyu/uisettings.h index 75571acde8..ded6a42244 100644 --- a/src/suyu/uisettings.h +++ b/src/suyu/uisettings.h @@ -18,6 +18,7 @@ using Settings::Category; using Settings::ConfirmStop; +using Settings::DarkModeState; using Settings::Setting; using Settings::SwitchableSetting; @@ -144,6 +145,7 @@ struct Values { Setting language{linkage, {}, "language", Category::Paths}; QString theme; + DarkModeState dark_mode_state; // Shortcut name std::vector shortcuts; @@ -261,3 +263,4 @@ Q_DECLARE_METATYPE(Settings::RendererBackend); Q_DECLARE_METATYPE(Settings::ShaderBackend); Q_DECLARE_METATYPE(Settings::AstcRecompression); Q_DECLARE_METATYPE(Settings::AstcDecodeMode); +Q_DECLARE_METATYPE(Settings::DarkModeState); From 3cdd76b23dd7e2b6b33739f573d57709a29d39fc Mon Sep 17 00:00:00 2001 From: flodavid Date: Fri, 23 Feb 2024 16:37:41 +0100 Subject: [PATCH 5/6] Fix qdarkstyle and midnight blue sliders being cropped - Allow Threshold sliders in control configuration to be up to 40px tall, instead of 15 --- dist/qt_themes/qdarkstyle/dark.qss | 4 ++ .../qdarkstyle_midnight_blue/dark.qss | 4 ++ .../configuration/configure_input_player.ui | 72 +++++++++---------- 3 files changed, 44 insertions(+), 36 deletions(-) diff --git a/dist/qt_themes/qdarkstyle/dark.qss b/dist/qt_themes/qdarkstyle/dark.qss index 09397f89f5..95e575c42f 100644 --- a/dist/qt_themes/qdarkstyle/dark.qss +++ b/dist/qt_themes/qdarkstyle/dark.qss @@ -944,6 +944,10 @@ QListView::indicator:indeterminate:pressed { image: url(:/qss_icons/rc/checkbox_indeterminate_focus.png); } +QSlider:horizontal { + height: 20px; +} + QSlider::groove:horizontal { border: 1px solid #565a5e; height: 4px; diff --git a/dist/qt_themes/qdarkstyle_midnight_blue/dark.qss b/dist/qt_themes/qdarkstyle_midnight_blue/dark.qss index a90ac5d5e0..3086b90ade 100644 --- a/dist/qt_themes/qdarkstyle_midnight_blue/dark.qss +++ b/dist/qt_themes/qdarkstyle_midnight_blue/dark.qss @@ -1296,6 +1296,10 @@ QSlider:focus { border: none; } +QSlider:horizontal { + height: 20px; +} + QSlider::groove:horizontal { background: #32414B; border: 1px solid #32414B; diff --git a/src/suyu/configuration/configure_input_player.ui b/src/suyu/configuration/configure_input_player.ui index 5beb1b6bfc..761015cd94 100644 --- a/src/suyu/configuration/configure_input_player.ui +++ b/src/suyu/configuration/configure_input_player.ui @@ -1430,12 +1430,12 @@ - - - 0 - 0 - - + + + 0 + 0 + + ZL @@ -1481,20 +1481,20 @@ - - - - 70 - 15 - - - - 100 - - - Qt::Horizontal - - + + + + 70 + 40 + + + + 100 + + + Qt::Horizontal + + @@ -1927,22 +1927,22 @@ - - - - - 70 - 15 - - - - 100 - - - Qt::Horizontal - - - + + + + + 70 + 40 + + + + 100 + + + Qt::Horizontal + + + From fb7802aaf4862f52ec78fd03fac0a27e927c4b5e Mon Sep 17 00:00:00 2001 From: flodavid Date: Thu, 11 Apr 2024 10:19:20 -0700 Subject: [PATCH 6/6] WIP: fix macOS style when OS dark mode is active --- src/suyu/main.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/suyu/main.cpp b/src/suyu/main.cpp index 13089859f2..300eb0819a 100644 --- a/src/suyu/main.cpp +++ b/src/suyu/main.cpp @@ -4851,6 +4851,7 @@ void GMainWindow::UpdateIcons(const QString& theme_path) { } bool GMainWindow::TryLoadStylesheet(const QString& theme_uri) { + LOG_DEBUG(Frontend, "TryLoadStylesheet()"); QString style_path; // Use themed stylesheet if it exists @@ -4900,6 +4901,7 @@ static void AdjustLinkColor() { } void GMainWindow::UpdateThemePalette() { + LOG_DEBUG(Frontend, "UpdateThemePalette()"); QPalette themePalette(qApp->palette()); #ifdef _WIN32 QColor dark(25, 25, 25); @@ -4955,6 +4957,33 @@ void GMainWindow::UpdateThemePalette() { } LOG_DEBUG(Frontend, "Using style: {}", style_name.toStdString()); qApp->setStyle(style_name); +#elif defined(__APPLE__) + // Force the usage of the light palette in light mode + if (CheckDarkMode()) { + // Reset dark palette + themePalette = this->style()->standardPalette(); + } else { + themePalette.setColor(QPalette::Window, QColor(236, 236, 236)); + themePalette.setColor(QPalette::WindowText, Qt::black); + themePalette.setColor(QPalette::Disabled, QPalette::WindowText, Qt::black); + themePalette.setColor(QPalette::Base, Qt::white); + themePalette.setColor(QPalette::AlternateBase, QColor(245, 245, 245)); + themePalette.setColor(QPalette::ToolTipBase, Qt::white); + themePalette.setColor(QPalette::ToolTipText, Qt::black); + themePalette.setColor(QPalette::Text, Qt::black); + themePalette.setColor(QPalette::Disabled, QPalette::Text, Qt::black); + themePalette.setColor(QPalette::Dark, QColor(191, 191, 191)); + themePalette.setColor(QPalette::Shadow, Qt::black); + themePalette.setColor(QPalette::Button, QColor(236, 236, 236)); + themePalette.setColor(QPalette::ButtonText, Qt::black); + themePalette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(147, 147, 147)); + themePalette.setColor(QPalette::BrightText, Qt::white); + themePalette.setColor(QPalette::Link, QColor(0, 140, 200)); + themePalette.setColor(QPalette::Highlight, QColor(179, 215, 255)); + themePalette.setColor(QPalette::Disabled, QPalette::Highlight, QColor(220, 220, 220)); + themePalette.setColor(QPalette::HighlightedText, Qt::black); + themePalette.setColor(QPalette::Disabled, QPalette::HighlightedText, Qt::black); + } #else if (CheckDarkMode()) { // Set Dark palette on non Windows platforms (that may not have a dark palette)