@@ -27,6 +27,7 @@ MainWindow::~MainWindow()
2727void 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+
46109void MainWindow::setupSignals ()
47110{
48111 connect (twitchClient, &TwitchClient::connected, this , &MainWindow::on_twitchClient_connected);
0 commit comments