From 20ea0cbaba8fe38e1ab8c8240c3917af85f929f5 Mon Sep 17 00:00:00 2001 From: Andrew Knight Date: Wed, 3 Sep 2014 10:34:28 +0300 Subject: direct2d: Work around ClearType rendering bug in translucent mode This switches the font rendering to use gray scale antialiasing when in translucent rendering mode. It does so by adding a flags argument to the paint engine, allowing for future expansion in communicating render hints from the device to the engine. Task-number: QTBUG-41002 Change-Id: I0265154716a12060e851b603a109e9c693f5e843 Reviewed-by: Louai Al-Khanji Reviewed-by: Friedemann Kleint --- .../platforms/direct2d/qwindowsdirect2dpaintengine.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp') diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp index a4e75f6571..1d28befe41 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp @@ -233,9 +233,10 @@ class QWindowsDirect2DPaintEnginePrivate : public QPaintEngineExPrivate { Q_DECLARE_PUBLIC(QWindowsDirect2DPaintEngine) public: - QWindowsDirect2DPaintEnginePrivate(QWindowsDirect2DBitmap *bm) + QWindowsDirect2DPaintEnginePrivate(QWindowsDirect2DBitmap *bm, QWindowsDirect2DPaintEngine::Flags flags) : bitmap(bm) , clipFlags(0) + , flags(flags) { pen.reset(); brush.reset(); @@ -247,6 +248,7 @@ public: unsigned int clipFlags; QStack pushedClips; + QWindowsDirect2DPaintEngine::Flags flags; QPointF currentBrushOrigin; @@ -868,8 +870,9 @@ public: const bool antiAlias = bool((q->state()->renderHints & QPainter::TextAntialiasing) && !(fontDef.styleStrategy & QFont::NoAntialias)); - dc()->SetTextAntialiasMode(antiAlias ? D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE - : D2D1_TEXT_ANTIALIAS_MODE_ALIASED); + const D2D1_TEXT_ANTIALIAS_MODE antialiasMode = (flags & QWindowsDirect2DPaintEngine::UseGrayscaleAntialiasing) + ? D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE : D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE; + dc()->SetTextAntialiasMode(antiAlias ? antialiasMode : D2D1_TEXT_ANTIALIAS_MODE_ALIASED); dc()->DrawGlyphRun(pos, &glyphRun, @@ -913,8 +916,8 @@ public: } }; -QWindowsDirect2DPaintEngine::QWindowsDirect2DPaintEngine(QWindowsDirect2DBitmap *bitmap) - : QPaintEngineEx(*(new QWindowsDirect2DPaintEnginePrivate(bitmap))) +QWindowsDirect2DPaintEngine::QWindowsDirect2DPaintEngine(QWindowsDirect2DBitmap *bitmap, Flags flags) + : QPaintEngineEx(*(new QWindowsDirect2DPaintEnginePrivate(bitmap, flags))) { QPaintEngine::PaintEngineFeatures unsupported = // As of 1.1 Direct2D does not natively support complex composition modes -- cgit v1.2.3