From 1bc78f7739ca4319323de5e7e07f88ef5cbd52bc Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 27 May 2024 11:58:11 +0200 Subject: [PATCH] Introduce flag to use typographical line metrics for fonts For backwards compatibility reasons, font files have multiple different ways to specify vertical metrics (ascent, descent, etc.). For OpenType, the main two are the usWin* and sTypo* metrics in the OS/2 font table. The usWin* metrics are typically used as the clipping bounds of the font (so no character will ever draw outside these bounds). The sTypo* metrics thus make it possible to specify a different set of metrics for use in text layouts which is smaller than the clipping bounds (or bigger), so that you can have fonts where some characters overlap with preceding or subsequent lines. However, GDI (and thus many applications) use usWin* also for line spacing, which lead to the sTypo* metrics being untrustworthy in some fonts and later to the introduction of the USE_TYPO_METRICS in the OS/2 table version 4. The idea of this flag is to tell the font system that the sTypo* metrics can be trusted and should be preferred over the usWin* metrics. But the OpenType specification states that sTypo* metrics should *always* be preferred and modern font systems such as FreeType and DirectWrite will respect this. This in turn has lead to fonts where the USE_TYPO_METRICS flag is untrustworthy instead, i.e. the sTypo* metrics are preferable, but the USE_TYPO_METRICS has accidentally not been set. Qt trusts the USE_TYPO_METRICS flag and uses the usWin* metrics whenever this is unset. Since QFontMetricsF::height() (ascent+descent) in this case includes the line gap metric, a lot of components have been written to use it for size without adding any margins over the text. So changing the default now would break a large amount of components, including the ones in our own Windows style. Most fonts should work correctly, by setting the USE_TYPO_METRICS flag if the typo metrics are intended to be used. For those that do not, we introduce a PreferTypoLineMetrics style strategy. [ChangeLog][QtGui][Fonts] Added QFont::PreferTypoLineMetrics for using the recommended line spacing metrics of the font, even if the font has not explicitly set its USE_TYPO_METRICS flag. Fixes: QTBUG-125585 Change-Id: Ib2f7df404fe719186d78733bda26da712f1ab85a Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/text/coretext/qfontengine_coretext.mm | 5 +- src/gui/text/qfont.cpp | 17 +++++++ src/gui/text/qfont.h | 27 +++++------ src/gui/text/qfontengine.cpp | 7 ++- src/gui/text/qfontengine_p.h | 1 + .../auto/gui/text/qfontmetrics/CMakeLists.txt | 4 ++ .../text/qfontmetrics/tst_qfontmetrics.cpp | 44 ++++++++++++++++++ .../shared/resources/testfont_linemetrics.otf | Bin 0 -> 65540 bytes 8 files changed, 90 insertions(+), 15 deletions(-) create mode 100644 tests/auto/shared/resources/testfont_linemetrics.otf diff --git a/src/gui/text/coretext/qfontengine_coretext.mm b/src/gui/text/coretext/qfontengine_coretext.mm index 1050c03d75b..87ed95f3ace 100644 --- a/src/gui/text/coretext/qfontengine_coretext.mm +++ b/src/gui/text/coretext/qfontengine_coretext.mm @@ -336,7 +336,10 @@ void QCoreTextFontEngine::initializeHeightMetrics() const m_descent = QFixed::fromReal(CTFontGetDescent(ctfont)); m_leading = QFixed::fromReal(CTFontGetLeading(ctfont)); - m_heightMetricsQueried = true; + if (preferTypoLineMetrics()) + QFontEngine::initializeHeightMetrics(); + else + m_heightMetricsQueried = true; } QFixed QCoreTextFontEngine::capHeight() const diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index f3a35a4269d..c8881a9bf8b 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -1470,6 +1470,23 @@ QFont::StyleHint QFont::styleHint() const font that matches the largest subset of the input string instead. This will be more expensive for strings where missing glyphs occur, but may give more consistent results. If \c NoFontMerging is set, then \c ContextFontMerging will have no effect. + \value [since 6.8] PreferTypoLineMetrics For compatibility reasons, OpenType fonts contain + two competing sets of the vertical line metrics that provide the + \l{QFontMetricsF::ascent()}{ascent}, \l{QFontMetricsF::descent()}{descent} and + \l{QFontMetricsF::leading()}{leading} of the font. These are often referred to as the + \l{https://learn.microsoft.com/en-us/typography/opentype/spec/os2#uswinascent}{win} + (Windows) metrics and the + \l{https://learn.microsoft.com/en-us/typography/opentype/spec/os2#sta}{typo} + (typographical) metrics. While the specification recommends using the \c typo metrics for + line spacing, many applications prefer the \c win metrics unless the \c{USE_TYPO_METRICS} + flag is set in the + \l{https://learn.microsoft.com/en-us/typography/opentype/spec/os2#fsselection}{fsSelection} + field of the font. For backwards-compatibility reasons, this is also the case for Qt + applications. This is not an issue for fonts that set the \c{USE_TYPO_METRICS} flag to + indicate that the \c{typo} metrics are valid, nor for fonts where the \c{win} metrics + and \c{typo} metrics match up. However, for certain fonts the \c{win} metrics may be + larger than the preferable line spacing and the \c{USE_TYPO_METRICS} flag may be unset + by mistake. For such fonts, setting \c{PreferTypoLineMetrics} may give superior results. \value NoFontMerging If the font selected for a certain writing system does not contain a character requested to draw, then Qt automatically chooses a similar looking font that contains the character. The NoFontMerging flag disables this feature. diff --git a/src/gui/text/qfont.h b/src/gui/text/qfont.h index 66a5f7c155a..0b41e31bdb4 100644 --- a/src/gui/text/qfont.h +++ b/src/gui/text/qfont.h @@ -36,19 +36,20 @@ public: Q_ENUM(StyleHint) enum StyleStrategy { - PreferDefault = 0x0001, - PreferBitmap = 0x0002, - PreferDevice = 0x0004, - PreferOutline = 0x0008, - ForceOutline = 0x0010, - PreferMatch = 0x0020, - PreferQuality = 0x0040, - PreferAntialias = 0x0080, - NoAntialias = 0x0100, - NoSubpixelAntialias = 0x0800, - PreferNoShaping = 0x1000, - ContextFontMerging = 0x2000, - NoFontMerging = 0x8000 + PreferDefault = 0x0001, + PreferBitmap = 0x0002, + PreferDevice = 0x0004, + PreferOutline = 0x0008, + ForceOutline = 0x0010, + PreferMatch = 0x0020, + PreferQuality = 0x0040, + PreferAntialias = 0x0080, + NoAntialias = 0x0100, + NoSubpixelAntialias = 0x0800, + PreferNoShaping = 0x1000, + ContextFontMerging = 0x2000, + PreferTypoLineMetrics = 0x4000, + NoFontMerging = 0x8000 }; Q_ENUM(StyleStrategy) diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 4e78aaac2e4..ee74c7f8fb8 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -430,6 +430,11 @@ void QFontEngine::initializeHeightMetrics() const m_heightMetricsQueried = true; } +bool QFontEngine::preferTypoLineMetrics() const +{ + return (fontDef.styleStrategy & QFont::PreferTypoLineMetrics) != 0; +} + bool QFontEngine::processOS2Table() const { QByteArray os2 = getSfntTable(QFont::Tag("OS/2").value()); @@ -444,7 +449,7 @@ bool QFontEngine::processOS2Table() const enum { USE_TYPO_METRICS = 0x80 }; QFixed unitsPerEm = emSquareSize(); - if (fsSelection & USE_TYPO_METRICS) { + if (preferTypoLineMetrics() || fsSelection & USE_TYPO_METRICS) { // Some fonts may have invalid OS/2 data. We detect this and bail out. if (typoAscent == 0 && typoDescent == 0) return false; diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index a0e08013545..807f02fdc7d 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -148,6 +148,7 @@ public: return subPixelPositionFor(QFixedPoint(x, 0)).x; } + bool preferTypoLineMetrics() const; bool isColorFont() const { return glyphFormat == Format_ARGB; } static bool isIgnorableChar(char32_t ucs4) { diff --git a/tests/auto/gui/text/qfontmetrics/CMakeLists.txt b/tests/auto/gui/text/qfontmetrics/CMakeLists.txt index d014d27d46c..ee2f76ef76a 100644 --- a/tests/auto/gui/text/qfontmetrics/CMakeLists.txt +++ b/tests/auto/gui/text/qfontmetrics/CMakeLists.txt @@ -24,8 +24,12 @@ qt_internal_add_test(tst_qfontmetrics set_source_files_properties("../../../shared/resources/testfont.ttf" PROPERTIES QT_RESOURCE_ALIAS "testfont.ttf" ) +set_source_files_properties("../../../shared/resources/testfont_linemetrics.otf" + PROPERTIES QT_RESOURCE_ALIAS "testfont_linemetrics.otf" +) set(testfont_resource_files "../../../shared/resources/testfont.ttf" + "../../../shared/resources/testfont_linemetrics.otf" "ucs4font.ttf" ) diff --git a/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp b/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp index 9471c1d93f8..bad33ab0a47 100644 --- a/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp +++ b/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp @@ -36,6 +36,7 @@ private slots: void verticalMetrics(); void largeText_data(); void largeText(); // QTBUG-123339 + void typoLineMetrics(); }; void tst_QFontMetrics::same() @@ -410,5 +411,48 @@ void tst_QFontMetrics::largeText() QVERIFY(boundingRect.isValid()); } +void tst_QFontMetrics::typoLineMetrics() +{ + QString testFont = QFINDTESTDATA("fonts/testfont_linemetrics.otf"); + QVERIFY(!testFont.isEmpty()); + + int id = QFontDatabase::addApplicationFont(testFont); + QVERIFY(id >= 0); + + { + auto cleanup = qScopeGuard([&id] { + if (id >= 0) + QFontDatabase::removeApplicationFont(id); + }); + + QImage img(100, 100, QImage::Format_ARGB32); + img.setDevicePixelRatio(1.0); + QFont font(QFontDatabase::applicationFontFamilies(id).at(0), &img); + font.setPixelSize(18); + + const qreal unitsPerEm = 1000.0; + + QFontMetrics defaultFm(font); + const int defaultAscent = defaultFm.ascent(); + const int defaultDescent = defaultFm.descent(); + const int defaultLeading = defaultFm.leading(); + + QCOMPARE(defaultAscent, qRound(1234.0 / unitsPerEm * font.pixelSize())); + QCOMPARE(defaultDescent, qRound(5678.0 / unitsPerEm * font.pixelSize())); + QCOMPARE(defaultLeading, 0.0); + + font.setStyleStrategy(QFont::PreferTypoLineMetrics); + const QFontMetrics typoFm(font); + + const int typoAscent = typoFm.ascent(); + const int typoDescent = typoFm.descent(); + const int typoLeading = typoFm.leading(); + + QCOMPARE(typoAscent, qRound(2000.0 / unitsPerEm * font.pixelSize())); + QCOMPARE(typoDescent, qRound(3000.0 / unitsPerEm * font.pixelSize())); + QCOMPARE(typoLeading, qRound(1000.0 / unitsPerEm * font.pixelSize())); + } +} + QTEST_MAIN(tst_QFontMetrics) #include "tst_qfontmetrics.moc" diff --git a/tests/auto/shared/resources/testfont_linemetrics.otf b/tests/auto/shared/resources/testfont_linemetrics.otf new file mode 100644 index 0000000000000000000000000000000000000000..11368f7d9e66e81fb1fc4ce96d6347daf882e571 GIT binary patch literal 65540 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 c@z