Qt/Win32: Use better method to obtain the default font

This commit is contained in:
spycrab 2018-05-06 01:23:13 +02:00
parent 58b96eeb9d
commit 49a1b2e5df
1 changed files with 21 additions and 6 deletions

View File

@ -5,6 +5,8 @@
#ifdef _WIN32 #ifdef _WIN32
#include <Windows.h> #include <Windows.h>
#include <cstdio> #include <cstdio>
#include "Common/StringUtil.h"
#endif #endif
#include <OptionParser.h> #include <OptionParser.h>
@ -94,14 +96,27 @@ int main(int argc, char* argv[])
QApplication app(argc, argv); QApplication app(argc, argv);
#ifdef _WIN32 #ifdef _WIN32
// Force the default font to Segoe UI on Windows // Get the default system font because Qt's way of obtaining it is outdated
NONCLIENTMETRICS metrics = {};
auto& logfont = metrics.lfMenuFont;
metrics.cbSize = sizeof(NONCLIENTMETRICS);
if (SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(metrics), &metrics, 0))
{
// Sadly Qt 5 doesn't support turning a native font handle into a QFont so this is the next best
// thing
QFont font = QApplication::font(); QFont font = QApplication::font();
font.setFamily(QStringLiteral("Segoe UI")); font.setFamily(QString::fromStdString(UTF16ToUTF8(logfont.lfFaceName)));
font.setWeight(logfont.lfWeight);
font.setItalic(logfont.lfItalic);
font.setStrikeOut(logfont.lfStrikeOut);
font.setUnderline(logfont.lfUnderline);
// The default font size is a bit too small // The default font size is a bit too small
font.setPointSize(QFontInfo(font).pointSize() * 1.2); font.setPointSize(QFontInfo(font).pointSize() * 1.2);
QApplication::setFont(font); QApplication::setFont(font);
}
#endif #endif
auto parser = CommandLineParse::CreateParser(CommandLineParse::ParserOptions::IncludeGUIOptions); auto parser = CommandLineParse::CreateParser(CommandLineParse::ParserOptions::IncludeGUIOptions);