Skip to content

Commit

Permalink
Merge pull request #31 from Sclafus/dark-mode-windows10
Browse files Browse the repository at this point in the history
Dark Mode for Windows
  • Loading branch information
Sclafus authored Nov 19, 2022
2 parents 5a25743 + 5178f5d commit 4513a04
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 2 deletions.
4 changes: 2 additions & 2 deletions forms/preferences.ui
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@
<item>
<widget class="QRadioButton" name="themesDarkRadio">
<property name="enabled">
<bool>false</bool>
<bool>true</bool>
</property>
<property name="text">
<string>Dark</string>
Expand All @@ -367,7 +367,7 @@
<item>
<widget class="QRadioButton" name="themesLightRadio">
<property name="enabled">
<bool>false</bool>
<bool>true</bool>
</property>
<property name="text">
<string>Light</string>
Expand Down
63 changes: 63 additions & 0 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ MainWindow::~MainWindow()
void MainWindow::setupUi()
{
this->setupStatusbar();
this->loadTheme();
connect(ui->btnStart, &QPushButton::released, this, &MainWindow::on_init);
}

Expand All @@ -43,6 +44,68 @@ void MainWindow::setupStatusbar()
}



void MainWindow::loadTheme()
{
#ifdef Q_OS_WIN
// If present, prefer the local settings.
QSettings settings;
bool isDarkMode;
auto darkModeSetting = settings.value("theme/darkMode");

if (!darkModeSetting.isNull()) {
isDarkMode = darkModeSetting.toBool();
if (isDarkMode) {
loadDarkMode();
}
return;
}

// In windows>=10, you can set a default behaviour for app themes in the settings menu.
// TODO: Check for major and minor version of windows.
// Perhaps this can be used in linux and macos too?
QSettings windowsSettings(
"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize",
QSettings::NativeFormat
);
isDarkMode = windowsSettings.value("AppsUseLightTheme") == 0;

if (isDarkMode) {
loadDarkMode();
}
#endif
}


void MainWindow::loadDarkMode()
{
qApp->setStyle(QStyleFactory::create("Fusion"));
QPalette darkPalette;
QColor darkColor = QColor(45,45,45);
QColor disabledColor = QColor(127,127,127);

darkPalette.setColor(QPalette::Window, darkColor);
darkPalette.setColor(QPalette::WindowText, Qt::white);
darkPalette.setColor(QPalette::Base, QColor(18,18,18));
darkPalette.setColor(QPalette::AlternateBase, darkColor);
darkPalette.setColor(QPalette::ToolTipBase, Qt::white);
darkPalette.setColor(QPalette::ToolTipText, Qt::white);
darkPalette.setColor(QPalette::Text, Qt::white);
darkPalette.setColor(QPalette::Disabled, QPalette::Text, disabledColor);
darkPalette.setColor(QPalette::Button, darkColor);
darkPalette.setColor(QPalette::ButtonText, Qt::white);
darkPalette.setColor(QPalette::Disabled, QPalette::ButtonText, disabledColor);
darkPalette.setColor(QPalette::BrightText, Qt::red);
darkPalette.setColor(QPalette::Link, QColor(42, 130, 218));
darkPalette.setColor(QPalette::Highlight, QColor(42, 130, 218));
darkPalette.setColor(QPalette::HighlightedText, Qt::black);
darkPalette.setColor(QPalette::Disabled, QPalette::HighlightedText, disabledColor);

qApp->setPalette(darkPalette);
qApp->setStyleSheet("QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }");
}


void MainWindow::setupSignals()
{
connect(twitchClient, &TwitchClient::connected, this, &MainWindow::on_twitchClient_connected);
Expand Down
3 changes: 3 additions & 0 deletions src/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include <QMessageBox>
#include <QPushButton>
#include <QSettings>
#include <QStyleFactory>
#include <QUrl>

#include "gosumemoryClient.h"
Expand Down Expand Up @@ -61,6 +62,8 @@ class MainWindow : public QMainWindow
void setupSignals();
void setupStatusbar();
void setupUi();
void loadTheme();
void loadDarkMode();
QListWidgetItem *getTwitchChatMessage(QString username, QString message);
Ui::MainWindow *ui;
TwitchClient *twitchClient;
Expand Down
22 changes: 22 additions & 0 deletions src/preferences/preferences.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ void Preferences::loadSettings()
loadGosuMemorySettings();
loadTwitchSettings();
loadOsuIrcSettings();
loadThemeSettings();
}


Expand Down Expand Up @@ -73,6 +74,26 @@ void Preferences::loadOsuIrcSettings()
}


void Preferences::loadThemeSettings()
{
auto darkModeSetting = settings.value("theme/darkMode");
bool isDarkMode;

if(darkModeSetting.isNull()){
QSettings windowsSettings(
"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize",
QSettings::NativeFormat
);
isDarkMode = windowsSettings.value("AppsUseLightTheme") == 0;
}
else {
isDarkMode = darkModeSetting.toBool();
}
ui->themesLightRadio->setChecked(!isDarkMode);
ui->themesDarkRadio->setChecked(isDarkMode);
}


void Preferences::on_saveBtnClicked()
{
saveSettings();
Expand All @@ -92,6 +113,7 @@ void Preferences::saveSettings()
settings.setValue("osuirc/password", ui->osuIrcPasswordLineEdit->text());
settings.setValue("osuirc/server", ui->osuIrcServerLineEdit->text());
settings.setValue("osuirc/port", ui->osuIrcPortLineEdit->text());
settings.setValue("theme/darkMode", ui->themesDarkRadio->isChecked());
}


Expand Down
1 change: 1 addition & 0 deletions src/preferences/preferences.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class Preferences : public QDialog
void loadTwitchSettings();
void loadGosuMemorySettings();
void loadOsuIrcSettings();
void loadThemeSettings();
void setupUi();
void saveSettings();
void on_saveBtnClicked();
Expand Down

0 comments on commit 4513a04

Please sign in to comment.