From 41e1af64e5cd03f689af0c23289677adeea8a2a5 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 12 Nov 2021 08:39:44 +0100 Subject: [PATCH] optional dark style --- .../desktop/com.github.rssguard.appdata.xml | 2 +- src/librssguard/gui/settings/settingsgui.cpp | 11 +++++ src/librssguard/gui/settings/settingsgui.ui | 19 ++++++-- src/librssguard/miscellaneous/settings.cpp | 3 ++ src/librssguard/miscellaneous/settings.h | 3 ++ src/librssguard/miscellaneous/skinfactory.cpp | 48 ++++++++++++++++++- 6 files changed, 80 insertions(+), 6 deletions(-) diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml index c6ea6a132..bc5731727 100644 --- a/resources/desktop/com.github.rssguard.appdata.xml +++ b/resources/desktop/com.github.rssguard.appdata.xml @@ -26,7 +26,7 @@ https://github.com/sponsors/martinrotter - + none diff --git a/src/librssguard/gui/settings/settingsgui.cpp b/src/librssguard/gui/settings/settingsgui.cpp index 00d707190..9d737a567 100644 --- a/src/librssguard/gui/settings/settingsgui.cpp +++ b/src/librssguard/gui/settings/settingsgui.cpp @@ -35,12 +35,18 @@ SettingsGui::SettingsGui(Settings* settings, QWidget* parent) : SettingsPanel(se m_ui->m_treeSkins->header()->setSectionResizeMode(1, QHeaderView::ResizeMode::ResizeToContents); m_ui->m_treeSkins->header()->setSectionResizeMode(2, QHeaderView::ResizeMode::ResizeToContents); + connect(m_ui->m_cmbStyles, &QComboBox::currentTextChanged, this, [this](const QString& txt) { + m_ui->m_checkForceDarkFusion->setVisible(txt.toLower() == QSL("fusion")); + }); + connect(m_ui->m_cmbIconTheme, static_cast(&QComboBox::currentIndexChanged), this, &SettingsGui::requireRestart); connect(m_ui->m_cmbIconTheme, static_cast(&QComboBox::currentIndexChanged), this, &SettingsGui::dirtifySettings); connect(m_ui->m_treeSkins, &QTreeWidget::currentItemChanged, this, &SettingsGui::dirtifySettings); connect(m_ui->m_grpTray, &QGroupBox::toggled, this, &SettingsGui::dirtifySettings); connect(m_ui->m_checkHidden, &QCheckBox::toggled, this, &SettingsGui::dirtifySettings); + connect(m_ui->m_checkForceDarkFusion, &QCheckBox::toggled, this, &SettingsGui::dirtifySettings); + connect(m_ui->m_checkForceDarkFusion, &QCheckBox::toggled, this, &SettingsGui::requireRestart); connect(m_ui->m_checkMonochromeIcons, &QCheckBox::toggled, this, &SettingsGui::dirtifySettings); connect(m_ui->m_checkCountUnreadMessages, &QCheckBox::toggled, this, &SettingsGui::dirtifySettings); connect(m_ui->m_checkHideWhenMinimized, &QCheckBox::toggled, this, &SettingsGui::dirtifySettings); @@ -97,6 +103,9 @@ void SettingsGui::loadSettings() { m_ui->m_checkHidden->setChecked(settings()->value(GROUP(GUI), SETTING(GUI::MainWindowStartsHidden)).toBool()); m_ui->m_checkHideWhenMinimized->setChecked(settings()->value(GROUP(GUI), SETTING(GUI::HideMainWindowWhenMinimized)).toBool()); + m_ui->m_checkForceDarkFusion->setChecked(settings()->value(GROUP(GUI), + SETTING(GUI::ForceDarkFusion)).toBool()); + // Load settings of icon theme. const QString current_theme = qApp->icons()->currentIconTheme(); auto icons = qApp->icons()->installedIconThemes(); @@ -222,6 +231,8 @@ void SettingsGui::saveSettings() { settings()->setValue(GROUP(GUI), GUI::MainWindowStartsHidden, m_ui->m_checkHidden->isChecked()); settings()->setValue(GROUP(GUI), GUI::HideMainWindowWhenMinimized, m_ui->m_checkHideWhenMinimized->isChecked()); + settings()->setValue(GROUP(GUI), GUI::ForceDarkFusion, m_ui->m_checkForceDarkFusion->isChecked()); + // Make sure that number of unread messages is shown in tray icon as requested. qApp->feedReader()->feedsModel()->notifyWithCounts(); diff --git a/src/librssguard/gui/settings/settingsgui.ui b/src/librssguard/gui/settings/settingsgui.ui index 7d6894651..b29ae5669 100644 --- a/src/librssguard/gui/settings/settingsgui.ui +++ b/src/librssguard/gui/settings/settingsgui.ui @@ -6,7 +6,7 @@ 0 0 - 667 + 685 394 @@ -53,7 +53,7 @@ - + Skin @@ -63,7 +63,7 @@ - + 0 @@ -87,7 +87,7 @@ - + Qt::Vertical @@ -100,6 +100,13 @@ + + + + Force dark look + + + @@ -381,6 +388,10 @@ m_checkHideTabBarIfOneTabVisible m_cmbToolbarButtonStyle m_cmbSelectToolBar + m_cmbIconTheme + m_cmbStyles + m_checkForceDarkFusion + m_treeSkins diff --git a/src/librssguard/miscellaneous/settings.cpp b/src/librssguard/miscellaneous/settings.cpp index d0deac57e..ce4106095 100644 --- a/src/librssguard/miscellaneous/settings.cpp +++ b/src/librssguard/miscellaneous/settings.cpp @@ -211,6 +211,9 @@ DVALUE(bool) GUI::HideMainWindowWhenMinimizedDef = false; DKEY GUI::MonochromeTrayIcon = "monochrome_tray_icon"; DVALUE(bool) GUI::MonochromeTrayIconDef = false; +DKEY GUI::ForceDarkFusion = "force_dark_fusion"; +DVALUE(bool) GUI::ForceDarkFusionDef = false; + DKEY GUI::UnreadNumbersInTrayIcon = "show_unread_numbers_in_tray_icon"; DVALUE(bool) GUI::UnreadNumbersInTrayIconDef = true; diff --git a/src/librssguard/miscellaneous/settings.h b/src/librssguard/miscellaneous/settings.h index d0eb7411d..f3b9d8432 100644 --- a/src/librssguard/miscellaneous/settings.h +++ b/src/librssguard/miscellaneous/settings.h @@ -217,6 +217,9 @@ namespace GUI { KEY HideMainWindowWhenMinimized; VALUE(bool) HideMainWindowWhenMinimizedDef; + KEY ForceDarkFusion; + VALUE(bool) ForceDarkFusionDef; + KEY AlternateRowColorsInLists; VALUE(bool) AlternateRowColorsInListsDef; diff --git a/src/librssguard/miscellaneous/skinfactory.cpp b/src/librssguard/miscellaneous/skinfactory.cpp index 4fd7f57af..bd0a6bd1e 100644 --- a/src/librssguard/miscellaneous/skinfactory.cpp +++ b/src/librssguard/miscellaneous/skinfactory.cpp @@ -9,6 +9,7 @@ #include #include #include +#include SkinFactory::SkinFactory(QObject* parent) : QObject(parent) {} @@ -52,7 +53,52 @@ void SkinFactory::loadSkinFromData(const Skin& skin) { } } - qApp->setStyle(qApp->settings()->value(GROUP(GUI), SETTING(GUI::Style)).toString()); + QString style_name = qApp->settings()->value(GROUP(GUI), SETTING(GUI::Style)).toString(); + + qApp->setStyle(style_name); + + if (style_name.toLower() == QSL("fusion") && + qApp->settings()->value(GROUP(GUI), SETTING(GUI::ForceDarkFusion)).toBool()) { + qDebugNN << LOGSEC_GUI << "Activating dark palette for Fusion style."; + + QPalette fusion_palette = qApp->palette(); + QColor clr_bg(QSL("#2D2F32")); + QColor clr_altbg(QSL("#323437")); + QColor clr_selbg(QSL("#8291AD")); + QColor clr_fg(QSL("#D8D8D8")); + QColor clr_brdr(QSL("#585C65")); + QColor clr_tooltip_brdr(QSL("#707580")); + QColor clr_link(QSL("#a1acc1")); + QColor clr_dis_fg(QSL("#727272")); + + // Normal state. + fusion_palette.setColor(QPalette::Window, clr_bg); + fusion_palette.setColor(QPalette::WindowText, clr_fg); + fusion_palette.setColor(QPalette::Base, clr_bg); + fusion_palette.setColor(QPalette::AlternateBase, clr_altbg); + fusion_palette.setColor(QPalette::ToolTipBase, clr_altbg); + fusion_palette.setColor(QPalette::ToolTipText, clr_fg); + fusion_palette.setColor(QPalette::Text, clr_fg); + fusion_palette.setColor(QPalette::Button, clr_altbg); + fusion_palette.setColor(QPalette::ButtonText, clr_fg); + fusion_palette.setColor(QPalette::BrightText, clr_fg); + fusion_palette.setColor(QPalette::Link, clr_link); + fusion_palette.setColor(QPalette::Highlight, clr_selbg); + fusion_palette.setColor(QPalette::HighlightedText, clr_fg); + + // Disabled state. + fusion_palette.setColor(QPalette::Disabled, QPalette::Text, clr_dis_fg); + fusion_palette.setColor(QPalette::Disabled, QPalette::WindowText, clr_dis_fg); + fusion_palette.setColor(QPalette::Disabled, QPalette::ButtonText, clr_dis_fg); + fusion_palette.setColor(QPalette::Disabled, QPalette::Button, Qt::GlobalColor::red); + fusion_palette.setColor(QPalette::Disabled, QPalette::HighlightedText, clr_fg); + fusion_palette.setColor(QPalette::Disabled, QPalette::Base, clr_altbg); + fusion_palette.setColor(QPalette::Disabled, QPalette::Window, clr_altbg); + fusion_palette.setColor(QPalette::Disabled, QPalette::Highlight, clr_selbg); + + QToolTip::setPalette(fusion_palette); + qApp->setPalette(fusion_palette); + } } void SkinFactory::setCurrentSkinName(const QString& skin_name) {