diff --git a/src/core/framelesshelpercore.qrc b/src/core/framelesshelpercore.qrc index ef68a8d..af9ba55 100644 --- a/src/core/framelesshelpercore.qrc +++ b/src/core/framelesshelpercore.qrc @@ -1,7 +1,5 @@ - resources/fonts/Segoe Fluent Icons.ttf - resources/fonts/Segoe MDL2 Assets.ttf resources/fonts/Micon.ttf diff --git a/src/core/framelessmanager.cpp b/src/core/framelessmanager.cpp index 58d7d5f..d0731de 100644 --- a/src/core/framelessmanager.cpp +++ b/src/core/framelessmanager.cpp @@ -59,37 +59,26 @@ Q_GLOBAL_STATIC(FramelessManagerHelper, g_helper) Q_GLOBAL_STATIC(FramelessManager, g_manager) -FRAMELESSHELPER_STRING_CONSTANT2(IconFontResourcePrefix, ":/org.wangwenx190.FramelessHelper/resources/fonts/") -FRAMELESSHELPER_STRING_CONSTANT2(IconFontFileName_win11, "Segoe Fluent Icons.ttf") -FRAMELESSHELPER_STRING_CONSTANT2(IconFontFileName_win, "Segoe MDL2 Assets.ttf") -FRAMELESSHELPER_STRING_CONSTANT2(IconFontFileName_unix, "Micon.ttf") +FRAMELESSHELPER_STRING_CONSTANT2(IconFontFilePath, ":/org.wangwenx190.FramelessHelper/resources/fonts/Micon.ttf") FRAMELESSHELPER_STRING_CONSTANT2(IconFontFamilyName_win11, "Segoe Fluent Icons") -FRAMELESSHELPER_STRING_CONSTANT2(IconFontFamilyName_win, "Segoe MDL2 Assets") -FRAMELESSHELPER_STRING_CONSTANT2(IconFontFamilyName_unix, "micon_nb") +FRAMELESSHELPER_STRING_CONSTANT2(IconFontFamilyName_win10, "Segoe MDL2 Assets") +FRAMELESSHELPER_STRING_CONSTANT2(IconFontFamilyName_common, "micon_nb") static constexpr const int kIconFontPointSize = 8; -[[nodiscard]] static inline QString iconFontFilePath() -{ - static const QString result = []() -> QString { -#ifdef Q_OS_WINDOWS - static const bool isWin11OrGreater = Utils::isWindowsVersionOrGreater(WindowsVersion::_11_21H2); - return (kIconFontResourcePrefix + (isWin11OrGreater ? kIconFontFileName_win11 : kIconFontFileName_win)); -#else - return (kIconFontResourcePrefix + kIconFontFileName_unix); -#endif - }(); - return result; -} - [[nodiscard]] static inline QString iconFontFamilyName() { static const QString result = []() -> QString { #ifdef Q_OS_WINDOWS static const bool isWin11OrGreater = Utils::isWindowsVersionOrGreater(WindowsVersion::_11_21H2); - return (isWin11OrGreater ? kIconFontFamilyName_win11 : kIconFontFamilyName_win); -#else - return kIconFontFamilyName_unix; + if (isWin11OrGreater) { + return kIconFontFamilyName_win11; + } + static const bool isWin10OrGreater = Utils::isWindowsVersionOrGreater(WindowsVersion::_10_1507); + if (isWin10OrGreater) { + return kIconFontFamilyName_win10; + } #endif + return kIconFontFamilyName_common; }(); return result; } @@ -132,9 +121,9 @@ void FramelessManagerPrivate::initializeIconFont() } inited = true; initResource(); - const int id = QFontDatabase::addApplicationFont(iconFontFilePath()); + const int id = QFontDatabase::addApplicationFont(kIconFontFilePath); if (id < 0) { - qWarning() << "Failed to load icon font:" << iconFontFilePath(); + qWarning() << "Failed to load icon font:" << kIconFontFilePath; } else { qDebug() << "Successfully registered icon font:" << QFontDatabase::applicationFontFamilies(id); } @@ -261,7 +250,8 @@ void FramelessManagerPrivate::initialize() #endif } -FramelessManager::FramelessManager(QObject *parent) : QObject(parent), d_ptr(new FramelessManagerPrivate(this)) +FramelessManager::FramelessManager(QObject *parent) : + QObject(parent), d_ptr(new FramelessManagerPrivate(this)) { } diff --git a/src/core/resources/fonts/Segoe Fluent Icons.ttf b/src/core/resources/fonts/Segoe Fluent Icons.ttf deleted file mode 100644 index 8f05a4b..0000000 Binary files a/src/core/resources/fonts/Segoe Fluent Icons.ttf and /dev/null differ diff --git a/src/core/resources/fonts/Segoe MDL2 Assets.ttf b/src/core/resources/fonts/Segoe MDL2 Assets.ttf deleted file mode 100644 index 066f108..0000000 Binary files a/src/core/resources/fonts/Segoe MDL2 Assets.ttf and /dev/null differ diff --git a/src/core/utils.cpp b/src/core/utils.cpp index 5faff8b..782c125 100644 --- a/src/core/utils.cpp +++ b/src/core/utils.cpp @@ -38,8 +38,8 @@ using namespace Global; struct FONT_ICON { - quint32 win = 0; - quint32 unix = 0; + quint32 segoe = 0; + quint32 micon = 0; }; static const QHash g_fontIconsTable = { @@ -123,16 +123,22 @@ Qt::Edges Utils::calculateWindowEdges(const QWindow *window, const QPoint &pos) QString Utils::getSystemButtonIconCode(const SystemButtonType button) { - if (!g_fontIconsTable.contains(static_cast(button))) { + const auto index = static_cast(button); + if (!g_fontIconsTable.contains(index)) { qWarning() << "FIXME: Add FONT_ICON value for button" << button; return {}; } - const FONT_ICON icon = g_fontIconsTable.value(static_cast(button)); + const FONT_ICON icon = g_fontIconsTable.value(index); #ifdef Q_OS_WINDOWS - return QChar(icon.win); -#else - return QChar(icon.unix); + // Windows 11: Segoe Fluent Icons (https://docs.microsoft.com/en-us/windows/apps/design/style/segoe-fluent-icons-font) + // Windows 10: Segoe MDL2 Assets (https://docs.microsoft.com/en-us/windows/apps/design/style/segoe-ui-symbol-font) + // Windows 7~8.1: Micon (http://xtoolkit.github.io/Micon/) + static const bool isWin10OrGreater = isWindowsVersionOrGreater(WindowsVersion::_10_1507); + if (isWin10OrGreater) { + return QChar(icon.segoe); + } #endif + return QChar(icon.micon); } QWindow *Utils::findWindow(const WId windowId)