Switch to Fusion style when activate custom theme or use default dark theme on Windows.
This commit is contained in:
parent
0f7a8b7e0d
commit
14ec95ee9f
|
@ -36,7 +36,6 @@
|
|||
#include "../vganalytics/def.h"
|
||||
#include "../vganalytics/vganalytics.h"
|
||||
#include "../vmisc/qt_dispatch/qt_dispatch.h"
|
||||
#include "../vmisc/theme/vapplicationstyle.h"
|
||||
#include "../vmisc/theme/vtheme.h"
|
||||
#include "../vmisc/vsysexits.h"
|
||||
#include "version.h"
|
||||
|
@ -435,6 +434,7 @@ void VPApplication::InitOptions()
|
|||
|
||||
CheckSystemLocale();
|
||||
|
||||
VTheme::InitApplicationStyle();
|
||||
VTheme::SetIconTheme();
|
||||
VTheme::InitThemeMode();
|
||||
|
||||
|
@ -499,17 +499,6 @@ void VPApplication::ParseCommandLine(const SocketConnection &connection, const Q
|
|||
qCDebug(pApp, "Can't establish connection to the server '%s'", qUtf8Printable(serverName));
|
||||
StartLocalServer(serverName);
|
||||
LoadTranslation(PuzzleSettings()->GetLocale());
|
||||
|
||||
QString styleOpt = cmd->OptionStyle();
|
||||
if (styleOpt != QLatin1String("native"))
|
||||
{
|
||||
QStyle *style = QStyleFactory::create(styleOpt);
|
||||
if (style != nullptr)
|
||||
{
|
||||
style = new VApplicationStyle(style);
|
||||
setStyle(style);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ProcessArguments(cmd);
|
||||
|
|
|
@ -67,18 +67,6 @@ void VPCommandLine::ShowHelp(int exitCode)
|
|||
parser.showHelp(exitCode);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
auto VPCommandLine::OptionStyle() const -> QString
|
||||
{
|
||||
QString value = OptionValue(LONG_OPTION_STYLE);
|
||||
if (value.isEmpty())
|
||||
{
|
||||
return QStringLiteral("native");
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
VPCommandLine::VPCommandLine()
|
||||
{
|
||||
|
@ -120,7 +108,6 @@ void VPCommandLine::InitCommandLineOptions()
|
|||
translate("VCommandLine", "Disable high dpi scaling. Call this option if has problem with scaling (by default "
|
||||
"scaling enabled). Alternatively you can use the %1 environment variable.")
|
||||
.arg(QStringLiteral("QT_AUTO_SCREEN_SCALE_FACTOR=0"))},
|
||||
{LONG_OPTION_STYLE, tr("Application style") + QString(" `Fusion`, `Windows`, `native`, ..."), "", "native"},
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -65,8 +65,6 @@ public:
|
|||
|
||||
Q_NORETURN void ShowHelp(int exitCode = 0);
|
||||
|
||||
auto OptionStyle() const -> QString;
|
||||
|
||||
protected:
|
||||
VPCommandLine();
|
||||
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
const QString LONG_OPTION_RAW_LAYOUT = QStringLiteral("rawLayout"); // NOLINT
|
||||
const QString SINGLE_OPTION_RAW_LAYOUT = QStringLiteral("r"); // NOLINT
|
||||
const QString LONG_OPTION_STYLE = QStringLiteral("style"); // NOLINT
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
|
@ -40,5 +39,5 @@ const QString LONG_OPTION_STYLE = QStringLiteral("style"); // NOLINT
|
|||
*/
|
||||
auto AllKeys() -> QStringList
|
||||
{
|
||||
return {LONG_OPTION_RAW_LAYOUT, SINGLE_OPTION_RAW_LAYOUT, LONG_OPTION_STYLE};
|
||||
return {LONG_OPTION_RAW_LAYOUT, SINGLE_OPTION_RAW_LAYOUT};
|
||||
}
|
||||
|
|
|
@ -33,9 +33,6 @@
|
|||
extern const QString LONG_OPTION_RAW_LAYOUT;
|
||||
extern const QString SINGLE_OPTION_RAW_LAYOUT;
|
||||
|
||||
extern const QString LONG_OPTION_STYLE;
|
||||
extern const QString LONG_OPTION_STYLESHEET;
|
||||
|
||||
auto AllKeys() -> QStringList;
|
||||
|
||||
#endif // VPCOMMANDS_H
|
||||
|
|
|
@ -101,8 +101,6 @@ Q_GLOBAL_STATIC_WITH_ARGS(const QString, SINGLE_OPTION_UNITS, (QChar('u')))
|
|||
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, LONG_OPTION_TEST, (QLatin1String("test"))) // NOLINT
|
||||
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(const QString, LONG_OPTION_STYLE, (QLatin1String("style"))) // NOLINT
|
||||
|
||||
QT_WARNING_POP
|
||||
} // namespace
|
||||
|
||||
|
@ -480,6 +478,7 @@ void MApplication::InitOptions()
|
|||
|
||||
CheckSystemLocale();
|
||||
|
||||
VTheme::InitApplicationStyle();
|
||||
VTheme::SetIconTheme();
|
||||
VTheme::InitThemeMode();
|
||||
|
||||
|
@ -694,22 +693,6 @@ void MApplication::ParseCommandLine(const SocketConnection &connection, const QS
|
|||
qCDebug(mApp, "Can't establish connection to the server '%s'", qUtf8Printable(serverName));
|
||||
StartLocalServer(serverName);
|
||||
LoadTranslation(TapeSettings()->GetLocale());
|
||||
|
||||
QString styleOpt = parser.value(*LONG_OPTION_STYLE);
|
||||
if (styleOpt.isEmpty())
|
||||
{
|
||||
styleOpt = QLatin1String("native");
|
||||
}
|
||||
|
||||
if (styleOpt != QLatin1String("native"))
|
||||
{
|
||||
QStyle *style = QStyleFactory::create(styleOpt);
|
||||
if (style != nullptr)
|
||||
{
|
||||
style = new VApplicationStyle(style);
|
||||
setStyle(style);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const QStringList args = parser.positionalArguments();
|
||||
|
@ -822,7 +805,6 @@ void MApplication::InitParserOptions(QCommandLineParser &parser)
|
|||
tr("Disable high dpi scaling. Call this option if has problem with scaling (by default scaling enabled). "
|
||||
"Alternatively you can use the %1 environment variable.")
|
||||
.arg("QT_AUTO_SCREEN_SCALE_FACTOR=0")},
|
||||
{*LONG_OPTION_STYLE, tr("Application style") + QString(" `Fusion`, `Windows`, `native`, ..."), "", "native"},
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -39,7 +39,6 @@
|
|||
#include "../vganalytics/def.h"
|
||||
#include "../vganalytics/vganalytics.h"
|
||||
#include "../vmisc/qt_dispatch/qt_dispatch.h"
|
||||
#include "../vmisc/theme/vapplicationstyle.h"
|
||||
#include "../vmisc/theme/vtheme.h"
|
||||
#include "../vmisc/vsysexits.h"
|
||||
#include "../vmisc/vvalentinasettings.h"
|
||||
|
@ -690,19 +689,9 @@ void VApplication::InitOptions()
|
|||
{
|
||||
LoadTranslation(ValentinaSettings()->GetLocale());
|
||||
|
||||
VTheme::InitApplicationStyle();
|
||||
VTheme::SetIconTheme();
|
||||
VTheme::InitThemeMode();
|
||||
|
||||
QString styleOpt = VApplication::CommandLine()->OptStyle();
|
||||
if (styleOpt != QLatin1String("native"))
|
||||
{
|
||||
QStyle *style = QStyleFactory::create(styleOpt);
|
||||
if (style != nullptr)
|
||||
{
|
||||
style = new VApplicationStyle(style);
|
||||
setStyle(style);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto *statistic = VGAnalytics::Instance();
|
||||
|
|
|
@ -595,18 +595,6 @@ auto VCommandLine::OptTiledPageOrientation() const -> PageOrientation
|
|||
return static_cast<PageOrientation>(not IsOptionSet(LONG_OPTION_TILED_PDF_LANDSCAPE));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VCommandLine::OptStyle() const -> QString
|
||||
{
|
||||
QString style = OptionValue(LONG_OPTION_STYLE);
|
||||
if (style.isEmpty())
|
||||
{
|
||||
return QStringLiteral("native");
|
||||
}
|
||||
|
||||
return style;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
void VCommandLine::InitCommandLineOptions()
|
||||
{
|
||||
|
@ -812,9 +800,6 @@ void VCommandLine::InitCommandLineOptions()
|
|||
{LONG_OPTION_TILED_PDF_LANDSCAPE,
|
||||
translate("VCommandLine", "Set tiled page orienatation to landscape (export mode). Default value if not set "
|
||||
"portrait.")},
|
||||
//==============================================================================================================
|
||||
{LONG_OPTION_STYLE,
|
||||
translate("VCommandLine", "Application style") + QString(" `Fusion`, `Windows`, `native`, ..."), "", "native"},
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -127,8 +127,6 @@ public:
|
|||
auto OptTiledPaperSize() const -> VAbstractLayoutDialog::PaperSizeTemplate;
|
||||
auto OptTiledPageOrientation() const -> PageOrientation;
|
||||
|
||||
auto OptStyle() const -> QString;
|
||||
|
||||
protected:
|
||||
VCommandLine();
|
||||
|
||||
|
|
|
@ -134,9 +134,6 @@ const QString LONG_OPTION_LANDSCAPE_ORIENTATION = QStringLiteral("landscapeOrien
|
|||
const QString LONG_OPTION_NEST_QUANTITY = QStringLiteral("nestQuantity");
|
||||
const QString LONG_OPTION_PREFER_ONE_SHEET_SOLUTION = QStringLiteral("preferOneSheetSolution");
|
||||
|
||||
const QString LONG_OPTION_STYLE = QStringLiteral("style");
|
||||
const QString LONG_OPTION_STYLESHEET = QStringLiteral("stylesheet");
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief AllKeys return list with all command line keys (short and long forms). Used for testing on conflicts.
|
||||
|
@ -215,7 +212,5 @@ auto AllKeys() -> QStringList
|
|||
LONG_OPTION_MANUAL_PRIORITY,
|
||||
LONG_OPTION_LANDSCAPE_ORIENTATION,
|
||||
LONG_OPTION_NEST_QUANTITY,
|
||||
LONG_OPTION_PREFER_ONE_SHEET_SOLUTION,
|
||||
LONG_OPTION_STYLE,
|
||||
LONG_OPTION_STYLESHEET};
|
||||
LONG_OPTION_PREFER_ONE_SHEET_SOLUTION};
|
||||
}
|
||||
|
|
|
@ -130,8 +130,6 @@ extern const QString LONG_OPTION_MANUAL_PRIORITY;
|
|||
extern const QString LONG_OPTION_LANDSCAPE_ORIENTATION;
|
||||
extern const QString LONG_OPTION_NEST_QUANTITY;
|
||||
extern const QString LONG_OPTION_PREFER_ONE_SHEET_SOLUTION;
|
||||
extern const QString LONG_OPTION_STYLE;
|
||||
extern const QString LONG_OPTION_STYLESHEET;
|
||||
|
||||
auto AllKeys() -> QStringList;
|
||||
|
||||
|
|
|
@ -131,16 +131,19 @@ auto StandardIconPaths() -> QHash<QStyle::StandardPixmap, QString>
|
|||
} // namespace
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
VApplicationStyle::VApplicationStyle(const QStyle *style)
|
||||
VApplicationStyle::VApplicationStyle(QStyle *style)
|
||||
: m_style(style)
|
||||
{
|
||||
m_style->setParent(this);
|
||||
}
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 1, 0)
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
VApplicationStyle::~VApplicationStyle()
|
||||
auto VApplicationStyle::name() const -> QString
|
||||
{
|
||||
delete m_style;
|
||||
return m_style->name();
|
||||
}
|
||||
#endif
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VApplicationStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const
|
||||
|
|
|
@ -40,8 +40,12 @@ class VApplicationStyle : public QStyle
|
|||
Q_OBJECT // NOLINT
|
||||
|
||||
public:
|
||||
VApplicationStyle(const QStyle *style);
|
||||
~VApplicationStyle() override;
|
||||
explicit VApplicationStyle(QStyle *style);
|
||||
~VApplicationStyle() override = default;
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 1, 0)
|
||||
auto name() const -> QString;
|
||||
#endif
|
||||
|
||||
void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const override;
|
||||
void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const override;
|
||||
|
@ -71,7 +75,7 @@ public:
|
|||
private:
|
||||
Q_DISABLE_COPY_MOVE(VApplicationStyle) // NOLINT
|
||||
|
||||
const QStyle *m_style;
|
||||
QStyle *m_style;
|
||||
|
||||
auto StyleIcon(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const -> QIcon;
|
||||
auto StylesheetIcon(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const -> QIcon;
|
||||
|
|
|
@ -32,9 +32,12 @@
|
|||
#include <QPainter>
|
||||
#include <QPalette>
|
||||
#include <QPixmap>
|
||||
#include <QStyle>
|
||||
#include <QStyleFactory>
|
||||
#include <QTextStream>
|
||||
#include <QtDebug>
|
||||
#include <QtGlobal>
|
||||
#include <QtSvg/QSvgRenderer>
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0)
|
||||
#include <QOperatingSystemVersion>
|
||||
|
@ -66,10 +69,9 @@ using namespace bpstd::literals::chrono_literals;
|
|||
|
||||
#include "../defglobal.h"
|
||||
#include "../vabstractapplication.h"
|
||||
#include "vapplicationstyle.h"
|
||||
#include "vscenestylesheet.h"
|
||||
|
||||
#include <QtSvg/QSvgRenderer>
|
||||
|
||||
namespace
|
||||
{
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 9, 0)
|
||||
|
@ -350,6 +352,46 @@ auto VTheme::DefaultThemeName() -> QString
|
|||
#endif
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VTheme::InitApplicationStyle()
|
||||
{
|
||||
VThemeMode themeMode = VAbstractApplication::VApp()->Settings()->GetThemeMode();
|
||||
|
||||
if (themeMode == VThemeMode::Light || themeMode == VThemeMode::Dark)
|
||||
{
|
||||
QStyle *style = QStyleFactory::create(QStringLiteral("fusion"));
|
||||
if (style != nullptr)
|
||||
{
|
||||
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
|
||||
Instance()->SetDefaultApplicationStyle(qApp->style());
|
||||
style = new VApplicationStyle(style);
|
||||
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
|
||||
qApp->setStyle(style);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined(Q_OS_WIN)
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
|
||||
if (NativeDarkThemeAvailable())
|
||||
{
|
||||
if (QGuiApplication::styleHints()->colorScheme() == Qt::ColorScheme::Dark)
|
||||
{
|
||||
QStyle *style = QStyleFactory::create(QStringLiteral("fusion"));
|
||||
if (style != nullptr)
|
||||
{
|
||||
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
|
||||
Instance()->SetDefaultApplicationStyle(qApp->style());
|
||||
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
|
||||
qApp->setStyle(style);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VTheme::SetIconTheme()
|
||||
{
|
||||
|
@ -505,7 +547,9 @@ auto VTheme::ThemeStylesheet() -> QString
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VTheme::ResetThemeSettings() const
|
||||
{
|
||||
qApp->setStyle(Instance()->GetDefaultApplicationStyle());
|
||||
SetToAutoTheme();
|
||||
InitApplicationStyle();
|
||||
SetIconTheme();
|
||||
InitThemeMode();
|
||||
VSceneStylesheet::ResetStyles();
|
||||
|
@ -583,3 +627,26 @@ VTheme::VTheme(QObject *parent)
|
|||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VTheme::GetDefaultApplicationStyle() const -> QStyle *
|
||||
{
|
||||
return m_defaultApplicationStyle;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VTheme::SetDefaultApplicationStyle(QStyle *defaultApplicationStyle)
|
||||
{
|
||||
QStyle *old = m_defaultApplicationStyle;
|
||||
|
||||
m_defaultApplicationStyle = defaultApplicationStyle;
|
||||
if (m_defaultApplicationStyle)
|
||||
{
|
||||
m_defaultApplicationStyle->setParent(this);
|
||||
}
|
||||
|
||||
if (old && old->parent() == this)
|
||||
{
|
||||
delete old;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,6 +42,8 @@ enum class VColorSheme
|
|||
Dark
|
||||
};
|
||||
|
||||
class QStyle;
|
||||
|
||||
class VTheme : public QObject
|
||||
{
|
||||
Q_OBJECT // NOLINT
|
||||
|
@ -66,6 +68,7 @@ public:
|
|||
static auto ShouldApplyDarkTheme() -> bool;
|
||||
static auto ColorSheme() -> VColorSheme;
|
||||
static auto DefaultThemeName() -> QString;
|
||||
static void InitApplicationStyle();
|
||||
static void SetIconTheme();
|
||||
static void InitThemeMode();
|
||||
static auto ThemeStylesheet() -> QString;
|
||||
|
@ -79,10 +82,14 @@ private:
|
|||
explicit VTheme(QObject *parent = nullptr);
|
||||
|
||||
QString m_defaultThemeName{};
|
||||
QStyle *m_defaultApplicationStyle{nullptr};
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 5, 0)
|
||||
QTimer *m_themeTimer{nullptr};
|
||||
bool m_darkTheme{false};
|
||||
#endif
|
||||
|
||||
auto GetDefaultApplicationStyle() const -> QStyle *;
|
||||
void SetDefaultApplicationStyle(QStyle *defaultApplicationStyle);
|
||||
};
|
||||
|
||||
#endif // VTHEME_H
|
||||
|
|
Loading…
Reference in New Issue
Block a user