diff --git a/scwx-qt/scwx-qt.qrc b/scwx-qt/scwx-qt.qrc index 63ad1793..fbe846ca 100644 --- a/scwx-qt/scwx-qt.qrc +++ b/scwx-qt/scwx-qt.qrc @@ -70,7 +70,13 @@ res/palettes/wct/SW.pal res/palettes/wct/VIL.pal res/palettes/wct/ZDR.pal + res/qt6ct_colors/airy.conf res/qt6ct_colors/darker.conf + res/qt6ct_colors/dusk.conf + res/qt6ct_colors/ia_ora.conf + res/qt6ct_colors/sand.conf + res/qt6ct_colors/simple.conf + res/qt6ct_colors/waves.conf res/textures/lines/default-1x7.png res/textures/lines/test-pattern.png res/textures/images/cursor-17.png diff --git a/scwx-qt/source/scwx/qt/main/main.cpp b/scwx-qt/source/scwx/qt/main/main.cpp index 602a5fe8..11b7f098 100644 --- a/scwx-qt/source/scwx/qt/main/main.cpp +++ b/scwx-qt/source/scwx/qt/main/main.cpp @@ -166,10 +166,24 @@ static void ConfigureTheme(const std::vector& args) QGuiApplication::styleHints()->setColorScheme(qtColorScheme); - if (uiStyle == scwx::qt::types::UiStyle::FusionQt6Ct) + std::optional paletteFile = + scwx::qt::types::GetQtPaletteFile(uiStyle); + if (paletteFile) { - QPalette palette = Qt6CT::loadColorScheme(":res/qt6ct_colors/darker.conf", - QApplication::style()->standardPalette());; + QPalette defaultPalette = QApplication::style()->standardPalette(); + QPalette palette = + Qt6CT::loadColorScheme(QString::fromStdString(*paletteFile), + defaultPalette); + + if (defaultPalette == palette) + { + logger_->warn("Failed to load palette file '{}'", *paletteFile); + } + else + { + logger_->info("Loaded palette file '{}'", *paletteFile); + } + QApplication::setPalette(palette); } } diff --git a/scwx-qt/source/scwx/qt/types/qt_types.cpp b/scwx-qt/source/scwx/qt/types/qt_types.cpp index 03d58a75..5e5a96a7 100644 --- a/scwx-qt/source/scwx/qt/types/qt_types.cpp +++ b/scwx-qt/source/scwx/qt/types/qt_types.cpp @@ -15,7 +15,12 @@ static const std::unordered_map qtStyleName_ { {UiStyle::Fusion, "Fusion"}, {UiStyle::FusionLight, "Fusion"}, {UiStyle::FusionDark, "Fusion"}, - {UiStyle::FusionQt6Ct, "Fusion"}, + {UiStyle::FusionAiry, "Fusion"}, + {UiStyle::FusionDarker, "Fusion"}, + {UiStyle::FusionDusk, "Fusion"}, + {UiStyle::FusionIaOra, "Fusion"}, + {UiStyle::FusionSand, "Fusion"}, + {UiStyle::FusionWaves, "Fusion"}, {UiStyle::Unknown, "?"}}; static const std::unordered_map uiStyleName_ { @@ -23,7 +28,12 @@ static const std::unordered_map uiStyleName_ { {UiStyle::Fusion, "Fusion"}, {UiStyle::FusionLight, "Fusion Light"}, {UiStyle::FusionDark, "Fusion Dark"}, - {UiStyle::FusionQt6Ct, "Fusion with qt6ct Palette"}, + {UiStyle::FusionAiry, "Fusion Airy"}, + {UiStyle::FusionDarker, "Fusion Darker"}, + {UiStyle::FusionDusk, "Fusion Dusk"}, + {UiStyle::FusionIaOra, "Fusion IA Ora"}, + {UiStyle::FusionSand, "Fusion Sand"}, + {UiStyle::FusionWaves, "Fusion Waves"}, {UiStyle::Unknown, "?"}}; static const std::unordered_map qtColorSchemeMap_ { @@ -31,9 +41,22 @@ static const std::unordered_map qtColorSchemeMap_ { {UiStyle::Fusion, Qt::ColorScheme::Unknown}, {UiStyle::FusionLight, Qt::ColorScheme::Light}, {UiStyle::FusionDark, Qt::ColorScheme::Dark}, - {UiStyle::FusionQt6Ct, Qt::ColorScheme::Unknown}, + {UiStyle::FusionAiry, Qt::ColorScheme::Unknown}, + {UiStyle::FusionDarker, Qt::ColorScheme::Unknown}, + {UiStyle::FusionDusk, Qt::ColorScheme::Unknown}, + {UiStyle::FusionIaOra, Qt::ColorScheme::Unknown}, + {UiStyle::FusionSand, Qt::ColorScheme::Unknown}, + {UiStyle::FusionWaves, Qt::ColorScheme::Unknown}, {UiStyle::Unknown, Qt::ColorScheme::Unknown}}; +static const std::unordered_map paletteFile_ { + {UiStyle::FusionAiry, ":res/qt6ct_colors/airy.conf"}, + {UiStyle::FusionDarker, ":res/qt6ct_colors/darker.conf"}, + {UiStyle::FusionDusk, ":res/qt6ct_colors/dusk.conf"}, + {UiStyle::FusionIaOra, ":res/qt6ct_colors/ia_ora.conf"}, + {UiStyle::FusionSand, ":res/qt6ct_colors/sand.conf"}, + {UiStyle::FusionWaves, ":res/qt6ct_colors/waves.conf"}}; + SCWX_GET_ENUM(UiStyle, GetUiStyle, uiStyleName_) Qt::ColorScheme GetQtColorScheme(UiStyle uiStyle) @@ -46,6 +69,16 @@ std::string GetQtStyleName(UiStyle uiStyle) return qtStyleName_.at(uiStyle); } +std::optional GetQtPaletteFile(UiStyle uiStyle) +{ + if (paletteFile_.contains(uiStyle)) + { + return paletteFile_.at(uiStyle); + } + + return std::nullopt; +} + std::string GetUiStyleName(UiStyle uiStyle) { return uiStyleName_.at(uiStyle); diff --git a/scwx-qt/source/scwx/qt/types/qt_types.hpp b/scwx-qt/source/scwx/qt/types/qt_types.hpp index a9266c8b..9bb7ed5d 100644 --- a/scwx-qt/source/scwx/qt/types/qt_types.hpp +++ b/scwx-qt/source/scwx/qt/types/qt_types.hpp @@ -2,6 +2,7 @@ #include +#include #include #include @@ -26,14 +27,21 @@ enum class UiStyle Fusion, FusionLight, FusionDark, - FusionQt6Ct, + FusionAiry, + FusionDarker, + FusionDusk, + FusionIaOra, + FusionSand, + FusionWaves, Unknown }; -typedef scwx::util::Iterator +typedef scwx::util::Iterator UiStyleIterator; -Qt::ColorScheme GetQtColorScheme(UiStyle uiStyle); -std::string GetQtStyleName(UiStyle uiStyle); +Qt::ColorScheme GetQtColorScheme(UiStyle uiStyle); +std::string GetQtStyleName(UiStyle uiStyle); + +std::optional GetQtPaletteFile(UiStyle uiStyle); UiStyle GetUiStyle(const std::string& name); std::string GetUiStyleName(UiStyle uiStyle);