Shawn,

I have tested the code you sent me and it looks awesome using the default method. 

Maybe the font I’m using is not the best?

What other parameters can influence this? pixelSize can influence results? 

The font I’m using to draw those labels is GoBold.ttf (follows attached)

Thx,

Nuno

Attachment: gobold.ttf
Description: Binary data


On 25 Oct 2017, at 15:33, Nuno Santos <nunosan...@imaginando.pt> wrote:

Shawn,

Sorry, I should have sent you the output of my test. 


On the Image below, the knobs labels are using NativeRendering (OCTAVE & FINE)

If you compare them agains WAVEFORM and SEMITONE, you will notice them more crisp.

I will try the code you sent me!

Thx!

Regards,

Nuno




On 25 Oct 2017, at 13:22, Shawn Rutledge <shawn.rutle...@qt.io> wrote:


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

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

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

Reply via email to