Skip to content

Commit

Permalink
Make tst_QTextLayout::textWidthVsWIdth() more robust
Browse files Browse the repository at this point in the history
Some fonts misreport the minimum right bearing, and in those cases
we may not be able to do a perfect text layout inside the bounds
set. This is a limitation we have chosen to accept.

To avoid random failure when testing this, we detect the case and
skip the test if we see that it may fail.

Fixes: QTBUG-84415
Pick-to: 5.15
Change-Id: I6b53ea2631c5c6e476e2902b5514829a2141796f
Reviewed-by: Friedemann Kleint <[email protected]>
Reviewed-by: Lars Knoll <[email protected]>
  • Loading branch information
eskilblomfeldt committed May 29, 2020
1 parent bc380b2 commit 4e5d686
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2016,6 +2016,21 @@ void tst_QTextLayout::textWidthVsWIdth()
// minimum right bearing reported by the font engine doesn't cover all the glyphs in the font.
// The result is that this test may fail in some cases. We should fix this by running the test
// with a font that we know have no suprising right bearings. See qtextlayout.cpp for details.
QFontMetricsF fontMetrics(layout.font());
QSet<char16_t> checked;
qreal minimumRightBearing = 0.0;
for (int i = 0; i < layout.text().size(); ++i) {
QChar c = layout.text().at(i);
if (!checked.contains(c.unicode())) {
qreal rightBearing = fontMetrics.rightBearing(c);
if (rightBearing < minimumRightBearing)
minimumRightBearing = rightBearing;
checked.insert(c.unicode());
}
}
if (minimumRightBearing < fontMetrics.minRightBearing())
QSKIP("Font reports invalid minimum right bearing, and can't be used for this test.");

for (int width = 100; width < 1000; ++width) {
layout.beginLayout();
QTextLine line = layout.createLine();
Expand Down

0 comments on commit 4e5d686

Please sign in to comment.