From 6a1a2e00a9f6446b209a8d7f20550bfb7662479d Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Wed, 29 Jun 2022 07:53:29 +0200 Subject: [PATCH] Relayout QStaticText when dpi changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the cached font has a different DPI than the one used in QPainter, we need to treat this the same as if other font properties have changed and redo the layout. This happened when running the QStaticText test on Wayland, because the default dpi was 100 and the QPixmap we ended up drawing to was 96. This caused the pixel size of the font to be calculated differently when doing drawText() (using 96 dpi) and drawStaticText() (using the cached 100 dpi). Fixes: QTBUG-100982 Change-Id: Ie4270341bb8a64b6458eb67ba460a282c65dc26b Reviewed-by: Tor Arne Vestbø (cherry picked from commit ade2df4c4b2df638fefd42d9b755ee7a789da503) Reviewed-by: Qt Cherry-pick Bot --- src/gui/painting/qpainter.cpp | 5 +++- .../gui/text/qstatictext/tst_qstatictext.cpp | 27 ++----------------- 2 files changed, 6 insertions(+), 26 deletions(-) diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 6995f7d1800..0ccfccb19ee 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -39,6 +39,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -5448,7 +5449,9 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText QStaticTextPrivate *staticText_d = const_cast(QStaticTextPrivate::get(&staticText)); - if (font() != staticText_d->font) { + QFontPrivate *fp = QFontPrivate::get(font()); + QFontPrivate *stfp = QFontPrivate::get(staticText_d->font); + if (font() != staticText_d->font || fp == nullptr || stfp == nullptr || fp->dpi != stfp->dpi) { staticText_d->font = font(); staticText_d->needsRelayout = true; } diff --git a/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp b/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp index 397a116a738..e6e16374d3c 100644 --- a/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp +++ b/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp @@ -82,11 +82,6 @@ private: Q_DECLARE_METATYPE(QImage::Format); -static bool isPlatformWayland() -{ - return QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive); -} - void tst_QStaticText::constructionAndDestruction() { QStaticText text("My text"); @@ -148,8 +143,6 @@ void tst_QStaticText::drawToPoint() } QVERIFY(imageDrawText.toImage() != m_whiteSquare); - if (isPlatformWayland()) - QEXPECT_FAIL("", "Wayland: This fails. See QTBUG-100982.", Abort); QCOMPARE(imageDrawStaticText, imageDrawText); } @@ -190,8 +183,6 @@ void tst_QStaticText::drawToRect() #endif QVERIFY(imageDrawText.toImage() != m_whiteSquare); - if (isPlatformWayland()) - QEXPECT_FAIL("", "Wayland: This fails. See QTBUG-100982.", Abort); QCOMPARE(imageDrawStaticText, imageDrawText); } @@ -246,13 +237,11 @@ void tst_QStaticText::compareToDrawText() #if defined(DEBUG_SAVE_IMAGE) imageDrawText.save("compareToDrawText_imageDrawText.png"); - imageDrawStaticText.save("compareToDrawText_imageDrawStaticPlainText.png"); - imageDrawStaticText.save("compareToDrawText_imageDrawStaticRichText.png"); + imageDrawStaticPlainText.save("compareToDrawText_imageDrawStaticPlainText.png"); + imageDrawStaticRichText.save("compareToDrawText_imageDrawStaticRichText.png"); #endif QVERIFY(imageDrawText.toImage() != m_whiteSquare); - if (isPlatformWayland() && font == QFont()) - QEXPECT_FAIL("", "Wayland: This fails. See QTBUG-100982.", Abort); QCOMPARE(imageDrawStaticPlainText, imageDrawText); QCOMPARE(imageDrawStaticRichText, imageDrawText); } @@ -360,8 +349,6 @@ void tst_QStaticText::setFont() #endif QVERIFY(imageDrawText.toImage() != m_whiteSquare); - if (isPlatformWayland()) - QEXPECT_FAIL("", "Wayland: This fails. See QTBUG-100982.", Abort); QCOMPARE(imageDrawStaticText, imageDrawText); } @@ -385,8 +372,6 @@ void tst_QStaticText::setTextWidth() } QVERIFY(imageDrawText.toImage() != m_whiteSquare); - if (isPlatformWayland()) - QEXPECT_FAIL("", "Wayland: This fails. See QTBUG-100982.", Abort); QCOMPARE(imageDrawStaticText, imageDrawText); } @@ -414,8 +399,6 @@ void tst_QStaticText::translatedPainter() } QVERIFY(imageDrawText.toImage() != m_whiteSquare); - if (isPlatformWayland()) - QEXPECT_FAIL("", "Wayland: This fails. See QTBUG-100982.", Abort); QCOMPARE(imageDrawStaticText, imageDrawText); } @@ -456,8 +439,6 @@ void tst_QStaticText::rotatedPainter() if (!supportsTransformations()) QEXPECT_FAIL("", "Graphics system does not support transformed text on this platform", Abort); - if (isPlatformWayland()) - QEXPECT_FAIL("", "Wayland: This fails. See QTBUG-100982.", Abort); QCOMPARE(imageDrawStaticText, imageDrawText); } @@ -488,8 +469,6 @@ void tst_QStaticText::scaledPainter() if (!supportsTransformations()) QEXPECT_FAIL("", "Graphics system does not support transformed text on this platform", Abort); - if (isPlatformWayland()) - QEXPECT_FAIL("", "Wayland: This fails. See QTBUG-100982.", Abort); QCOMPARE(imageDrawStaticText, imageDrawText); } @@ -617,8 +596,6 @@ void tst_QStaticText::transformationChanged() if (!supportsTransformations()) QEXPECT_FAIL("", "Graphics system does not support transformed text on this platform", Abort); - if (isPlatformWayland()) - QEXPECT_FAIL("", "Wayland: This fails. See QTBUG-100982.", Abort); QCOMPARE(imageDrawStaticText, imageDrawText); }