Backport additional fixes for emoji support
Resolves: RHEL-4218
This commit is contained in:
parent
b91aad2add
commit
c09d648656
@ -47,7 +47,7 @@ BuildRequires: pkgconfig(libsystemd)
|
|||||||
Name: qt6-qtbase
|
Name: qt6-qtbase
|
||||||
Summary: Qt6 - QtBase components
|
Summary: Qt6 - QtBase components
|
||||||
Version: 6.8.1
|
Version: 6.8.1
|
||||||
Release: 7%{?dist}
|
Release: 8%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
Url: http://qt-project.org/
|
Url: http://qt-project.org/
|
||||||
@ -103,6 +103,9 @@ Patch152: qtbase-use-emoji-segmenter-to-apply-emoji-fonts-automatically.patch
|
|||||||
Patch153: qtbase-dont-support-subpixel-positioning-for-color-fonts.patch
|
Patch153: qtbase-dont-support-subpixel-positioning-for-color-fonts.patch
|
||||||
Patch154: qtbase-fix-regression-when-looking-up-fallback-fonts.patch
|
Patch154: qtbase-fix-regression-when-looking-up-fallback-fonts.patch
|
||||||
Patch155: qtbase-skip-ad-hoc-handling-of-variation-selector-in-font-merging.patch
|
Patch155: qtbase-skip-ad-hoc-handling-of-variation-selector-in-font-merging.patch
|
||||||
|
Patch156: qtbase-fontconfig-dont-register-hardcoded-fonts-as-color-fonts.patch
|
||||||
|
Patch157: qtbase-request-actual-font-family-request-in-final-color-font-fail-safe.patch
|
||||||
|
Patch158: qtbase-fontconfig-fix-detection-of-color-fonts.patch
|
||||||
|
|
||||||
## RHEL specific patches
|
## RHEL specific patches
|
||||||
# Patch300: qtbase-fix-tests.patch
|
# Patch300: qtbase-fix-tests.patch
|
||||||
@ -921,6 +924,10 @@ make check -k ||:
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jan 16 2025 Jan Grulich <jgrulich@redhat.com> - 6.8.1-8
|
||||||
|
- Backport additional fixes for emoji support
|
||||||
|
Resolves: RHEL-4218
|
||||||
|
|
||||||
* Wed Jan 15 2025 Jan Grulich <jgrulich@redhat.com> - 6.8.1-7
|
* Wed Jan 15 2025 Jan Grulich <jgrulich@redhat.com> - 6.8.1-7
|
||||||
- Sync with Fedora:
|
- Sync with Fedora:
|
||||||
- fix directory ownership
|
- fix directory ownership
|
||||||
|
@ -0,0 +1,34 @@
|
|||||||
|
From 83864f8682da73a062a3ca32b928377dfc333021 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||||
|
Date: Wed, 15 Jan 2025 14:52:55 +0100
|
||||||
|
Subject: [PATCH] FontConfig: Don't register hardcoded fonts as color fonts
|
||||||
|
|
||||||
|
This amends 16850709306589a2433c0038605d365a6b6bedad. The patch
|
||||||
|
aimed to pass false for the color font parameter, but got it in
|
||||||
|
the wrong position, so it passed false for the pixel size instead.
|
||||||
|
|
||||||
|
The registerFont() function is a real mess, and it should be cleaned
|
||||||
|
up, but this at least fixes the immediate bug.
|
||||||
|
|
||||||
|
Pick-to: 6.9
|
||||||
|
Task-number: QTBUG-132821
|
||||||
|
Change-Id: Id54989960aa5f86d3c79423d004530bb6a4fa475
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/gui/text/unix/qfontconfigdatabase.cpp b/src/gui/text/unix/qfontconfigdatabase.cpp
|
||||||
|
index 7866e341..790316a6 100644
|
||||||
|
--- a/src/gui/text/unix/qfontconfigdatabase.cpp
|
||||||
|
+++ b/src/gui/text/unix/qfontconfigdatabase.cpp
|
||||||
|
@@ -622,9 +622,9 @@ void QFontconfigDatabase::populateFontDatabase()
|
||||||
|
|
||||||
|
while (f->qtname) {
|
||||||
|
QString familyQtName = QString::fromLatin1(f->qtname);
|
||||||
|
- registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleNormal,QFont::Unstretched,true,true,false,0,f->fixed,ws,nullptr);
|
||||||
|
- registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleItalic,QFont::Unstretched,true,true,false,0,f->fixed,ws,nullptr);
|
||||||
|
- registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleOblique,QFont::Unstretched,true,true,false,0,f->fixed,ws,nullptr);
|
||||||
|
+ registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleNormal,QFont::Unstretched,true,true,0,f->fixed,false,ws,nullptr);
|
||||||
|
+ registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleItalic,QFont::Unstretched,true,true,0,f->fixed,false,ws,nullptr);
|
||||||
|
+ registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleOblique,QFont::Unstretched,true,true,0,f->fixed,false,ws,nullptr);
|
||||||
|
++f;
|
||||||
|
}
|
||||||
|
|
43
qtbase-fontconfig-fix-detection-of-color-fonts.patch
Normal file
43
qtbase-fontconfig-fix-detection-of-color-fonts.patch
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
From 2c309f71705449607592bb4588bcc56223da897b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||||
|
Date: Wed, 15 Jan 2025 15:39:16 +0100
|
||||||
|
Subject: [PATCH] FontConfig: Fix detection of color fonts
|
||||||
|
|
||||||
|
There were two mistakes in the code that intended to detect
|
||||||
|
if a specific font was a color font in the FontConfig database.
|
||||||
|
|
||||||
|
1. The "int n" parameter in FcPatternGet*() is not an array size,
|
||||||
|
but an index, so it should be 0 and not 1.
|
||||||
|
|
||||||
|
2. We need to add FC_COLOR to the list of properties in our pattern
|
||||||
|
when populating the database, otherwise we will just fail to match
|
||||||
|
it and none of the system fonts will be listed as color.
|
||||||
|
|
||||||
|
Pick-to: 6.9
|
||||||
|
Fixes: QTBUG-132377
|
||||||
|
Change-Id: Ib3c112e8a354abacd05679c62283a1f1abfb40ee
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/gui/text/unix/qfontconfigdatabase.cpp b/src/gui/text/unix/qfontconfigdatabase.cpp
|
||||||
|
index de6618f..20794ed 100644
|
||||||
|
--- a/src/gui/text/unix/qfontconfigdatabase.cpp
|
||||||
|
+++ b/src/gui/text/unix/qfontconfigdatabase.cpp
|
||||||
|
@@ -478,7 +478,7 @@
|
||||||
|
|
||||||
|
FcBool colorFont = false;
|
||||||
|
#ifdef FC_COLOR
|
||||||
|
- FcPatternGetBool(pattern, FC_COLOR, 1, &colorFont);
|
||||||
|
+ FcPatternGetBool(pattern, FC_COLOR, 0, &colorFont);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Note: stretch should really be an int but registerFont incorrectly uses an enum
|
||||||
|
@@ -577,6 +577,9 @@
|
||||||
|
#if FC_VERSION >= 20297
|
||||||
|
FC_CAPABILITY,
|
||||||
|
#endif
|
||||||
|
+#if defined(FC_COLOR)
|
||||||
|
+ FC_COLOR,
|
||||||
|
+#endif
|
||||||
|
(const char *)nullptr
|
||||||
|
};
|
||||||
|
const char **p = properties;
|
@ -0,0 +1,45 @@
|
|||||||
|
From 0acbd22508cb793461c01979d89c529f86a24bc3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||||
|
Date: Wed, 15 Jan 2025 15:12:41 +0100
|
||||||
|
Subject: [PATCH] Request actual font family request in final color font fail safe
|
||||||
|
|
||||||
|
When we're trying to resolve a font for color emojis, we will
|
||||||
|
prefer any color font over the selected font (since a normal
|
||||||
|
font may have monochrome glyphs for emoji characters and that's
|
||||||
|
not what we are after).
|
||||||
|
|
||||||
|
If there are no color fonts on the system at all, we need to do
|
||||||
|
a final match where we ignore whether the font is in color or
|
||||||
|
not and just return it anyway.
|
||||||
|
|
||||||
|
In this final pass we would find the first best match among the
|
||||||
|
fallbacks (typically the first one), but never actually check
|
||||||
|
the font that was requested in the first place. This was a
|
||||||
|
mistake. Unless it does not exist, we should just return the
|
||||||
|
requested font family.
|
||||||
|
|
||||||
|
Pick-to: 6.9
|
||||||
|
Task-number: QTBUG-132377
|
||||||
|
Change-Id: Ie53a6bd665ebdaaca92bf0c33fabf5195e1aa5fe
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
|
||||||
|
index 0c2a4b66..03f29009 100644
|
||||||
|
--- a/src/gui/text/qfontdatabase.cpp
|
||||||
|
+++ b/src/gui/text/qfontdatabase.cpp
|
||||||
|
@@ -2787,8 +2787,14 @@ QFontEngine *QFontDatabasePrivate::findFont(const QFontDef &req,
|
||||||
|
// If we are looking for a color font and there are no color fonts on the system,
|
||||||
|
// we will end up here, for one final pass. This is a rare occurrence so we accept
|
||||||
|
// and extra pass on the fallbacks for this.
|
||||||
|
- if (!engine && script == QFontDatabasePrivate::Script_Emoji)
|
||||||
|
+ if (!engine && script == QFontDatabasePrivate::Script_Emoji) {
|
||||||
|
engine = findMatchingFallback(QChar::Script_Common, script);
|
||||||
|
+
|
||||||
|
+ // Since we no longer require color fonts, we need to retry to check if the
|
||||||
|
+ // actual requested font is available as a non-color font.
|
||||||
|
+ if (!requestFamily.isEmpty())
|
||||||
|
+ fallbacks.prepend(requestFamily);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!engine)
|
Loading…
Reference in New Issue
Block a user