Skip to content

Commit 4513a04

Browse files
authored
Merge pull request #31 from Sclafus/dark-mode-windows10
Dark Mode for Windows
2 parents 5a25743 + 5178f5d commit 4513a04

File tree

5 files changed

+91
-2
lines changed

5 files changed

+91
-2
lines changed

forms/preferences.ui

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@
357357
<item>
358358
<widget class="QRadioButton" name="themesDarkRadio">
359359
<property name="enabled">
360-
<bool>false</bool>
360+
<bool>true</bool>
361361
</property>
362362
<property name="text">
363363
<string>Dark</string>
@@ -367,7 +367,7 @@
367367
<item>
368368
<widget class="QRadioButton" name="themesLightRadio">
369369
<property name="enabled">
370-
<bool>false</bool>
370+
<bool>true</bool>
371371
</property>
372372
<property name="text">
373373
<string>Light</string>

src/mainwindow.cpp

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ MainWindow::~MainWindow()
2727
void MainWindow::setupUi()
2828
{
2929
this->setupStatusbar();
30+
this->loadTheme();
3031
connect(ui->btnStart, &QPushButton::released, this, &MainWindow::on_init);
3132
}
3233

@@ -43,6 +44,68 @@ void MainWindow::setupStatusbar()
4344
}
4445

4546

47+
48+
void MainWindow::loadTheme()
49+
{
50+
#ifdef Q_OS_WIN
51+
// If present, prefer the local settings.
52+
QSettings settings;
53+
bool isDarkMode;
54+
auto darkModeSetting = settings.value("theme/darkMode");
55+
56+
if (!darkModeSetting.isNull()) {
57+
isDarkMode = darkModeSetting.toBool();
58+
if (isDarkMode) {
59+
loadDarkMode();
60+
}
61+
return;
62+
}
63+
64+
// In windows>=10, you can set a default behaviour for app themes in the settings menu.
65+
// TODO: Check for major and minor version of windows.
66+
// Perhaps this can be used in linux and macos too?
67+
QSettings windowsSettings(
68+
"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize",
69+
QSettings::NativeFormat
70+
);
71+
isDarkMode = windowsSettings.value("AppsUseLightTheme") == 0;
72+
73+
if (isDarkMode) {
74+
loadDarkMode();
75+
}
76+
#endif
77+
}
78+
79+
80+
void MainWindow::loadDarkMode()
81+
{
82+
qApp->setStyle(QStyleFactory::create("Fusion"));
83+
QPalette darkPalette;
84+
QColor darkColor = QColor(45,45,45);
85+
QColor disabledColor = QColor(127,127,127);
86+
87+
darkPalette.setColor(QPalette::Window, darkColor);
88+
darkPalette.setColor(QPalette::WindowText, Qt::white);
89+
darkPalette.setColor(QPalette::Base, QColor(18,18,18));
90+
darkPalette.setColor(QPalette::AlternateBase, darkColor);
91+
darkPalette.setColor(QPalette::ToolTipBase, Qt::white);
92+
darkPalette.setColor(QPalette::ToolTipText, Qt::white);
93+
darkPalette.setColor(QPalette::Text, Qt::white);
94+
darkPalette.setColor(QPalette::Disabled, QPalette::Text, disabledColor);
95+
darkPalette.setColor(QPalette::Button, darkColor);
96+
darkPalette.setColor(QPalette::ButtonText, Qt::white);
97+
darkPalette.setColor(QPalette::Disabled, QPalette::ButtonText, disabledColor);
98+
darkPalette.setColor(QPalette::BrightText, Qt::red);
99+
darkPalette.setColor(QPalette::Link, QColor(42, 130, 218));
100+
darkPalette.setColor(QPalette::Highlight, QColor(42, 130, 218));
101+
darkPalette.setColor(QPalette::HighlightedText, Qt::black);
102+
darkPalette.setColor(QPalette::Disabled, QPalette::HighlightedText, disabledColor);
103+
104+
qApp->setPalette(darkPalette);
105+
qApp->setStyleSheet("QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }");
106+
}
107+
108+
46109
void MainWindow::setupSignals()
47110
{
48111
connect(twitchClient, &TwitchClient::connected, this, &MainWindow::on_twitchClient_connected);

src/mainwindow.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <QMessageBox>
1111
#include <QPushButton>
1212
#include <QSettings>
13+
#include <QStyleFactory>
1314
#include <QUrl>
1415

1516
#include "gosumemoryClient.h"
@@ -61,6 +62,8 @@ class MainWindow : public QMainWindow
6162
void setupSignals();
6263
void setupStatusbar();
6364
void setupUi();
65+
void loadTheme();
66+
void loadDarkMode();
6467
QListWidgetItem *getTwitchChatMessage(QString username, QString message);
6568
Ui::MainWindow *ui;
6669
TwitchClient *twitchClient;

src/preferences/preferences.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ void Preferences::loadSettings()
4646
loadGosuMemorySettings();
4747
loadTwitchSettings();
4848
loadOsuIrcSettings();
49+
loadThemeSettings();
4950
}
5051

5152

@@ -73,6 +74,26 @@ void Preferences::loadOsuIrcSettings()
7374
}
7475

7576

77+
void Preferences::loadThemeSettings()
78+
{
79+
auto darkModeSetting = settings.value("theme/darkMode");
80+
bool isDarkMode;
81+
82+
if(darkModeSetting.isNull()){
83+
QSettings windowsSettings(
84+
"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize",
85+
QSettings::NativeFormat
86+
);
87+
isDarkMode = windowsSettings.value("AppsUseLightTheme") == 0;
88+
}
89+
else {
90+
isDarkMode = darkModeSetting.toBool();
91+
}
92+
ui->themesLightRadio->setChecked(!isDarkMode);
93+
ui->themesDarkRadio->setChecked(isDarkMode);
94+
}
95+
96+
7697
void Preferences::on_saveBtnClicked()
7798
{
7899
saveSettings();
@@ -92,6 +113,7 @@ void Preferences::saveSettings()
92113
settings.setValue("osuirc/password", ui->osuIrcPasswordLineEdit->text());
93114
settings.setValue("osuirc/server", ui->osuIrcServerLineEdit->text());
94115
settings.setValue("osuirc/port", ui->osuIrcPortLineEdit->text());
116+
settings.setValue("theme/darkMode", ui->themesDarkRadio->isChecked());
95117
}
96118

97119

src/preferences/preferences.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class Preferences : public QDialog
2525
void loadTwitchSettings();
2626
void loadGosuMemorySettings();
2727
void loadOsuIrcSettings();
28+
void loadThemeSettings();
2829
void setupUi();
2930
void saveSettings();
3031
void on_saveBtnClicked();

0 commit comments

Comments
 (0)