diff --git a/src/86box.c b/src/86box.c
index 87dbfc0b1..0b5a26131 100644
--- a/src/86box.c
+++ b/src/86box.c
@@ -236,6 +236,7 @@ char monitor_edid_path[1024] = { 0 }; /* (C) Path to
double video_gl_input_scale = 1.0; /* (C) OpenGL 3.x input scale */
int video_gl_input_scale_mode = FULLSCR_SCALE_FULL; /* (C) OpenGL 3.x input stretch mode */
+int color_scheme = 0; /* (C) Color scheme of UI (Windows-only) */
// Accelerator key array
struct accelKey acc_keys[NUM_ACCELS];
diff --git a/src/config.c b/src/config.c
index a3c2dc0ec..737e7313b 100644
--- a/src/config.c
+++ b/src/config.c
@@ -128,6 +128,7 @@ load_global(void)
confirm_reset = ini_section_get_int(cat, "confirm_reset", 1);
confirm_exit = ini_section_get_int(cat, "confirm_exit", 1);
confirm_save = ini_section_get_int(cat, "confirm_save", 1);
+ color_scheme = ini_section_get_int(cat, "color_scheme", 0);
inhibit_multimedia_keys = ini_section_get_int(cat, "inhibit_multimedia_keys", 0);
@@ -2222,6 +2223,11 @@ save_global(void)
ini_section_set_string(cat, "language", buffer);
}
+ if (color_scheme)
+ ini_section_set_int(cat, "color_scheme", color_scheme);
+ else
+ ini_section_delete_var(cat, "color_scheme");
+
if (open_dir_usr_path)
ini_section_set_int(cat, "open_dir_usr_path", open_dir_usr_path);
else
diff --git a/src/include/86box/86box.h b/src/include/86box/86box.h
index 08def802b..ce39652bc 100644
--- a/src/include/86box/86box.h
+++ b/src/include/86box/86box.h
@@ -206,6 +206,8 @@ extern int portable_mode; /* we are running in portable mode
extern int monitor_edid; /* (C) Which EDID to use. 0=default, 1=custom. */
extern char monitor_edid_path[1024]; /* (C) Path to custom EDID */
+extern int color_scheme; /* (C) Color scheme of UI (Windows-only) */
+
#ifndef USE_NEW_DYNAREC
extern FILE *stdlog; /* file to log output to */
#endif
diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot
index 4fc54d4a7..a65578eae 100644
--- a/src/qt/languages/86box.pot
+++ b/src/qt/languages/86box.pot
@@ -2972,3 +2972,15 @@ msgstr ""
msgid "OpenGL input stretch mode"
msgstr ""
+
+msgid "Color scheme"
+msgstr ""
+
+msgid "System"
+msgstr ""
+
+msgid "Light"
+msgstr ""
+
+msgid "Dark"
+msgstr ""
diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po
index 21f55dfd6..ae265593c 100644
--- a/src/qt/languages/cs-CZ.po
+++ b/src/qt/languages/cs-CZ.po
@@ -2972,3 +2972,12 @@ msgstr "Vstupní měřítko OpenGL"
msgid "OpenGL input stretch mode"
msgstr "režim roztažení vstupu OpenGL"
+
+msgid "Color scheme"
+msgstr "Barevné schéma"
+
+msgid "Light"
+msgstr "Světlo"
+
+msgid "Dark"
+msgstr "Tmavá"
diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po
index c2e47f777..4385811c0 100644
--- a/src/qt/languages/de-DE.po
+++ b/src/qt/languages/de-DE.po
@@ -2972,3 +2972,12 @@ msgstr "Eingabeskala von OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Eingabestreckungsmodus von OpenGL"
+
+msgid "Color scheme"
+msgstr "Farbschema"
+
+msgid "Light"
+msgstr "Licht"
+
+msgid "Dark"
+msgstr "Dunkel"
diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po
index d15f98e76..b3d8835cf 100644
--- a/src/qt/languages/es-ES.po
+++ b/src/qt/languages/es-ES.po
@@ -2972,3 +2972,12 @@ msgstr "Escala de entrada de OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Modo de estiramiento de entrada de OpenGL"
+
+msgid "Color scheme"
+msgstr "Esquema de colores"
+
+msgid "Light"
+msgstr "Luz"
+
+msgid "Dark"
+msgstr "Oscuro"
diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po
index ef9f90f48..475d94b7b 100644
--- a/src/qt/languages/fi-FI.po
+++ b/src/qt/languages/fi-FI.po
@@ -2972,3 +2972,12 @@ msgstr "OpenGL:n syöttöasteikko"
msgid "OpenGL input stretch mode"
msgstr "OpenGL:n syötteen venytystila"
+
+msgid "Color scheme"
+msgstr "Värimaailma"
+
+msgid "Light"
+msgstr "Valo"
+
+msgid "Dark"
+msgstr "Tumma"
diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po
index 983994783..3f28b4af8 100644
--- a/src/qt/languages/fr-FR.po
+++ b/src/qt/languages/fr-FR.po
@@ -2972,3 +2972,12 @@ msgstr "Échelle d'entrée d'OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Mode d'étirement des données d'entrée d'OpenGL"
+
+msgid "Color scheme"
+msgstr "Palette de couleurs"
+
+msgid "Light"
+msgstr "Lumière"
+
+msgid "Dark"
+msgstr "Sombre"
diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po
index 9b901c03e..4996db404 100644
--- a/src/qt/languages/hr-HR.po
+++ b/src/qt/languages/hr-HR.po
@@ -2972,3 +2972,12 @@ msgstr "Ulazna skala OpenGL-a"
msgid "OpenGL input stretch mode"
msgstr "Način rastezanja ulaza u OpenGL-u"
+
+msgid "Color scheme"
+msgstr "Shema boja"
+
+msgid "Light"
+msgstr "Svjetlo"
+
+msgid "Dark"
+msgstr "Tamno"
diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po
index 5fad20cb9..9ad2559ee 100644
--- a/src/qt/languages/it-IT.po
+++ b/src/qt/languages/it-IT.po
@@ -2972,3 +2972,12 @@ msgstr "Scala di input di OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Modalità di allungamento dell'input di OpenGL"
+
+msgid "Color scheme"
+msgstr "Combinazione di colori"
+
+msgid "Light"
+msgstr "Luce"
+
+msgid "Dark"
+msgstr "Scuro"
diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po
index 49f1d7cf2..35944487a 100644
--- a/src/qt/languages/ja-JP.po
+++ b/src/qt/languages/ja-JP.po
@@ -2972,3 +2972,12 @@ msgstr "OpenGLの入力スケール"
msgid "OpenGL input stretch mode"
msgstr "OpenGLの入力ストレッチモード"
+
+msgid "Color scheme"
+msgstr "配色"
+
+msgid "Light"
+msgstr "光"
+
+msgid "Dark"
+msgstr "暗闇"
diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po
index 63c9d8a94..14da0ec8b 100644
--- a/src/qt/languages/ko-KR.po
+++ b/src/qt/languages/ko-KR.po
@@ -2972,3 +2972,12 @@ msgstr "OpenGL 입력 스케일"
msgid "OpenGL input stretch mode"
msgstr "OpenGL 입력 스트레치 모드"
+
+msgid "Color scheme"
+msgstr "색상 구성"
+
+msgid "Light"
+msgstr "빛"
+
+msgid "Dark"
+msgstr "어둠"
diff --git a/src/qt/languages/nb-NO.po b/src/qt/languages/nb-NO.po
index 0568aa565..8d9f97521 100644
--- a/src/qt/languages/nb-NO.po
+++ b/src/qt/languages/nb-NO.po
@@ -2972,3 +2972,12 @@ msgstr "Inngangsskala for OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Inngangsstrekkmodus for OpenGL"
+
+msgid "Color scheme"
+msgstr "Fargevalg"
+
+msgid "Light"
+msgstr "Lys"
+
+msgid "Dark"
+msgstr "Mørk"
diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po
index 9183ece94..d28a72651 100644
--- a/src/qt/languages/nl-NL.po
+++ b/src/qt/languages/nl-NL.po
@@ -2972,3 +2972,12 @@ msgstr "Invoerschaal van OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Input stretch-modus van OpenGL"
+
+msgid "Color scheme"
+msgstr "Kleurenschema"
+
+msgid "Light"
+msgstr "Licht"
+
+msgid "Dark"
+msgstr "Donker"
diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po
index 2baa525e4..2a0cde697 100644
--- a/src/qt/languages/pl-PL.po
+++ b/src/qt/languages/pl-PL.po
@@ -2972,3 +2972,12 @@ msgstr "Skala wejściowa OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Tryb rozciągania wejściowego OpenGL"
+
+msgid "Color scheme"
+msgstr "Schemat kolorów"
+
+msgid "Light"
+msgstr "Światło"
+
+msgid "Dark"
+msgstr "Ciemny"
diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po
index 6cee38ff5..078cd2fb9 100644
--- a/src/qt/languages/pt-BR.po
+++ b/src/qt/languages/pt-BR.po
@@ -2972,3 +2972,12 @@ msgstr "Escala de entrada do OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Modo de expansão de entrada do OpenGL"
+
+msgid "Color scheme"
+msgstr "Esquema de cores"
+
+msgid "Light"
+msgstr "Luz"
+
+msgid "Dark"
+msgstr "Escuro"
diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po
index 3e16ac722..d03344c50 100644
--- a/src/qt/languages/pt-PT.po
+++ b/src/qt/languages/pt-PT.po
@@ -2972,3 +2972,12 @@ msgstr "Escala de entrada do OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Modo de expansão de entrada do OpenGL"
+
+msgid "Color scheme"
+msgstr "Esquema de cores"
+
+msgid "Light"
+msgstr "Luz"
+
+msgid "Dark"
+msgstr "Escuro"
diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po
index f26353b6a..0ef98bf88 100644
--- a/src/qt/languages/ru-RU.po
+++ b/src/qt/languages/ru-RU.po
@@ -2972,3 +2972,12 @@ msgstr "Масштаб ввода OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Режим растяжения ввода OpenGL"
+
+msgid "Color scheme"
+msgstr "Цветовая гамма"
+
+msgid "Light"
+msgstr "Свет"
+
+msgid "Dark"
+msgstr "Темный"
diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po
index 5f079509f..3a5e3b863 100644
--- a/src/qt/languages/sk-SK.po
+++ b/src/qt/languages/sk-SK.po
@@ -2972,3 +2972,12 @@ msgstr "Vstupná stupnica OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Režim rozťahovania vstupu OpenGL"
+
+msgid "Color scheme"
+msgstr "Farebná schéma"
+
+msgid "Light"
+msgstr "Svetlo"
+
+msgid "Dark"
+msgstr "Tmavá"
diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po
index 18437c5b2..c23024a33 100644
--- a/src/qt/languages/sl-SI.po
+++ b/src/qt/languages/sl-SI.po
@@ -2972,3 +2972,12 @@ msgstr "Vhodna lestvica OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Način raztezanja vhoda OpenGL"
+
+msgid "Color scheme"
+msgstr "Barvna shema"
+
+msgid "Light"
+msgstr "Svetloba"
+
+msgid "Dark"
+msgstr "Temno"
diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po
index 180eecf64..58ead9405 100644
--- a/src/qt/languages/sv-SE.po
+++ b/src/qt/languages/sv-SE.po
@@ -2972,3 +2972,12 @@ msgstr "Inmatningsskala för OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Inmatningssträckningsläge för OpenGL"
+
+msgid "Color scheme"
+msgstr "Färgschema"
+
+msgid "Light"
+msgstr "Ljus"
+
+msgid "Dark"
+msgstr "Mörk"
diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po
index 53b15d1c7..538cc7af6 100644
--- a/src/qt/languages/tr-TR.po
+++ b/src/qt/languages/tr-TR.po
@@ -2972,3 +2972,12 @@ msgstr "OpenGL'nin giriş ölçeği"
msgid "OpenGL input stretch mode"
msgstr "OpenGL'nin giriş germe modu"
+
+msgid "Color scheme"
+msgstr "Renk şeması"
+
+msgid "Light"
+msgstr "Işık"
+
+msgid "Dark"
+msgstr "Karanlık"
diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po
index 093f507b2..c079fc141 100644
--- a/src/qt/languages/uk-UA.po
+++ b/src/qt/languages/uk-UA.po
@@ -2972,3 +2972,12 @@ msgstr "Шкала введення OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Режим розтягування вхідних даних OpenGL"
+
+msgid "Color scheme"
+msgstr "Колірна гамма"
+
+msgid "Light"
+msgstr "Світло"
+
+msgid "Dark"
+msgstr "Темний"
diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po
index 9d967145e..0190aee4c 100644
--- a/src/qt/languages/vi-VN.po
+++ b/src/qt/languages/vi-VN.po
@@ -2972,3 +2972,12 @@ msgstr "Độ phân giải đầu vào của OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Chế độ kéo giãn đầu vào của OpenGL"
+
+msgid "Color scheme"
+msgstr "Bảng màu"
+
+msgid "Light"
+msgstr "Ánh sáng"
+
+msgid "Dark"
+msgstr "Tối"
diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po
index 4cfee3fff..a265bfdc1 100644
--- a/src/qt/languages/zh-CN.po
+++ b/src/qt/languages/zh-CN.po
@@ -2972,3 +2972,12 @@ msgstr "OpenGL的输入比例"
msgid "OpenGL input stretch mode"
msgstr "OpenGL的输入拉伸模式"
+
+msgid "Color scheme"
+msgstr "配色方案"
+
+msgid "Light"
+msgstr "光"
+
+msgid "Dark"
+msgstr "黑暗"
diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po
index 39bbe7f5b..21a984ebd 100644
--- a/src/qt/languages/zh-TW.po
+++ b/src/qt/languages/zh-TW.po
@@ -2972,3 +2972,12 @@ msgstr "OpenGL 的輸入比例"
msgid "OpenGL input stretch mode"
msgstr "OpenGL 的輸入拉伸模式"
+
+msgid "Color scheme"
+msgstr "配色方案"
+
+msgid "Light"
+msgstr "光"
+
+msgid "Dark"
+msgstr "黑暗"
diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp
index 6a2ba1a3a..5d213fe31 100644
--- a/src/qt/qt_main.cpp
+++ b/src/qt/qt_main.cpp
@@ -519,6 +519,7 @@ int
main(int argc, char *argv[])
{
#ifdef Q_OS_WINDOWS
+ bool wasDarkTheme = false;
/* Check if Windows supports UTF-8 */
if (GetACP() == CP_UTF8)
acp_utf8 = 1;
@@ -554,6 +555,7 @@ main(int argc, char *argv[])
f.open(QFile::ReadOnly | QFile::Text);
QTextStream ts(&f);
qApp->setStyleSheet(ts.readAll());
+ wasDarkTheme = true;
}
QPalette palette(qApp->palette());
palette.setColor(QPalette::Link, Qt::white);
@@ -585,6 +587,16 @@ main(int argc, char *argv[])
return 0;
}
+#ifdef Q_OS_WINDOWS
+ if (util::isWindowsLightTheme() && wasDarkTheme) {
+ qApp->setStyleSheet("");
+ QPalette palette(qApp->palette());
+ palette.setColor(QPalette::Link, Qt::blue);
+ palette.setColor(QPalette::LinkVisited, Qt::magenta);
+ qApp->setPalette(palette);
+ }
+#endif
+
if (!start_vmm)
#ifdef Q_OS_MACOS
qt_set_sequence_auto_mnemonic(false);
@@ -864,6 +876,10 @@ main(int argc, char *argv[])
/* Initialize the rendering window, or fullscreen. */
QTimer::singleShot(0, &app, [] {
+#ifdef Q_OS_WINDOWS
+ extern bool NewDarkMode;
+ NewDarkMode = util::isWindowsLightTheme();
+#endif
pc_reset_hard_init();
/* Set the PAUSE mode depending on the renderer. */
diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp
index c2fa75dff..4d9a267a5 100644
--- a/src/qt/qt_progsettings.cpp
+++ b/src/qt/qt_progsettings.cpp
@@ -96,8 +96,13 @@ ProgSettings::ProgSettings(QWidget *parent)
ui->checkBoxConfirmSave->setChecked(confirm_save);
ui->checkBoxConfirmHardReset->setChecked(confirm_reset);
+ ui->radioButtonSystem->setChecked(color_scheme == 0);
+ ui->radioButtonLight->setChecked(color_scheme == 1);
+ ui->radioButtonDark->setChecked(color_scheme == 2);
+
#ifndef Q_OS_WINDOWS
ui->checkBoxMultimediaKeys->setHidden(true);
+ ui->groupBox->setHidden(true);
#endif
}
@@ -111,6 +116,13 @@ ProgSettings::accept()
confirm_reset = ui->checkBoxConfirmHardReset->isChecked() ? 1 : 0;
inhibit_multimedia_keys = ui->checkBoxMultimediaKeys->isChecked() ? 1 : 0;
+ color_scheme = (ui->radioButtonSystem->isChecked()) ? 0 : (ui->radioButtonLight->isChecked() ? 1 : 2);
+
+#ifdef Q_OS_WINDOWS
+ extern void selectDarkMode();
+ selectDarkMode();
+#endif
+
loadTranslators(QCoreApplication::instance());
reloadStrings();
update_mouse_msg();
diff --git a/src/qt/qt_progsettings.ui b/src/qt/qt_progsettings.ui
index abaee5019..ca33726b1 100644
--- a/src/qt/qt_progsettings.ui
+++ b/src/qt/qt_progsettings.ui
@@ -7,7 +7,7 @@
0
0
458
- 391
+ 508
@@ -27,7 +27,7 @@
- QLayout::SetFixedSize
+ QLayout::SizeConstraint::SetFixedSize
-
@@ -36,6 +36,40 @@
+ -
+
+
+ Qt::Orientation::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Inhibit multimedia keys
+
+
+
+ -
+
+
+ Mouse sensitivity:
+
+
+
+ -
+
+
+ Default
+
+
+
-
@@ -48,30 +82,10 @@
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
+
-
+
- Default
-
-
-
- -
-
-
- Mouse sensitivity:
+ Ask for confirmation before saving settings
@@ -93,27 +107,7 @@
100
- Qt::Horizontal
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
- Default
+ Qt::Orientation::Horizontal
@@ -127,19 +121,25 @@
- -
-
+
-
+
- Inhibit multimedia keys
+ Default
- -
-
-
- Ask for confirmation before saving settings
+
-
+
+
+ Qt::Orientation::Horizontal
-
+
+
+ 40
+ 20
+
+
+
-
@@ -148,6 +148,16 @@
+ -
+
+
+ Qt::Orientation::Horizontal
+
+
+ QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok
+
+
+
-
@@ -155,14 +165,34 @@
- -
-
-
- Qt::Horizontal
-
-
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
-
+
+
+ Color scheme
+
+
-
+
+
+ System
+
+
+
+ -
+
+
+ Light
+
+
+
+ -
+
+
+ Dark
+
+
+
+
diff --git a/src/qt/qt_specifydimensions.cpp b/src/qt/qt_specifydimensions.cpp
index 4999c6a83..0b88e9b57 100644
--- a/src/qt/qt_specifydimensions.cpp
+++ b/src/qt/qt_specifydimensions.cpp
@@ -118,5 +118,7 @@ SpecifyDimensions::on_SpecifyDimensions_accepted()
+ main_window->menuBar()->height()
+ (main_window->statusBar()->height() * !hide_status_bar)
+ (main_window->ui->toolBar->height() * !hide_tool_bar));
+ window_w = ui->spinBoxWidth->value();
+ window_h = ui->spinBoxHeight->value();
}
}
diff --git a/src/qt/qt_util.cpp b/src/qt/qt_util.cpp
index 201b61b3f..a95226247 100644
--- a/src/qt/qt_util.cpp
+++ b/src/qt/qt_util.cpp
@@ -66,6 +66,10 @@ screenOfWidget(QWidget *widget)
bool
isWindowsLightTheme(void) {
+ if (color_scheme != 0) {
+ return (color_scheme == 1);
+ }
+
// based on https://stackoverflow.com/questions/51334674/how-to-detect-windows-10-light-dark-mode-in-win32-application
// The value is expected to be a REG_DWORD, which is a signed 32-bit little-endian
diff --git a/src/qt/qt_vmmanager_windarkmodefilter.cpp b/src/qt/qt_vmmanager_windarkmodefilter.cpp
index 195419ad9..76d4abdb1 100644
--- a/src/qt/qt_vmmanager_windarkmodefilter.cpp
+++ b/src/qt/qt_vmmanager_windarkmodefilter.cpp
@@ -52,7 +52,8 @@ WindowsDarkModeFilter::nativeEventFilter(const QByteArray &eventType, void *mess
if ((msg != nullptr) && (msg->message == WM_SETTINGCHANGE)) {
if ((((void *) msg->lParam) != nullptr) &&
- (wcscmp(L"ImmersiveColorSet", (wchar_t*)msg->lParam) == 0)) {
+ (wcscmp(L"ImmersiveColorSet", (wchar_t*)msg->lParam) == 0) &&
+ color_scheme == 0) {
bool OldDarkMode = NewDarkMode;
diff --git a/src/qt/qt_winrawinputfilter.cpp b/src/qt/qt_winrawinputfilter.cpp
index 9b7adce1d..9029f4fcd 100644
--- a/src/qt/qt_winrawinputfilter.cpp
+++ b/src/qt/qt_winrawinputfilter.cpp
@@ -74,7 +74,9 @@ extern void win_keyboard_handle(uint32_t scancode, int up, int e0, int e1);
#include "qt_util.hpp"
#include "ui_qt_mainwindow.h"
-static bool NewDarkMode = FALSE;
+bool NewDarkMode = FALSE;
+
+extern MainWindow* main_window;
struct
{
@@ -307,6 +309,56 @@ device_change(WPARAM wParam, LPARAM lParam)
}
}
+void
+selectDarkMode()
+{
+ bool OldDarkMode = NewDarkMode;
+
+ if (!util::isWindowsLightTheme()) {
+ QFile f(":qdarkstyle/dark/darkstyle.qss");
+
+ if (!f.exists())
+ printf("Unable to set stylesheet, file not found\n");
+ else {
+ f.open(QFile::ReadOnly | QFile::Text);
+ QTextStream ts(&f);
+ qApp->setStyleSheet(ts.readAll());
+ }
+ QPalette palette(qApp->palette());
+ palette.setColor(QPalette::Link, Qt::white);
+ palette.setColor(QPalette::LinkVisited, Qt::lightGray);
+ qApp->setPalette(palette);
+ NewDarkMode = TRUE;
+ } else {
+ qApp->setStyleSheet("");
+ QPalette palette(qApp->palette());
+ palette.setColor(QPalette::Link, Qt::blue);
+ palette.setColor(QPalette::LinkVisited, Qt::magenta);
+ qApp->setPalette(palette);
+ NewDarkMode = FALSE;
+ }
+
+ if (NewDarkMode != OldDarkMode)
+ QTimer::singleShot(1000, []() {
+ BOOL DarkMode = NewDarkMode;
+ DwmSetWindowAttribute((HWND) main_window->winId(),
+ DWMWA_USE_IMMERSIVE_DARK_MODE,
+ (LPCVOID) &DarkMode,
+ sizeof(DarkMode));
+
+ main_window->resizeContents(monitors[0].mon_scrnsz_x,
+ monitors[0].mon_scrnsz_y);
+
+ for (int i = 1; i < MONITORS_NUM; i++) {
+ auto mon = &(monitors[i]);
+
+ if ((main_window->renderers[i] != nullptr) && !main_window->renderers[i]->isHidden())
+ main_window->resizeContentsMonitor(mon->mon_scrnsz_x,
+ mon->mon_scrnsz_y, i);
+ }
+ });
+}
+
bool
WindowsRawInputFilter::nativeEventFilter(const QByteArray &eventType, void *message, result_t *result)
{
@@ -328,7 +380,8 @@ WindowsRawInputFilter::nativeEventFilter(const QByteArray &eventType, void *mess
return true;
case WM_SETTINGCHANGE:
if ((((void *) msg->lParam) != nullptr) &&
- (wcscmp(L"ImmersiveColorSet", (wchar_t*)msg->lParam) == 0)) {
+ (wcscmp(L"ImmersiveColorSet", (wchar_t*)msg->lParam) == 0) &&
+ color_scheme == 0) {
bool OldDarkMode = NewDarkMode;
#if 0