> On 25 Oct 2017, at 11:54, Nuno Santos <nunosan...@imaginando.pt> wrote:
> 
> Shawn,
> 
> Thanks for your reply.
> 
> It actually got worst with this setting.

In what way?

The downside of native text is that it’s a bit less efficient, and is rendered 
exactly at the declared font size, so transforms such as scaling and rotation 
look terrible.  We don’t use it by default because QtQuick is for fluid 
applications, but static text looks “more native” with NativeRendering.

Here’s a little torture-test you can try (with the qml runtime):

import QtQuick 2.0
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.1

Rectangle {
    width: 900
    height: 480

    GridLayout {
        width: parent.width
        columns: 3
        flow: GridLayout.TopToBottom

        Repeater {
            model: 10
            Text {
                text: "default rendering"
                font.pixelSize: sizeSlider.value * (index + 1)
                transformOrigin: Item.TopLeft
                scale: scaleSlider.value
                rotation: rotationSlider.value
            }
        }

        Repeater {
            id: nrRepeater
            model: 10
            Text {
                renderType: Text.NativeRendering
                text: "native rendering"
                font.pixelSize: sizeSlider.value * (index + 1)
                Layout.column: 1
                Layout.row: index
                transformOrigin: Item.TopLeft
                scale: scaleSlider.value
                rotation: rotationSlider.value
            }
        }

        Repeater {
            model: 10
            Canvas {
                width: 300
                height: fontSize
                property real fontSize: sizeSlider.value * (index + 1)
                onPaint: {
                    var ctx = getContext("2d");
                    ctx.clearRect(0, 0, width, height);
                    ctx.fillStyle = Qt.rgba(0, 0, 0, 1);
                    ctx.font = fontSize + 'px Helvetica';
                    ctx.textBaseline = 'top';
                    console.log("painting " + index + " , height " + height + " 
font " + ctx.font + " based on " + sizeSlider.value)
                    ctx.fillText('canvas rendering', 0, 0);
                }
                Layout.column: 2
                Layout.row: index
                transformOrigin: Item.TopLeft
                scale: scaleSlider.value
                rotation: rotationSlider.value
            }
        }
        SequentialAnimation on y {
            id: jumper
            running: cbAnimate.checked
            loops: Animation.Infinite
            NumberAnimation { from: 0; to: amplitudeSlider.value }
            NumberAnimation { to: 0; from: amplitudeSlider.value }
        }
    }

    Column {
        anchors.bottom: parent.bottom
        Row {
            spacing: 6
            Text { text: "Pixel size"; anchors.verticalCenter: 
parent.verticalCenter }
            Slider { id: sizeSlider; from: 2; to: 5 }
            CheckBox { id: cbAnimate; text: "Jumpy"; checked: true }
            Slider { id: amplitudeSlider; from: 1; to: 10; value: 1; 
onValueChanged: jumper.restart() }
        }
        Row {
            spacing: 6
            Text { text: "Scale"; anchors.verticalCenter: parent.verticalCenter 
}
            Slider { id: scaleSlider; from: 0.5; to: 2; value: 1 }
            Text { text: "Rotation"; anchors.verticalCenter: 
parent.verticalCenter }
            Slider { id: rotationSlider; from: -10; to: 10; value: 0 }
            Button { text: "Reset"; onClicked: { scaleSlider.value = 1; 
rotationSlider.value = 0 } }
        }
    }
}

> So I assume there aren’t any other alternatives.

There’s some work in progress toward rendering with contours eventually: 
https://bugreports.qt.io/browse/QTBUG-61933 but that’s intended for larger text 
sizes.

You could try using QPainter (make a custom C++ Item which renders words to 
textures and then creates QSGImageNodes for them), but I think that would look 
about the same as native text.

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to