Compare commits

...

3 Commits

Author SHA1 Message Date
cristian64
b7233e9d1d DolphinQt: Revise built-in styles and enable in all platforms.
The built-in styles have been borrowed from the Dolphin Memory Engine
buddy application.

**Dark style on Windows:**
| Dark (current) | Dark 2 (new) |
| -------------- | ------------ |
| <img width="1920" height="1080" alt="[Dolphin Emulator] Legacy Dark style on Windows" title="[Dolphin Emulator] Legacy Dark style on Windows" src="https://github.com/user-attachments/assets/1a6771da-45fb-4eac-b51b-331e063dffb9" /> | <img width="1920" height="1080" alt="[Dolphin Emulator] Dark style on Windows" title="[Dolphin Emulator] Dark style on Windows" src="https://github.com/user-attachments/assets/76f19a14-d6ce-489e-ac92-4ab12942cc43" /> |

All styles are now available in all platforms:

- System
- Light
- Dark Gray
- Dark
- Dark 2

**New built-in styles on Windows:**
| System | Light | Dark Gray | Dark 2 |
| ------ | ----- | --------- | ------ |
| <img width="1920" height="1080" alt="[Dolphin Emulator] System style on Windows" title="[Dolphin Emulator] System style on Windows" src="https://github.com/user-attachments/assets/cd5a52b6-6fd6-4ffa-a1d7-40a2714b399a" /> | <img width="1920" height="1080" alt="[Dolphin Emulator] Light style on Windows" title="[Dolphin Emulator] Light style on Windows" src="https://github.com/user-attachments/assets/c106879c-ad34-4d60-9f99-c9aecfeeb290" /> | <img width="1920" height="1080" alt="[Dolphin Emulator] Dark Gray style on Windows" title="[Dolphin Emulator] Dark Gray style on Windows" src="https://github.com/user-attachments/assets/6bd61b7d-a818-4803-8033-13fd0cab3b5c" /> | <img width="1920" height="1080" alt="[Dolphin Emulator] Dark 2 style on Windows" title="[Dolphin Emulator] Dark 2 style on Windows" src="https://github.com/user-attachments/assets/76f19a14-d6ce-489e-ac92-4ab12942cc43" /> |

**New built-in styles on KDE:**
| System | Light | Dark Gray | Dark 2 |
| ------ | ----- | --------- | ------ |
| <img width="1920" height="1080" alt="[Dolphin Emulator] System style on KDE" title="[Dolphin Emulator] System style on KDE" src="https://github.com/user-attachments/assets/7ed0d88d-209d-4912-84c1-2ed7f3c83a71" /> | <img width="1920" height="1080" alt="[Dolphin Emulator] Light style on KDE" title="[Dolphin Emulator] Light style on KDE" src="https://github.com/user-attachments/assets/27dfe808-aa95-412a-b4f5-ca4ff469818a" /> | <img width="1920" height="1080" alt="[Dolphin Emulator] Dark Gray style on KDE" title="[Dolphin Emulator] Dark Gray style on KDE" src="https://github.com/user-attachments/assets/4f6fbdf1-889f-498e-b32e-c53628d21b12" /> | <img width="1920" height="1080" alt="[Dolphin Emulator] Dark 2 style on KDE" title="[Dolphin Emulator] Dark 2 style on KDE" src="https://github.com/user-attachments/assets/22ddaac3-1bfd-4ffb-927c-f73e9a374a0b" /> |

**New built-in styles on Cinnamon:**
| System | Light | Dark Gray | Dark 2 |
| ------ | ----- | --------- | ------ |
| <img width="1920" height="1080" alt="[Dolphin Emulator] System style on Cinnamon" title="[Dolphin Emulator] System style on Cinnamon" src="https://github.com/user-attachments/assets/ba07aef5-ac1a-413d-97e9-f679b25218c5" /> | <img width="1920" height="1080" alt="[Dolphin Emulator] Light style on Cinnamon" title="[Dolphin Emulator] Light style on Cinnamon" src="https://github.com/user-attachments/assets/f2627ea4-77a3-4eea-b37a-dc2abcf13d42" /> | <img width="1920" height="1080" alt="[Dolphin Emulator] Dark Gray style on Cinnamon" title="[Dolphin Emulator] Dark Gray style on Cinnamon" src="https://github.com/user-attachments/assets/d4d779e8-8ef5-49a3-997d-991b2e46cafa" /> | <img width="1920" height="1080" alt="[Dolphin Emulator] Dark 2 style on Cinnamon" title="[Dolphin Emulator] Dark 2 style on Cinnamon" src="https://github.com/user-attachments/assets/096d9162-5abe-4bb7-8951-96271cb40019" /> |
2025-08-31 21:03:47 +01:00
Tilka
033a0540f7
Merge pull request #13899 from SuperSamus/patch-cheats-osd
PatchEngine: OSD message showing number of enabled patches and cheats
2025-08-31 00:27:23 +01:00
Martino Fontana
64a20c74fc PatchEngine: OSD message showing number of enabled patches and cheats 2025-08-30 16:51:51 +02:00
9 changed files with 212 additions and 46 deletions

View File

@ -174,6 +174,15 @@ void AddCode(ARCode code)
}
}
size_t CountEnabledCodes()
{
if (!Config::AreCheatsEnabled())
return 0;
std::lock_guard guard(s_lock);
return s_active_codes.size();
}
void LoadAndApplyCodes(const Common::IniFile& global_ini, const Common::IniFile& local_ini,
const std::string& game_id, u16 revision)
{

View File

@ -50,6 +50,7 @@ void SetSyncedCodesAsActive();
void UpdateSyncedCodes(std::span<const ARCode> codes);
std::vector<ARCode> ApplyAndReturnCodes(std::span<const ARCode> codes);
void AddCode(ARCode new_code);
size_t CountEnabledCodes();
void LoadAndApplyCodes(const Common::IniFile& global_ini, const Common::IniFile& local_ini,
const std::string& game_id, u16 revision);

View File

@ -50,6 +50,15 @@ static std::vector<GeckoCode> s_active_codes;
static std::vector<GeckoCode> s_synced_codes;
static std::mutex s_active_codes_lock;
size_t CountEnabledCodes()
{
if (!Config::AreCheatsEnabled())
return 0;
std::lock_guard guard(s_active_codes_lock);
return s_active_codes.size();
}
void SetActiveCodes(std::span<const GeckoCode> gcodes, const std::string& game_id, u16 revision)
{
std::lock_guard lk(s_active_codes_lock);

View File

@ -60,6 +60,7 @@ constexpr u32 HLE_TRAMPOLINE_ADDRESS = INSTALLER_END_ADDRESS - 4;
// preserve the emulation performance.
constexpr u32 MAGIC_GAMEID = 0xD01F1BAD;
size_t CountEnabledCodes();
void SetActiveCodes(std::span<const GeckoCode> gcodes, const std::string& game_id, u16 revision);
void SetSyncedCodesAsActive();
void UpdateSyncedCodes(std::span<const GeckoCode> gcodes);

View File

@ -35,6 +35,7 @@
#include "Core/PowerPC/MMU.h"
#include "Core/PowerPC/PowerPC.h"
#include "Core/System.h"
#include "VideoCommon/OnScreenDisplay.h"
namespace PatchEngine
{
@ -200,6 +201,18 @@ void LoadPatches()
ActionReplay::LoadAndApplyCodes(globalIni, localIni, sconfig.GetGameID(),
sconfig.GetRevision());
}
const size_t enabled_patch_count =
std::ranges::count_if(s_on_frame, [](Patch patch) { return patch.enabled; });
if (enabled_patch_count > 0)
{
OSD::AddMessage(fmt::format("{} game patch(es) enabled", enabled_patch_count),
OSD::Duration::NORMAL);
}
const size_t enabled_cheat_count = ActionReplay::CountEnabledCodes() + Gecko::CountEnabledCodes();
if (enabled_cheat_count > 0)
OSD::AddMessage(fmt::format("{} cheat(s) enabled", enabled_cheat_count), OSD::Duration::NORMAL);
}
static void ApplyPatches(const Core::CPUThreadGuard& guard, const std::vector<Patch>& patches)

View File

@ -402,11 +402,9 @@ add_executable(dolphin-emu
WiiUpdate.h
)
if (WIN32)
target_sources(dolphin-emu PRIVATE
Styles/Dark/dark.qrc
)
endif()
target_sources(dolphin-emu PRIVATE
Styles/Dark/dark.qrc
)
if (NOT WIN32)
target_sources(dolphin-emu PRIVATE

View File

@ -160,35 +160,151 @@ bool Settings::IsThemeDark()
void Settings::ApplyStyle()
{
const StyleType style_type = GetStyleType();
const QString stylesheet_name = GetUserStyleName();
QString stylesheet_contents;
// If we haven't found one, we continue with an empty (default) style
if (!stylesheet_name.isEmpty() && style_type == StyleType::User)
{
// Load custom user stylesheet
QDir directory = QDir(QString::fromStdString(File::GetUserPath(D_STYLES_IDX)));
QFile stylesheet(directory.filePath(stylesheet_name));
if (stylesheet.open(QFile::ReadOnly))
stylesheet_contents = QString::fromUtf8(stylesheet.readAll().data());
const bool use_fusion{style_type == StyleType::Light || style_type == StyleType::DarkGray ||
style_type == StyleType::Dark2};
static const QString s_initial_style_name{QApplication::style()->name()};
const QString style_name{use_fusion ? QStringLiteral("fusion") : s_initial_style_name};
if (QApplication::style()->name() != style_name)
QApplication::setStyle(style_name);
}
#ifdef _WIN32
// Unlike other OSes we don't automatically get a default dark theme on Windows.
// We manually load a dark palette for our included "(Dark)" style,
// and for *any* external style when the system is in "Dark" mode.
// Unfortunately it doesn't seem trivial to load a palette based on the stylesheet itself.
if (style_type == StyleType::Dark || (style_type != StyleType::Light && IsSystemDark()))
{
if (stylesheet_contents.isEmpty())
{
QFile file(QStringLiteral(":/dolphin_dark_win/dark.qss"));
if (file.open(QFile::ReadOnly))
stylesheet_contents = QString::fromUtf8(file.readAll().data());
}
QString style_sheet;
QPalette palette;
QPalette palette = qApp->style()->standardPalette();
if (style_type == StyleType::Light)
{
palette.setColor(QPalette::All, QPalette::Window, QColor(239, 239, 239));
palette.setColor(QPalette::Disabled, QPalette::Window, QColor(239, 239, 239));
palette.setColor(QPalette::All, QPalette::WindowText, QColor(0, 0, 0));
palette.setColor(QPalette::Disabled, QPalette::WindowText, QColor(190, 190, 190));
palette.setColor(QPalette::All, QPalette::Base, QColor(255, 255, 255));
palette.setColor(QPalette::Disabled, QPalette::Base, QColor(239, 239, 239));
palette.setColor(QPalette::All, QPalette::AlternateBase, QColor(247, 247, 247));
palette.setColor(QPalette::Disabled, QPalette::AlternateBase, QColor(247, 247, 247));
palette.setColor(QPalette::All, QPalette::ToolTipBase, QColor(255, 255, 220));
palette.setColor(QPalette::Disabled, QPalette::ToolTipBase, QColor(255, 255, 220));
palette.setColor(QPalette::All, QPalette::ToolTipText, QColor(0, 0, 0));
palette.setColor(QPalette::Disabled, QPalette::ToolTipText, QColor(0, 0, 0));
palette.setColor(QPalette::All, QPalette::PlaceholderText, QColor(119, 119, 119));
palette.setColor(QPalette::Disabled, QPalette::PlaceholderText, QColor(119, 119, 119));
palette.setColor(QPalette::All, QPalette::Text, QColor(0, 0, 0));
palette.setColor(QPalette::Disabled, QPalette::Text, QColor(190, 190, 190));
palette.setColor(QPalette::All, QPalette::Button, QColor(239, 239, 239));
palette.setColor(QPalette::Disabled, QPalette::Button, QColor(239, 239, 239));
palette.setColor(QPalette::All, QPalette::ButtonText, QColor(0, 0, 0));
palette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(190, 190, 190));
palette.setColor(QPalette::All, QPalette::BrightText, QColor(255, 255, 255));
palette.setColor(QPalette::Disabled, QPalette::BrightText, QColor(255, 255, 255));
palette.setColor(QPalette::All, QPalette::Light, QColor(255, 255, 255));
palette.setColor(QPalette::Disabled, QPalette::Light, QColor(255, 255, 255));
palette.setColor(QPalette::All, QPalette::Midlight, QColor(202, 202, 202));
palette.setColor(QPalette::Disabled, QPalette::Midlight, QColor(202, 202, 202));
palette.setColor(QPalette::All, QPalette::Dark, QColor(159, 159, 159));
palette.setColor(QPalette::Disabled, QPalette::Dark, QColor(190, 190, 190));
palette.setColor(QPalette::All, QPalette::Mid, QColor(184, 184, 184));
palette.setColor(QPalette::Disabled, QPalette::Mid, QColor(184, 184, 184));
palette.setColor(QPalette::All, QPalette::Shadow, QColor(118, 118, 118));
palette.setColor(QPalette::Disabled, QPalette::Shadow, QColor(177, 177, 177));
palette.setColor(QPalette::All, QPalette::Highlight, QColor(48, 140, 198));
palette.setColor(QPalette::Disabled, QPalette::Highlight, QColor(145, 145, 145));
palette.setColor(QPalette::All, QPalette::HighlightedText, QColor(255, 255, 255));
palette.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor(255, 255, 255));
palette.setColor(QPalette::All, QPalette::Link, QColor(0, 0, 255));
palette.setColor(QPalette::Disabled, QPalette::Link, QColor(0, 0, 255));
palette.setColor(QPalette::All, QPalette::LinkVisited, QColor(255, 0, 255));
palette.setColor(QPalette::Disabled, QPalette::LinkVisited, QColor(255, 0, 255));
}
else if (style_type == StyleType::DarkGray)
{
palette.setColor(QPalette::All, QPalette::Window, QColor(50, 50, 50));
palette.setColor(QPalette::Disabled, QPalette::Window, QColor(55, 55, 55));
palette.setColor(QPalette::All, QPalette::WindowText, QColor(200, 200, 200));
palette.setColor(QPalette::Disabled, QPalette::WindowText, QColor(108, 108, 108));
palette.setColor(QPalette::All, QPalette::Base, QColor(25, 25, 25));
palette.setColor(QPalette::Disabled, QPalette::Base, QColor(30, 30, 30));
palette.setColor(QPalette::All, QPalette::AlternateBase, QColor(38, 38, 38));
palette.setColor(QPalette::Disabled, QPalette::AlternateBase, QColor(42, 42, 42));
palette.setColor(QPalette::All, QPalette::ToolTipBase, QColor(45, 45, 45));
palette.setColor(QPalette::Disabled, QPalette::ToolTipBase, QColor(45, 45, 45));
palette.setColor(QPalette::All, QPalette::ToolTipText, QColor(200, 200, 200));
palette.setColor(QPalette::Disabled, QPalette::ToolTipText, QColor(200, 200, 200));
palette.setColor(QPalette::All, QPalette::PlaceholderText, QColor(90, 90, 90));
palette.setColor(QPalette::Disabled, QPalette::PlaceholderText, QColor(90, 90, 90));
palette.setColor(QPalette::All, QPalette::Text, QColor(200, 200, 200));
palette.setColor(QPalette::Disabled, QPalette::Text, QColor(108, 108, 108));
palette.setColor(QPalette::All, QPalette::Button, QColor(54, 54, 54));
palette.setColor(QPalette::Disabled, QPalette::Button, QColor(54, 54, 54));
palette.setColor(QPalette::All, QPalette::ButtonText, QColor(200, 200, 200));
palette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(108, 108, 108));
palette.setColor(QPalette::All, QPalette::BrightText, QColor(75, 75, 75));
palette.setColor(QPalette::Disabled, QPalette::BrightText, QColor(255, 255, 255));
palette.setColor(QPalette::All, QPalette::Light, QColor(26, 26, 26));
palette.setColor(QPalette::Disabled, QPalette::Light, QColor(26, 26, 26));
palette.setColor(QPalette::All, QPalette::Midlight, QColor(40, 40, 40));
palette.setColor(QPalette::Disabled, QPalette::Midlight, QColor(40, 40, 40));
palette.setColor(QPalette::All, QPalette::Dark, QColor(108, 108, 108));
palette.setColor(QPalette::Disabled, QPalette::Dark, QColor(108, 108, 108));
palette.setColor(QPalette::All, QPalette::Mid, QColor(71, 71, 71));
palette.setColor(QPalette::Disabled, QPalette::Mid, QColor(71, 71, 71));
palette.setColor(QPalette::All, QPalette::Shadow, QColor(25, 25, 25));
palette.setColor(QPalette::Disabled, QPalette::Shadow, QColor(37, 37, 37));
palette.setColor(QPalette::All, QPalette::Highlight, QColor(45, 140, 225));
palette.setColor(QPalette::Disabled, QPalette::Highlight, QColor(45, 140, 225).darker());
palette.setColor(QPalette::All, QPalette::HighlightedText, QColor(255, 255, 255));
palette.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor(40, 40, 40));
palette.setColor(QPalette::All, QPalette::Link, QColor(40, 130, 220));
palette.setColor(QPalette::Disabled, QPalette::Link, QColor(40, 130, 220).darker());
palette.setColor(QPalette::All, QPalette::LinkVisited, QColor(110, 70, 150));
palette.setColor(QPalette::Disabled, QPalette::LinkVisited, QColor(110, 70, 150).darker());
}
else if (style_type == StyleType::Dark2)
{
palette.setColor(QPalette::All, QPalette::Window, QColor(22, 22, 22));
palette.setColor(QPalette::Disabled, QPalette::Window, QColor(30, 30, 30));
palette.setColor(QPalette::All, QPalette::WindowText, QColor(180, 180, 180));
palette.setColor(QPalette::Disabled, QPalette::WindowText, QColor(90, 90, 90));
palette.setColor(QPalette::All, QPalette::Base, QColor(35, 35, 35));
palette.setColor(QPalette::Disabled, QPalette::Base, QColor(30, 30, 30));
palette.setColor(QPalette::All, QPalette::AlternateBase, QColor(40, 40, 40));
palette.setColor(QPalette::Disabled, QPalette::AlternateBase, QColor(35, 35, 35));
palette.setColor(QPalette::All, QPalette::ToolTipBase, QColor(0, 0, 0));
palette.setColor(QPalette::Disabled, QPalette::ToolTipBase, QColor(0, 0, 0));
palette.setColor(QPalette::All, QPalette::ToolTipText, QColor(170, 170, 170));
palette.setColor(QPalette::Disabled, QPalette::ToolTipText, QColor(170, 170, 170));
palette.setColor(QPalette::All, QPalette::PlaceholderText, QColor(100, 100, 100));
palette.setColor(QPalette::Disabled, QPalette::PlaceholderText, QColor(100, 100, 100));
palette.setColor(QPalette::All, QPalette::Text, QColor(200, 200, 200));
palette.setColor(QPalette::Disabled, QPalette::Text, QColor(90, 90, 90));
palette.setColor(QPalette::All, QPalette::Button, QColor(30, 30, 30));
palette.setColor(QPalette::Disabled, QPalette::Button, QColor(20, 20, 20));
palette.setColor(QPalette::All, QPalette::ButtonText, QColor(180, 180, 180));
palette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(90, 90, 90));
palette.setColor(QPalette::All, QPalette::BrightText, QColor(75, 75, 75));
palette.setColor(QPalette::Disabled, QPalette::BrightText, QColor(255, 255, 255));
palette.setColor(QPalette::All, QPalette::Light, QColor(0, 0, 0));
palette.setColor(QPalette::Disabled, QPalette::Light, QColor(0, 0, 0));
palette.setColor(QPalette::All, QPalette::Midlight, QColor(40, 40, 40));
palette.setColor(QPalette::Disabled, QPalette::Midlight, QColor(40, 40, 40));
palette.setColor(QPalette::All, QPalette::Dark, QColor(90, 90, 90));
palette.setColor(QPalette::Disabled, QPalette::Dark, QColor(90, 90, 90));
palette.setColor(QPalette::All, QPalette::Mid, QColor(60, 60, 60));
palette.setColor(QPalette::Disabled, QPalette::Mid, QColor(60, 60, 60));
palette.setColor(QPalette::All, QPalette::Shadow, QColor(10, 10, 10));
palette.setColor(QPalette::Disabled, QPalette::Shadow, QColor(20, 20, 20));
palette.setColor(QPalette::All, QPalette::Highlight, QColor(35, 130, 200));
palette.setColor(QPalette::Disabled, QPalette::Highlight, QColor(35, 130, 200).darker());
palette.setColor(QPalette::All, QPalette::HighlightedText, QColor(240, 240, 240));
palette.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor(35, 35, 35));
palette.setColor(QPalette::All, QPalette::Link, QColor(40, 130, 220));
palette.setColor(QPalette::Disabled, QPalette::Link, QColor(40, 130, 220).darker());
palette.setColor(QPalette::All, QPalette::LinkVisited, QColor(110, 70, 150));
palette.setColor(QPalette::Disabled, QPalette::LinkVisited, QColor(110, 70, 150).darker());
}
else if (style_type == StyleType::Dark)
{
palette = qApp->style()->standardPalette();
palette.setColor(QPalette::Window, QColor(32, 32, 32));
palette.setColor(QPalette::WindowText, QColor(220, 220, 220));
palette.setColor(QPalette::Base, QColor(32, 32, 32));
@ -202,7 +318,18 @@ void Settings::ApplyStyle()
palette.setColor(QPalette::HighlightedText, QColor(255, 255, 255));
palette.setColor(QPalette::Link, QColor(100, 160, 220));
palette.setColor(QPalette::LinkVisited, QColor(100, 160, 220));
qApp->setPalette(palette);
QFile file(QStringLiteral(":/dolphin_dark_win/dark.qss"));
if (file.open(QFile::ReadOnly))
style_sheet = QString::fromUtf8(file.readAll().data());
}
else if (style_type == StyleType::User)
{
const QString stylesheet_name{GetUserStyleName()};
const QDir directory(QString::fromStdString(File::GetUserPath(D_STYLES_IDX)));
QFile stylesheet(directory.filePath(stylesheet_name));
if (stylesheet.open(QFile::ReadOnly))
style_sheet = QString::fromUtf8(stylesheet.readAll().data());
}
else
{
@ -210,12 +337,12 @@ void Settings::ApplyStyle()
if (s_default_palette)
qApp->setPalette(*s_default_palette);
}
#endif
// Define tooltips style if not already defined
if (!stylesheet_contents.contains(QStringLiteral("QToolTip"), Qt::CaseSensitive))
if (!style_sheet.contains(QStringLiteral("QToolTip")))
{
const QPalette& palette = qApp->palette();
const int tool_tip_padding{QFontMetrics(QFont()).height() / 3};
QColor window_color;
QColor text_color;
QColor unused_text_emphasis_color;
@ -223,16 +350,24 @@ void Settings::ApplyStyle()
GetToolTipStyle(window_color, text_color, unused_text_emphasis_color, border_color, palette,
palette);
const auto tooltip_stylesheet =
QStringLiteral("QToolTip { background-color: #%1; color: #%2; padding: 8px; "
"border: 1px; border-style: solid; border-color: #%3; }")
.arg(window_color.rgba(), 0, 16)
.arg(text_color.rgba(), 0, 16)
.arg(border_color.rgba(), 0, 16);
stylesheet_contents.append(QStringLiteral("%1").arg(tooltip_stylesheet));
const QString tool_tip_style_sheet{QStringLiteral(R"(
QToolTip {
padding: %1px;
color: %2;
border: 1px solid %3;
background: %4;
}
)")
.arg(tool_tip_padding)
.arg(text_color.name())
.arg(border_color.name())
.arg(window_color.name())};
style_sheet += tool_tip_style_sheet;
}
qApp->setStyleSheet(stylesheet_contents);
qApp->setPalette(palette);
qApp->setStyleSheet(style_sheet);
}
Settings::StyleType Settings::GetStyleType() const

View File

@ -66,9 +66,11 @@ public:
Light = 1,
Dark = 2,
User = 3,
DarkGray = 4,
Dark2 = 5,
MinValue = 0,
MaxValue = 3,
MaxValue = 5,
};
void SetStyleType(StyleType type);

View File

@ -150,12 +150,10 @@ void InterfacePane::CreateUI()
auto userstyle_search_results = Common::DoFileSearch({File::GetUserPath(D_STYLES_IDX)});
m_combobox_userstyle->addItem(tr("(System)"), static_cast<int>(Settings::StyleType::System));
// TODO: Support forcing light/dark on other OSes too.
#ifdef _WIN32
m_combobox_userstyle->addItem(tr("(Light)"), static_cast<int>(Settings::StyleType::Light));
m_combobox_userstyle->addItem(tr("(Dark Gray)"), static_cast<int>(Settings::StyleType::DarkGray));
m_combobox_userstyle->addItem(tr("(Dark)"), static_cast<int>(Settings::StyleType::Dark));
#endif
m_combobox_userstyle->addItem(tr("(Dark 2)"), static_cast<int>(Settings::StyleType::Dark2));
for (const std::string& path : userstyle_search_results)
{