summaryrefslogtreecommitdiffstats
path: root/src/runtime/q3dsuippresentation_p.h
Commit message (Collapse)AuthorAgeFilesLines
* Remove 3 obsolete Text propsMahmoud Badri2019-05-171-12/+2
| | | | | | Task-number: QT3DS-2903 Change-Id: I0674abbdcd11395869cdc7c196c9c1aef3b484f3 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
* Implement delayed image loading and slide resource listMäättä Antti2019-03-121-0/+39
| | | | | | | | Task-number: QT3DS-2664 Change-Id: I5310329fbf6e4e07cade28ae68161081ddf77f3c Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
* Implement datainput metadataJanne Kangas2019-02-121-0/+3
| | | | | | | | | | | | Add functionality for requesting/setting metadata specific to this datainput to Q3DSDataInput API. Currently offered on C++ side only as the intent for metadata is to facilitate dynamic binding of data sources to data inputs rather than using metadata in end user-facing visualization. Change-Id: Iccda62247cf1dcd857073f92f40d7f955ea43817 Task-id: QT3DS-2993 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
* Implement datainput getter API in Q3DSPresentationJanne Kangas2019-02-061-0/+2
| | | | | | | | | | | | Returns QVariantList containing Q3DSDataInput* allowing both QML and C++ iterate through datainputs defined in the presentation. Also implement isValid() that checks that datainput name is valid and datainput is associated with a presentation. Modify qmldatainput example and provide "cppdatainput" example for C++ side. Change-Id: I83afda1b03326390f4cf4f23c68219248a9d3ae2 Task-id: QT3DS-2204 Reviewed-by: Pasi Keränen <pasi.keranen@qt.io>
* Convert text elide property to enumTomi Korpipaa2019-01-301-4/+12
| | | | | | | | | | Elide has option for None, Left, Middle, and Right. Converting the original boolean to support those. Task-number: QT3DS-2707 Change-Id: I8bee7b7bb9dc58661663ea7a06cc70baffa3c31b Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
* Add elide property parsingTomi Korpipaa2019-01-161-0/+4
| | | | | | | | | | | This task does not handle eliding itself, it just adds support for passing it from the editor to the runtime. Eliding itself can be handled after QT3DS-1419 is done. Task-number: QT3DS-2707 Change-Id: I55da680daaeb54e6e6b7cd6c4dedce17026ff303 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
* Add horizontal and vertical offsets for text drop shadowsTomi Korpipaa2019-01-161-12/+20
| | | | | | | | | | | Keep support for old style offsets until UIP version is updated next time. This change is not critical enough to update the UIP version. Task-number: QT3DS-2755 Change-Id: Id82a27d4057892213b7562bbbe3926a965a185ab Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Jere Tuliniemi <jere.tuliniemi@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
* Support custom materials created from a QByteArrayJere Tuliniemi2019-01-151-0/+1
| | | | | | | | | | | Allow a QByteArray to be used to create a custom material instead reading it from a file. Task-number: QT3DS-2906 Change-Id: I2718240186b62c0ff2bf36e5313bed6754472066 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io> Reviewed-by: Antti Määttä <antti.maatta@qt.io>
* Add support for dynamically adding/removing object from a slideChristian Strømme2019-01-091-2/+3
| | | | | | | | | | This change adds support for adding objects at run-time in the new animation system. Note that this is now done in-place and requires no rebuilding of the animation track for the slide, which means objects with animations will start immediately at the right place. Change-Id: I987aa1aeaa272f3506310304b5543bd6f9547d39 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Add support for fixed size text areasTomi Korpipaa2019-01-081-4/+17
| | | | | | | Task-number: QT3DS-2110 Change-Id: Ib2fc628ef069cca70a5ccdf3308417759487b901 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
* DragonsWingsChristian Strømme2018-12-101-0/+2
| | | | | | | | | | This adds the basis for the dragon wings animation system, which is a light weight animator that works directly with the qt3ds' graph objects. To enable it pass --dragon-wings to the viewer or set the env variable DRAGONWINGS. Change-Id: I4403b1ac5f8c96a62993fa2043af9c611be64abb Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Add util functions to get property dataChristian Strømme2018-12-051-0/+4
| | | | | | | | This is a faster and cleaner way to write/read both static and dynamic properties. Change-Id: I0ee3b8eda86080b79bce42d67cb26a7fe04f60a0 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Add support for drop-shadows for textTomi Korpipaa2018-11-161-0/+22
| | | | | | | | Task-number: QT3DS-2644 Change-Id: I19d3b8e77d50e4817b83c528383bbe0e1931fdc9 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Try loading a ktx image instead of the given one if option is setTomi Korpipaa2018-11-011-0/+3
| | | | | | | | | | | If "Use ktx textures if available" option is set for the presentation from presentation settings dialog, try loading the given image file with ktx extension first. Task-number: QT3DS-2505 Change-Id: Ib1876fb810287beb943d8138b8fb2755853e6f3e Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Allow setting component master slideMäättä Antti2018-10-031-0/+1
| | | | | | | | This is required by studio to load component slides. Change-Id: I037e42ef6f01c5ac80aab67d0a70407acdbb93d4 Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io> Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Generate prop.changes from custom mesh updates as wellLaszlo Agocs2018-10-031-2/+2
| | | | | | | | | | | | | The scene manager must get a notification saying that something has changed in the geometry of a given model (so it can dirty appropriately). Therefore the standard notifyPropertyChange({ ...}) model has to be used for the updateCustomMeshBuffer functions as well. This avoids not updating the content in the 'standalone' test when trying to change geometry after all animations have finished. Change-Id: If9d8a8fa3c69147206803b790f0ea4ec1e59ec72 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* Merge remote-tracking branch 'origin/2.1'Christian Strømme2018-09-211-2/+2
|\ | | | | | | Change-Id: I5339cbc7f52608a7bfce10360ed20ba344b9c736
| * Fix for certain ignored set-property actionsLaszlo Agocs2018-09-131-2/+2
| | | | | | | | | | | | Task-number: QT3DS-2325 Change-Id: Ia57d5b34be87c46dcd029ce3289d3436f8e643f2 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | Add some new types and an example using the QML APIsChristian Strømme2018-09-201-0/+23
| | | | | | | | | | | | | | | | Contains some basic types for getting the ball rolling, and isn't very usable outside that. Change-Id: Ib4c186e26d7bd142a9fe51bd74ea54a7bf5fd691 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* | Add zoom factor to camera nodeMäättä Antti2018-09-201-0/+5
| | | | | | | | | | | | | | | | | | | | The studio needs to be able to zoom the camera when using edit modes. The previous runtime used view matrix scale to do this, but the scale component is not used by Qt3D camera so add zoom factor to camera node and apply it to the projection matrix. Change-Id: I7ba66bc9b5b420d216ab201411ef4aa7d967d029 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* | Enable changing scene clear colorMäättä Antti2018-09-201-1/+2
|/ | | | | | | | Apply scene clear color change to clearBuffers so that studio can change the clear color and enable/disable it. Change-Id: Ib41c7da492b8aeddd27bdd7b4dabbfff4b489a20 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Add fovhorizontal property to camerasMiikka Heikkinen2018-09-121-0/+6
| | | | | | | | | | | | | | This is a boolean property. If it is true, the fov value will be interpreted as horizontal angle. Since there were change to MetaData.xml, it was was updated to match editor version. Task-number: QT3DS-708 Change-Id: I68ac43c497a344a1f7bfcf25505f0dc4eb4cd6b5 Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io> Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Look-up change flags when creating animation callbacksChristian Strømme2018-09-111-1/+1
| | | | | | | | | mapping the property change to a change flag is expensive, so look-up the change flag when creating the animation callback, as it won't change after that and we can just cache it for later updates. Change-Id: I520a3be298735c55aac6e8e6e8cb2215f2c9d75e Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* More const and detached avoidanceChristian Strømme2018-09-111-11/+11
| | | | | | | | Calling these functions should not have side-effects on their objects, and are potential bottlenecks, so avoid detaching unnecessarily. Change-Id: Ibbe067f1c24af669bb7db7238b354cdbf998bf1d Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Handle Layer.sourcepath changesLaszlo Agocs2018-09-031-1/+2
| | | | | | | | | ...but only for layers that start out as subpresentations. Changing back and forth between "normal" and subpresentation layers is not supported. Change-Id: Id160f3efee12bd7b1a950635e738a47bc9d890b6 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* Make ReferencedMaterial more dynamicLaszlo Agocs2018-08-231-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | The ill-named ReferencedMaterial lacked quite some of the dynamic property handling, meaning it was not possible to change the referencedmaterial property to a different target material instance. This is now corrected. Therefore, the following console command sequence generates a green sphere, where the Model's child is a ReferencedMaterial that points to a DefaultMaterial living somewhere else, not associated (in the object tree at least) with any model. object(mm,mm,DefaultMaterial,Layer,Slide1) object(kk,kk,Model,Layer,Slide1) set(kk,sourcepath,#Sphere) object(rm,rm,ReferencedMaterial,kk,Slide1) set(rm,referencedmaterial,#mm) set(mm, diffuse, 0 1 0) Note that we continue with the assumption that a ReferencedMaterial cannot reference another ReferencedMaterial, meaning the target is always a default or custom material (or unset). Change-Id: I2cebb9689167f0ecb409d1bf73ee3df2364f3e04 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* Fix eyeball changes when changing slidesChristian Strømme2018-08-161-6/+0
| | | | | | | | | | | | When changing slides, always reset to eyeball value to "true" for all objects on the master slide, as the value will be set to false by the current slides property change if needed, or else the eyeball value is implicitly true. Task-number: QT3DS-2084 Change-Id: Ie7906d642edda2ff7bd1e8850cdb0ed0ce5c7eb5 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Improve Image sourcepath (re-)resolvingLaszlo Agocs2018-08-161-0/+5
| | | | | | | | | | | | Make sure the value of sourcepath is re-evaluated and adjusted as needed whenever it changes. In addition, add support for qrc:/ prefixes since applications written for the old runtime may try to treat the values are URLs instead of actual filenames (which is very wrong but it does not cost much to convert qrc:/ to :/ ) Task-number: QT3DS-2089 Change-Id: Id2ba31ef6246db2d4477a87ec15433b17bc836be Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* Add an optional separated engine-view mode to Studio3DLaszlo Agocs2018-08-141-1/+11
| | | | | | | | | | | | | | | | | | | | Adding View3D items to the Qt Quick scene allows turning off layer composition in the main presentation, and instead accessing each layer's texture as an individual visual QQuickItem. This way the 3D layers can be placed anywhere and be blended freely in the 2D scene, while avoiding all the trouble multiple Studio3D items would cause. This also moves composition into the Qt Quick domain, providing a more sensible story for creating 2D-3D UIs. While post-processing effects are still active even in separated views mode, it is now possible to use ShaderEffect instead. MSAA and SSAA layers are not handled currently and are left as a future exercise for those who like mind-boggling complexity. Task-number: QT3DS-2032 Change-Id: I08128b65d0344c609f8dea15f9562ccfd19140a6 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* Add support for QImage in Q3DSImageLaszlo Agocs2018-08-071-0/+6
| | | | | | | Also fixes changing the filename in the sourcepath property of an Image. Change-Id: Ie805cc288ecda96cdf126ec1d611aa863cb82c48 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Add support for changing the custom material source on the flyLaszlo Agocs2018-08-021-1/+7
| | | | | | | | | | | | | | | | | | | Like with effects, the 'class' property can now be changed at run time, and can also refer to a file (in addition to a #id from the .uip's Classes section) Note that constructing materials on the fly needs to be done so that the active scene's tree is consistent at any time. For example, to replace a model's material, the model has to first be unparented from the scene's object tree (and so be disconnected from the scene) because having a model without the sufficient number of materials is not allowed. Once the child object (the material) is replaced (and, for custom materials, the class property was set), the model can be parented back to where it was. When just changing the class property on a CustomMaterial, this is not needed of course, the change is picked up right away. Change-Id: I086154023513d13a4a298aeac7e0e247951a6e09 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Make effects dynamically spawnable, destroyable, and changeableLaszlo Agocs2018-08-021-19/+25
| | | | | | | | | | | | | | | Also makes it possible to use filenames in effects', custom materials' and behaviors' "class" property. Previously this could only contain an id referring to an entry in the Classes section of the uip document. With programatically constructed scenes the pre-loaded list of effect/material/behavior descriptions is not used. Instead the instances refer directly to filenames (the loaded data is cached like with meshes). Custom materials and behaviors do not yet support changing their "class" at runtime, although they get many of the enablers. Change-Id: I560ab00b9dc447bd19d5ebeb749972873b89ec2c Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Allow changing eyeball for effect and behavior via the Q_PROPERTYLaszlo Agocs2018-08-021-2/+7
| | | | | | | | Like Node does. Also add the missing property for effect, for consistency (not that these are used anywhere yet). Change-Id: I8e3e5a0e527cb4e4ea7feca52ec42fe104379c6a Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Introduce custom geometries in Q3DSModelNodeLaszlo Agocs2018-08-011-1/+10
| | | | | | | | | | | Instead of setting a the mesh' source path, one can now also call setCustomMesh with the plain and lightweight object describing the geometry. This will lead to changing sourcepath to #Custom and the engine will generate Qt 3D buffers and geometries from the provided data instead of any file or built-in primitive. Change-Id: I685a20275f99b051190a523bb996f606af5a8182 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Enablers for adding and removing layers to the scene at run timeLaszlo Agocs2018-07-161-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adding, removing and reordering layers is almost in place now. Some things are still missing when it comes to cameras since the mvp in the vertex shaders for layers introduced on-the-fly is incorrect. Extend also setparent() in the console to allow inserting new subtrees at arbitrary places. Q3DSGraphObject already has the necessary APIs (insertChildNodeAfter and friends). Therefore, doing object(newlayer, newlayer, Layer, null, Slide1) object(newlayer_cam, newlayer_cam, Camera, newlayer, Slide1) ... setparent(newlayer, Scene) Adds the new layer after all existing layers (and thus to the bottom of the stack since the 3D Studio object tree (and the editor's visualization of the tree) assumes front-to-back ordering for the layers which is weird but that's what it is). To instead add to the top (i.e. before the existing Layer children of Scene), we can now do: setparent(newlayer, Scene, null) This also matches what clicking the "Add new layer" button in the editor would do. To implement moving layers around (to change their ordering), one can now simply do setparent(newlayer, Scene, SomeOtherLayer) (or the equivalent using the Q3DSGraphObject APIs) in order to move newlayer after SomeOtherLayer. Change-Id: I9c832e4299cb7398d97a799dce5eaa3cd5518a77 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Remove scene and slide callbacks when removing objectsLaszlo Agocs2018-07-101-0/+2
| | | | | | | | | | | | | | | | When associating an object with a scene, or a slide with a master slide, the scene/master slide will start listening to property and other changes on that object. When disconnecting from the scene/master slide these callbacks should not be active anymore. (while unlikely, technically we could still reuse the same object in another scene or slide graph) To implement this, some non-node types need a bit of reshuffling when it comes to how and when the attached object is created since we now need to store some callback registration data in there. Change-Id: I986863f7802b0b53a560af24eccb1dcb33958e2e Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Fix premul alpha handling for imagesLaszlo Agocs2018-07-041-0/+1
| | | | | | | | | | | | | | | | | | | Assume non-premultiplied alpha which is the common case for regular image files (we do not explicitly convert to ARGB32_Premultiplied or such and therefore the image data is non-premultiplied in most cases (except of course when the user explicitly creates an image with premul alpha but we cannot do much about that)). When using subpresentations as texture maps, premultiplied alpha is assumed to be true since this is what both the layer compositor and Qt Quick output. This is the only case for a premultiplied image source (for now?). This cleans up a number of todo notes in the source. Task-number: QT3DS-1982 Change-Id: I73578da11a6e393bcbe467fce883478f54b1f5ef Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Refactor animation handlingChristian Strømme2018-06-221-200/+2
| | | | | | | | Simplify the communication and mapping between animating values by using the new property system. Change-Id: Ie2a014778a1f05c916243f6c5d3299801fc43293 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Part one of the property re-workChristian Strømme2018-06-221-93/+278
| | | | | | | | | | To make the property system more flexible we now use the metaObject infrastructure to keep track of the graph objects properties etc. The goal of this change is to make it easier to add new properties and access/modify those properties at run-time. Change-Id: I82ee2ac34c4a2ae8c9576a4cd04d57e2058ca9be Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* newObject: reject duplicate ids by returning nullLaszlo Agocs2018-06-201-3/+2
| | | | | | | | | | | Preventing the console or any other user of the API to create objects with the same id is essential. (ids are unique, names are not) This has been in place already in registerObject but newObject returned a valid object even when registerObject failed. This is now corrected. Change-Id: I77fed32c4f208774e33c945e085c5c5b1b6e34d8 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Move towards enabling dynamically adding and changing modelsLaszlo Agocs2018-06-201-11/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | Add an 'object' command to the console and extend the scene-change handler in scenemanager. Models can now change the mesh (sourcepath) dynamically. (in theory) Also add C++ default values to Q3DSTextNode. newObject<> uses the in-source default values, the metadata is only applied when parsing from uip. Problems with not refreshing due to layer caching are now fixed. Dynamically adding a light should now rebuild buffers, shadows, etc. as expected. Also brings back toggling the console with backtick to the widgets mode of the viewer. Add also a simple QEntity graph viewer in the profileui, showing entities, object names and components. This is very useful to verify if submeshes appear and disappear as expected for instance. Task-number: QT3DS-1178 Change-Id: Ieae38cfcb3a7eeba81a9bbcc0c76c99296655d5c Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Fix visibility updatesChristian Strømme2018-06-081-1/+1
| | | | | | Task-number: QT3DS-1866 Change-Id: I3ce33b60f20994d87e76367e697c73a68c4ddad6 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Avoid text scaling on high dpi screensLaszlo Agocs2018-06-081-0/+2
| | | | | | | | Only active for Qt 5.11.1 and newer. Task-number: QT3DS-1839 Change-Id: I7a10a14b58e2931ca75e5aee21aef88ed1d63fee Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* Improve visibility updates and add effective visibility trackingv2.0.0-rcChristian Strømme2018-06-011-0/+7
| | | | | | | Fixes visibility for effects and layers. Change-Id: Ib0ed0f28145680171e3e78c49a68cc58332dad3b Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Add property changes for implicitly set start and end timesChristian Strømme2018-06-011-0/+1
| | | | | | | | | We were not generating property changes implicit start and end times on slide or components slides. This change adds a post-processing function in the parser to generate those. Change-Id: Ifa0592e159d4d33c13923f7b3806540bd5bb3be6 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Add enabled/disabled state to the graph objectsChristian Strømme2018-05-291-0/+10
| | | | | | | | | | If a layer has sub-presentation set, mark all objects in the layer as disabled to avoid those from being processed. Task-number: QT3DS-1731 Change-Id: I672ba567837bc0e5ec2c9d1773216a9b80385fb2 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Fix eyeball updates for effectsChristian Strømme2018-05-231-0/+3
| | | | | | | | We need to update these the same way we do node types, which includes storing the rollback data to reset the values once the slide changes. Change-Id: I2f59a68d279d00c331ca63f29885c1b0552008a9 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Store the master rollback list directly in the nodeChristian Strømme2018-05-231-2/+2
| | | | | | | | Simplefies usage and we're not saving much from allocating it on demand anyways. Change-Id: I14a8921932c7b4ee26f5b2d05588fecfbc1d84b6 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Refactor handleSlideChange in the scene managerChristian Strømme2018-05-181-4/+6
| | | | | | | | | | Move the relevant code to the slide player, as the implementation details belongs there. Also, updating the properties are now done in-place and without extra heap alloctions, which should make the code more performant as well. Change-Id: I5cee4ee24a670faf0245d9fda4ad2a7a66734851 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Add transparency scan hashMäättä Antti2018-05-091-1/+3
| | | | | | | | Store transparency check results per sourcePath to reduce loading time. Task-number: QT3DS-1589 Change-Id: Iff6ba90aeb4871e3fcd6091e79bec39a037d2ff4 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>