From aa2475b25d08d1c4575b879aa1d51ee91ed8b5c4 Mon Sep 17 00:00:00 2001
From: Gunnar Sletta <gunnar.sletta@digia.com>
Date: Wed, 20 Mar 2013 15:41:44 +0100
Subject: [PATCH] Use distance fields for text on retina displays
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Change-Id: I6d3f3e7e4813155f2abb3edc51b145fb709c485b
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
---
 src/quick/items/qquicktext.cpp      | 4 +++-
 src/quick/items/qquicktextedit.cpp  | 6 ++++--
 src/quick/items/qquicktextinput.cpp | 4 +++-
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp
index 917eaeadd8..9a90b408c3 100644
--- a/src/quick/items/qquicktext.cpp
+++ b/src/quick/items/qquicktext.cpp
@@ -312,6 +312,8 @@ qreal QQuickTextPrivate::getImplicitHeight() const
     not require advanced features such as transformation of the text. Using such features in
     combination with the NativeRendering render type will lend poor and sometimes pixelated
     results.
+
+    On HighDpi "retina" displays this property is ignored and QtRendering is always used.
 */
 QQuickText::RenderType QQuickText::renderType() const
 {
@@ -2234,7 +2236,7 @@ QSGNode *QQuickText::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data
         node = static_cast<QQuickTextNode *>(oldNode);
     }
 
-    node->setUseNativeRenderer(d->renderType == NativeRendering);
+    node->setUseNativeRenderer(d->renderType == NativeRendering && d->window->devicePixelRatio() <= 1);
     node->deleteContent();
     node->setMatrix(QMatrix4x4());
 
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp
index cf20b1d4e7..506b4caa52 100644
--- a/src/quick/items/qquicktextedit.cpp
+++ b/src/quick/items/qquicktextedit.cpp
@@ -368,6 +368,8 @@ void QQuickTextEdit::setTextFormat(TextFormat format)
     not require advanced features such as transformation of the text. Using such features in
     combination with the NativeRendering render type will lend poor and sometimes pixelated
     results.
+
+    On HighDpi "retina" displays this property is ignored and QtRendering is always used.
 */
 QQuickTextEdit::RenderType QQuickTextEdit::renderType() const
 {
@@ -1741,7 +1743,7 @@ QSGNode *QQuickTextEdit::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *
 
 
         QQuickTextNode *node = new QQuickTextNode(QQuickItemPrivate::get(this)->sceneGraphContext(), this);
-        node->setUseNativeRenderer(d->renderType == NativeRendering);
+        node->setUseNativeRenderer(d->renderType == NativeRendering && d->window->devicePixelRatio() <= 1);
         node->initEngine(d->color, d->selectedTextColor, d->selectionColor);
 
 
@@ -1805,7 +1807,7 @@ QSGNode *QQuickTextEdit::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *
                         rootNode->appendChildNode(node);
                         prevBlockStart = block.next().position();
                         node = new QQuickTextNode(QQuickItemPrivate::get(this)->sceneGraphContext(), this);
-                        node->setUseNativeRenderer(d->renderType == NativeRendering);
+                        node->setUseNativeRenderer(d->renderType == NativeRendering && d->window->devicePixelRatio() <= 1);
                         node->initEngine(d->color, d->selectedTextColor, d->selectionColor);
                     }
                 }
diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp
index 58cc68495c..52f991b475 100644
--- a/src/quick/items/qquicktextinput.cpp
+++ b/src/quick/items/qquicktextinput.cpp
@@ -153,6 +153,8 @@ void QQuickTextInput::setText(const QString &s)
     not require advanced features such as transformation of the text. Using such features in
     combination with the NativeRendering render type will lend poor and sometimes pixelated
     results.
+
+    On HighDpi "retina" displays this property is ignored and QtRendering is always used.
 */
 QQuickTextInput::RenderType QQuickTextInput::renderType() const
 {
@@ -1836,7 +1838,7 @@ QSGNode *QQuickTextInput::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
             }
         }
     } else {
-        node->setUseNativeRenderer(d->renderType == QQuickTextInput::NativeRendering);
+        node->setUseNativeRenderer(d->renderType == NativeRendering && d->window->devicePixelRatio() <= 1);
         node->deleteContent();
         node->setMatrix(QMatrix4x4());
 
-- 
GitLab