From 1a4ca3be1172c81d7e991cb8a1aa940a3e65b2a6 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Thu, 18 Sep 2025 23:46:04 +1000 Subject: [PATCH] Qt: Add 'Darker Fusion' theme --- src/duckstation-qt/audiosettingswidget.cpp | 2 +- .../interfacesettingswidget.cpp | 2 + src/duckstation-qt/qtthemes.cpp | 74 +++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) diff --git a/src/duckstation-qt/audiosettingswidget.cpp b/src/duckstation-qt/audiosettingswidget.cpp index 18c91e2e4..9401d66b8 100644 --- a/src/duckstation-qt/audiosettingswidget.cpp +++ b/src/duckstation-qt/audiosettingswidget.cpp @@ -138,7 +138,7 @@ void AudioSettingsWidget::updateDriverNames() const AudioBackend backend = getEffectiveBackend(); std::vector> names = AudioStream::GetDriverNames(backend); - m_ui.driver->disconnect(); + SettingWidgetBinder::DisconnectWidget(m_ui.driver); m_ui.driver->clear(); if (names.empty()) { diff --git a/src/duckstation-qt/interfacesettingswidget.cpp b/src/duckstation-qt/interfacesettingswidget.cpp index 2305dddab..3bcb9238b 100644 --- a/src/duckstation-qt/interfacesettingswidget.cpp +++ b/src/duckstation-qt/interfacesettingswidget.cpp @@ -19,6 +19,7 @@ const char* InterfaceSettingsWidget::THEME_NAMES[] = { QT_TRANSLATE_NOOP("MainWindow", "Fusion"), QT_TRANSLATE_NOOP("MainWindow", "Dark Fusion (Gray)"), QT_TRANSLATE_NOOP("MainWindow", "Dark Fusion (Blue)"), + QT_TRANSLATE_NOOP("MainWindow", "Darker Fusion"), QT_TRANSLATE_NOOP("MainWindow", "AMOLED"), QT_TRANSLATE_NOOP("MainWindow", "Cobalt Sky"), QT_TRANSLATE_NOOP("MainWindow", "Grey Matter"), @@ -38,6 +39,7 @@ const char* InterfaceSettingsWidget::THEME_VALUES[] = { "fusion", "darkfusion", "darkfusionblue", + "darkerfusion", "AMOLED", "cobaltsky", "greymatter", diff --git a/src/duckstation-qt/qtthemes.cpp b/src/duckstation-qt/qtthemes.cpp index 0394fc0a8..76f7a0400 100644 --- a/src/duckstation-qt/qtthemes.cpp +++ b/src/duckstation-qt/qtthemes.cpp @@ -147,6 +147,80 @@ void QtHost::SetStyleFromSettings() qApp->setStyleSheet(QString()); qApp->styleHints()->setColorScheme(Qt::ColorScheme::Dark); } + else if (theme == "darkerfusion") + { + qApp->setStyle(QStyleFactory::create("Fusion")); + + static constexpr QColor window_color(36, 36, 36); + static constexpr QColor base_color(43, 43, 43); + static constexpr QColor button_color(40, 40, 40); // qt makes this lighter + static constexpr QColor text(255, 255, 255); + static constexpr QColor highlight_background(65, 65, 65); + static constexpr QColor highlight_text(255, 255, 255); + static constexpr QColor disabled_text(200, 200, 200); + static constexpr QColor placeholder_text(200, 200, 200); + static constexpr QColor link_text(198, 238, 255); + + QPalette darkPalette; + darkPalette.setColor(QPalette::Window, window_color); + darkPalette.setColor(QPalette::WindowText, text); + darkPalette.setColor(QPalette::Base, base_color); + darkPalette.setColor(QPalette::AlternateBase, window_color); + darkPalette.setColor(QPalette::ToolTipBase, window_color); + darkPalette.setColor(QPalette::ToolTipText, text); + darkPalette.setColor(QPalette::Text, text); + darkPalette.setColor(QPalette::Button, button_color); + darkPalette.setColor(QPalette::ButtonText, text); + darkPalette.setColor(QPalette::Link, link_text); + darkPalette.setColor(QPalette::Highlight, highlight_background); + darkPalette.setColor(QPalette::HighlightedText, highlight_text); + darkPalette.setColor(QPalette::PlaceholderText, placeholder_text); + + darkPalette.setColor(QPalette::Active, QPalette::Button, button_color); + darkPalette.setColor(QPalette::Disabled, QPalette::ButtonText, disabled_text); + darkPalette.setColor(QPalette::Disabled, QPalette::WindowText, disabled_text); + darkPalette.setColor(QPalette::Disabled, QPalette::Text, disabled_text); + darkPalette.setColor(QPalette::Disabled, QPalette::Light, window_color); + + qApp->setPalette(darkPalette); + qApp->setStyleSheet(QString()); + qApp->styleHints()->setColorScheme(Qt::ColorScheme::Dark); + + // menus are by far the ugliest part of fusion, so we style them manually + const QString stylesheet = QStringLiteral(R"( +QMenu { + border: 1px solid #444; + border-radius: 8px; + padding: 6px 10px; + background-color: #232323; +} +QMenu::item { + padding: 6px 10px; + border-radius: 8px; +} +QMenu::item:selected { + background-color: #414141; +} +QMenuBar::item { + padding: 4px 6px; + border-radius: 6px; +} +QMenuBar::item:selected, QMenuBar::item:pressed { + background: #414141; + border-radius: 4px; +} +QToolTip { + color: #ffffff; + background-color: #232323; + border: 1px solid #444; + border-radius: 6px; + padding: 2px; +} + )"); + + qApp->setStyleSheet(stylesheet); + + } else if (theme == "cobaltsky") { // Custom palette by KamFretoZ, A soothing deep royal blue