From 3306b162392cb4afe268e8dfecd3a0e7ba7eaca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 18 Dec 2018 22:20:57 +0100 Subject: [PATCH] macOS: Only do gamma-corrected blending for subpixel-antialiased text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The grayscale font-smoothing doesn't expect to be linearly blended, as first assumed. Amended nativetext manual test to better diagnose the native Core Text behavior. Non-linear blending will result in the magenta text having a dark outline against the green background. Change-Id: I24a5f04eb1bd66fb98d621078d80ee9b80800827 Reviewed-by: Simon Hausmann Reviewed-by: Tor Arne Vestbø --- src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm | 2 +- tests/manual/textrendering/nativetext/main.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm index 19b450b6430..7957cd130a2 100644 --- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm +++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm @@ -736,7 +736,7 @@ bool QCoreTextFontEngine::shouldSmoothFont() const bool QCoreTextFontEngine::expectsGammaCorrectedBlending() const { - return shouldSmoothFont(); + return shouldSmoothFont() && fontSmoothing() == Subpixel; } qreal QCoreTextFontEngine::fontSmoothingGamma() diff --git a/tests/manual/textrendering/nativetext/main.cpp b/tests/manual/textrendering/nativetext/main.cpp index 7e98dd44d0f..b481e44bae7 100644 --- a/tests/manual/textrendering/nativetext/main.cpp +++ b/tests/manual/textrendering/nativetext/main.cpp @@ -101,7 +101,7 @@ public: const int ascent = fontMetrics().ascent(); - QPen metricsPen(Qt::magenta, 1.0); + QPen metricsPen(QColor(112, 216, 255), 1.0); metricsPen.setCosmetic(true); p.setPen(metricsPen); p.drawLine(QPoint(0, ascent), QPoint(width(), ascent)); @@ -201,7 +201,7 @@ public: case 0: return qMakePair(QColor(), QColor()); case 1: return qMakePair(QColor(Qt::black), QColor(Qt::white)); case 2: return qMakePair(QColor(Qt::white), QColor(Qt::black)); - case 3: return qMakePair(QColor(Qt::green), QColor(Qt::red)); + case 3: return qMakePair(QColor(Qt::magenta), QColor(Qt::green)); case 4: return qMakePair(QColor(0, 0, 0, 128), QColor(Qt::white)); case 5: return qMakePair(QColor(255, 255, 255, 128), QColor(Qt::black)); default: return qMakePair(QColor(), QColor());