Add Fusion Light and Fusion Dark styles

This commit is contained in:
Dan Paulat 2024-10-17 06:17:27 -05:00
parent e9ee5c6911
commit 9ee6e2ee25
3 changed files with 58 additions and 30 deletions

View file

@ -25,11 +25,13 @@
#include <fmt/format.h> #include <fmt/format.h>
#include <QApplication> #include <QApplication>
#include <QStandardPaths> #include <QStandardPaths>
#include <QStyleHints>
#include <QTranslator> #include <QTranslator>
static const std::string logPrefix_ = "scwx::main"; static const std::string logPrefix_ = "scwx::main";
static const auto logger_ = scwx::util::Logger::Create(logPrefix_); static const auto logger_ = scwx::util::Logger::Create(logPrefix_);
static void ConfigureTheme(const std::vector<std::string>& args);
static void OverrideDefaultStyle(const std::vector<std::string>& args); static void OverrideDefaultStyle(const std::vector<std::string>& args);
int main(int argc, char* argv[]) int main(int argc, char* argv[])
@ -103,18 +105,7 @@ int main(int argc, char* argv[])
scwx::qt::manager::ResourceManager::Initialize(); scwx::qt::manager::ResourceManager::Initialize();
// Theme // Theme
auto uiStyle = scwx::qt::types::GetUiStyle( ConfigureTheme(args);
scwx::qt::settings::GeneralSettings::Instance().theme().GetValue());
if (uiStyle == scwx::qt::types::UiStyle::Default)
{
OverrideDefaultStyle(args);
}
else
{
QApplication::setStyle(
QString::fromStdString(scwx::qt::types::GetUiStyleName(uiStyle)));
}
// Run initial setup if required // Run initial setup if required
if (scwx::qt::ui::setup::SetupWizard::IsSetupRequired()) if (scwx::qt::ui::setup::SetupWizard::IsSetupRequired())
@ -152,6 +143,27 @@ int main(int argc, char* argv[])
return result; return result;
} }
static void ConfigureTheme(const std::vector<std::string>& args)
{
auto& generalSettings = scwx::qt::settings::GeneralSettings::Instance();
auto uiStyle =
scwx::qt::types::GetUiStyle(generalSettings.theme().GetValue());
auto qtColorScheme = scwx::qt::types::GetQtColorScheme(uiStyle);
if (uiStyle == scwx::qt::types::UiStyle::Default)
{
OverrideDefaultStyle(args);
}
else
{
QApplication::setStyle(
QString::fromStdString(scwx::qt::types::GetQtStyleName(uiStyle)));
}
QGuiApplication::styleHints()->setColorScheme(qtColorScheme);
}
static void static void
OverrideDefaultStyle([[maybe_unused]] const std::vector<std::string>& args) OverrideDefaultStyle([[maybe_unused]] const std::vector<std::string>& args)
{ {

View file

@ -1,4 +1,5 @@
#include <scwx/qt/types/qt_types.hpp> #include <scwx/qt/types/qt_types.hpp>
#include <scwx/util/enum.hpp>
#include <boost/algorithm/string.hpp> #include <boost/algorithm/string.hpp>
@ -9,27 +10,37 @@ namespace qt
namespace types namespace types
{ {
static const std::unordered_map<UiStyle, std::string> qtStyleName_ {
{UiStyle::Default, "Default"},
{UiStyle::Fusion, "Fusion"},
{UiStyle::FusionLight, "Fusion"},
{UiStyle::FusionDark, "Fusion"},
{UiStyle::Unknown, "?"}};
static const std::unordered_map<UiStyle, std::string> uiStyleName_ { static const std::unordered_map<UiStyle, std::string> uiStyleName_ {
{UiStyle::Default, "Default"}, {UiStyle::Default, "Default"},
{UiStyle::Fusion, "Fusion"}, {UiStyle::Fusion, "Fusion"},
{UiStyle::FusionLight, "Fusion Light"},
{UiStyle::FusionDark, "Fusion Dark"},
{UiStyle::Unknown, "?"}}; {UiStyle::Unknown, "?"}};
UiStyle GetUiStyle(const std::string& name) static const std::unordered_map<UiStyle, Qt::ColorScheme> qtColorSchemeMap_ {
{ {UiStyle::Default, Qt::ColorScheme::Unknown},
auto result = {UiStyle::Fusion, Qt::ColorScheme::Unknown},
std::find_if(uiStyleName_.cbegin(), {UiStyle::FusionLight, Qt::ColorScheme::Light},
uiStyleName_.cend(), {UiStyle::FusionDark, Qt::ColorScheme::Dark},
[&](const std::pair<UiStyle, std::string>& pair) -> bool {UiStyle::Unknown, Qt::ColorScheme::Unknown}};
{ return boost::iequals(pair.second, name); });
if (result != uiStyleName_.cend()) SCWX_GET_ENUM(UiStyle, GetUiStyle, uiStyleName_)
{
return result->first; Qt::ColorScheme GetQtColorScheme(UiStyle uiStyle)
} {
else return qtColorSchemeMap_.at(uiStyle);
{ }
return UiStyle::Unknown;
} std::string GetQtStyleName(UiStyle uiStyle)
{
return qtStyleName_.at(uiStyle);
} }
std::string GetUiStyleName(UiStyle uiStyle) std::string GetUiStyleName(UiStyle uiStyle)

View file

@ -20,17 +20,22 @@ enum ItemDataRole
RawDataRole RawDataRole
}; };
enum UiStyle enum class UiStyle
{ {
Default, Default,
Fusion, Fusion,
FusionLight,
FusionDark,
Unknown Unknown
}; };
typedef scwx::util::Iterator<UiStyle, UiStyle::Default, UiStyle::Fusion> typedef scwx::util::Iterator<UiStyle, UiStyle::Default, UiStyle::FusionDark>
UiStyleIterator; UiStyleIterator;
Qt::ColorScheme GetQtColorScheme(UiStyle uiStyle);
std::string GetQtStyleName(UiStyle uiStyle);
UiStyle GetUiStyle(const std::string& name); UiStyle GetUiStyle(const std::string& name);
std::string GetUiStyleName(UiStyle alertAction); std::string GetUiStyleName(UiStyle uiStyle);
} // namespace types } // namespace types
} // namespace qt } // namespace qt