Use distance fields for text on retina displays
authorGunnar Sletta <gunnar.sletta@digia.com>
Wed, 20 Mar 2013 14:41:44 +0000 (15:41 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 2 Apr 2013 16:48:49 +0000 (18:48 +0200)
Change-Id: I6d3f3e7e4813155f2abb3edc51b145fb709c485b
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
src/quick/items/qquicktext.cpp
src/quick/items/qquicktextedit.cpp
src/quick/items/qquicktextinput.cpp

index 917eaea..9a90b40 100644 (file)
@@ -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());
 
index cf20b1d..506b4ca 100644 (file)
@@ -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);
                     }
                 }
index 58cc684..52f991b 100644 (file)
@@ -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());