From 84bbfd9c6283af1ba50d32c196bf4387909570c7 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 26 Feb 2024 09:29:00 +0100 Subject: [PATCH] Fix color fonts with DirectWrite backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The logic to detect color fonts in the GDI font database was never implemented in the DirectWrite database, causing emojis to look monochrome. The patch moves this into the font engine itself instead, along with the other initialization code. Fixes: QTBUG-122168 Change-Id: I6f5dad579bd987149e613b8071821aaf70a89bc2 Reviewed-by: Tor Arne Vestbø (cherry picked from commit 6bd85d4a27ba2e934fa76a430f2e1d55c08d379d) Reviewed-by: Qt Cherry-pick Bot --- src/gui/text/windows/qwindowsfontdatabase.cpp | 3 --- src/gui/text/windows/qwindowsfontenginedirectwrite.cpp | 4 ++++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gui/text/windows/qwindowsfontdatabase.cpp b/src/gui/text/windows/qwindowsfontdatabase.cpp index 51254f7727b..9c85438642a 100644 --- a/src/gui/text/windows/qwindowsfontdatabase.cpp +++ b/src/gui/text/windows/qwindowsfontdatabase.cpp @@ -1256,9 +1256,6 @@ QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request, const Q QFontDef fontDef = request; fontDef.families = QStringList(QString::fromWCharArray(n)); - - if (isColorFont) - fedw->glyphFormat = QFontEngine::Format_ARGB; fedw->initFontInfo(fontDef, dpi); fe = fedw; } diff --git a/src/gui/text/windows/qwindowsfontenginedirectwrite.cpp b/src/gui/text/windows/qwindowsfontenginedirectwrite.cpp index 8027825b036..f7fc64a4993 100644 --- a/src/gui/text/windows/qwindowsfontenginedirectwrite.cpp +++ b/src/gui/text/windows/qwindowsfontenginedirectwrite.cpp @@ -1030,6 +1030,10 @@ void QWindowsFontEngineDirectWrite::initFontInfo(const QFontDef &request, names->Release(); } + // Color font + if (face3->GetPaletteEntryCount() > 0) + glyphFormat = QFontEngine::Format_ARGB; + face3->Release(); } #endif