For text rendering in Qt Quick, we currently have the limitation
that when rendering text at such a large size that the distance
fields start showing artifacts, the only option is to use
NativeRendering, which will look nice, but which will use a lot
of texture memory for the glyph cache, since it will actually
cache the glyphs at the requested size.
A suggested approach would be to fall back to using triangulated
paths when the font gets large enough, but the work on this was
never completed.
It turns out that we can get this now, basically for free, since
we already support rendering arbitrary QPainterPaths using
Qt Quick Shapes. The only thing missing is the ability to add
the path of a given text to the shape. This patch fills in that
gap.
Note that this is currently not supported by nvidia renderer.
[ChangeLog][QtQuick] Added PathText path element which can be
used together with Qt Quick Shapes to get text rendering that
does not cache glyphs in a texture, but triangulates the
outlines of the glyphs instead.
Change-Id: I436e1476b129b324cf7a54f89a1b18e0579e8185
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
The qmldir file as well as the .qml files have to be placed next to the
plugin, the import path has to be added to the .qmlproject, we want the
.qmltypes file added to the same place, and the plugins.qml should also
be available in the destination directory.
Change-Id: I82b369693e612779c6213345cc8f6a30b16d41b4
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Now that we can generate all QML type information at build time, we
should also use it.
Change-Id: I647c72bbe38fdb2deb565b75c86a696af3d15b61
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Use required properties, rather than context, use direct binding rather
than Binding elements, clarify that we're using the drag passed as
parameter, not the drag property of DropArea, move Icon to a different
file so that we get a distinct type for it. Give the icon a defined
color while it is being dragged.
Change-Id: I0e8b77abaedb9fc52660dfd4ddef1a4161f1323a
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This is essentially the rendering code from vulkanunderqml put
into the structure of metaltextureimport with some added memory
barriers.
Task-number: QTBUG-80500
Change-Id: If38301c039b38e3798ff482625daa5f63e8d6fb2
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Also fixes MouseArea using anchors within a Layout and relying on
properties that might be null.
Change-Id: I9078ded60870019c8ac9f8ff5d52d9924b51c49c
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Now explicitly importing QtQml and QtQml.Models.
The example also utilizes required properties now.
Change-Id: I819b03c0a0dc892683e680fee47a632f1e5b543a
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Also enable the two Metal-specific scenegraph examples on iOS.
Change-Id: I0e1e6d527544ea4a5bfb0d08ca2d32c762d3c699
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
As SideRect wants to access focusItem's "text" property, we should
expose the fact that it exists. Therefore, move focusRect into a
separate file that declares the property and reference that.
Change-Id: Id9b1d1e7868ee5abb9de124bab8fad45ee1449a9
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
parent.description doesn't exist, and the text is always overwritten via
the alias anyway.
Change-Id: If80c4b9b1afaaa488b8ac5c6917b413a462476ef
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Since the button is a simple Item, and the MouseArea is gone, the
"pressed" property we're interested in is actually the TapHandler's
"pressed".
Change-Id: Idc7262325c9e2db761041b1ae1151e62702e3eb8
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
So no matter if Quick goes directly to OpenGL, or via QRhi,
QQuickFramebufferObject will still work.
Also fix up the fboitem example to use a ShaderEffect that works with
both rendering paths.
With graphics APIs other than OpenGL the item will be empty, as QQuickFbo
is not something we can support there.
Task-number: QTBUG-79222
Change-Id: I52177d3a75f619f7075a2fc829573c17031eded1
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
The "pressed" property belongs to mouseArea, not button.
Change-Id: Ib35c520b75e30c2cb9a3a7dee0b482a2209040c8
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
When not building developer mode, the install does not copy the files
on other platforms
Fixes: QTBUG-79781
Change-Id: Ibc8352c59d16b69618d53750511d5b5650ed5290
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
There were a lot of documentation warnings introduced by the
separation of QtQml.Models and QtQml.WorkerScript modules
from the QtQml documentation project into their own
sub-projects.
Fix the above, and also ensure that the experimental
Qt.labs.qmlmodels QML types are listed in the documentation,
and add them also on the QML module page for QtQml.Models.
A few warnings remain, they may be indicative of issues
not in the scope of this commit.
Fixes: QTBUG-79812
Change-Id: Idc25c976e4c96feab4aae893519d6c9245f57a64
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Previously there was no way to know what area is occupied by each line
in a QML Text element.
This commit adds new API to expose implicitWidth and isLast
on QQuickTextLine for use in the lineLaidOut signal.
It also adds improved documentation to the lineLaidOut signal and
an example usage of the new API to the text layout example.
An example use case of the new API is eg. to allow embedding
timestamps and indicators within a text paragraph, to enable
creating more efficient layouts.
[ChangeLog][QtQuick][Text] Added new API that exposes implicitWidth,
and isLast on the QQuickTextLine for use in the lineLaidOut signal.
This allows the user to layout other items relative to the lines
of text.
Fixes: QTBUG-78277
Change-Id: Ibc754db17c78efb01468106aba32e30d70d2f4df
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Involves porting away from the ill-fated QSGSimpleMaterial.
This marks the first appearance of QSGMaterialRhiShader in any
of the examples.
Task-number: QTBUG-79086
Change-Id: I464e2bd06a6b5b19775b1b35265bb843979ec4b4
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
- a section should not have the name of a QML type
- caused links to ObjectModel to refer to the wrong page
Task-number: QTBUG-79061
Change-Id: I92bbd00e02252d3eca2ad50deca7d573f53f549a
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Without Metal support for now.
The ifdef pattern is the same as in QRhi in qtbase. It is to be revised
once Metal support is introduced for iOS.
Task-number: QTBUG-78854
Change-Id: I10f37ddcb42c27958270bd3ca8bf9b8457a4bea3
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
We don't want to encourage Qt.createQmlObject(). It's the equivalent of
eval() in JavaScript.
This has the added benefit that the shapes actually react to changes in
the parameters now. Before, once a shape was drawn, it didn't get
updated when you manipulated the line width or fill controls.
Change-Id: I8d5b7598799b52043f86fd1f617e31de09331891
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Using this technique we can automatically register all necessary
revisions and minor versions of a type, using the metaobject system.
This greatly reduces the potential for mistakes and resulting
incompatibilities between versions of imports.
We assume that for each type we need to register all revisions of its
super types and its attached type, and that the revisions match. That
is, if you import version X of type A, you will also get version X of
its attached type and of any super types. As we previously didn't take
these dependencies into account when manually registering the types, a
number of extra revisions are now registered for some types.
Potentially, we can now generate the qmltypes files at compile time,
using moc.
Change-Id: I7abb8a5c39f5e63ad1a0cb41a783f2c91909491b
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
It shows QQuickFramebufferObject. "Texture in QSGNode" is ambiguous
as it suggests another type of use case (where an existing texture is
imported and used with the QQ scene - without rendering to it). This
would conflict with upcoming future examples, so rename to fboitem, which
is what this example is about.
The link from examples.qdoc is already using the fitting title so that will
just work.
Change-Id: Ide7a563398a4b464c55f14e10fa9386432b3d06d
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
By taking things like the item width and height in updatePaintNode()
(while gui is locked).
Change-Id: I840c6c858a0478eb6ceb09653fd1e033cb54372d
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
What we are doing for now is setting ExternalContentsInPass always.
This way vulkanunderqml works as expected. For applications that do
not integrate external rendering this means that there is now an
additional secondary command buffer per render pass, but we can
live with this for now.
Later (Qt 6) there should be a way to declare this (that the application
will want to issue native rendering stuff) up front in QQuickWindow or
somewhere.
Change-Id: I736741f9b0eee2f8295b046bacdce862e6a546f5
Reviewed-by: Andy Nichols <andy.nichols@qt.io>