Commit Graph

900 Commits

Author SHA1 Message Date
Ulf Hermann 57e9eacaf2 Examples: Actually fix the shadereffects example
The paths need to be the same between CMake and qmake and you really
should not use absolute qrc paths.

Amends commit d270c51f81
Amends commit e0ee63a06e

Change-Id: I9f6d3ac3fbf4483e0c0f2cad540f45c25192886e
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2022-08-24 15:04:08 +02:00
Laszlo Agocs e0ee63a06e Fix shadereffects example resources
Stuff cannot just magically move under a different prefix
when shaders are referenced with relative paths.

As the example uses the common main helper code, it is
easier to switch to absolute paths than to use
NO_RESOURCE_TARGET_PATH.

Amends d270c51f81

Change-Id: I527314725210e02675dc8c2f5fc5042dc5e1c478
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2022-08-17 01:45:55 +02:00
Shawn Rutledge 77d0ec9f84 Fix the pointerhandlers example
Amends d270c51f81

Change-Id: I616850c04facbcd7662c479d34b1a3f0a7220556
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2022-07-11 17:23:24 +02:00
Lucie Gérard 5a7b716474 Add license headers to cmake files
CMakeLists.txt and .cmake files of significant size
(more than 2 lines according to our check in tst_license.pl)
now have the copyright and license header.

Existing copyright statements remain intact

Task-number: QTBUG-88621
Change-Id: I72c89a98c42bbc9234d8495e9e503bec81d11037
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-07-08 10:41:06 +02:00
Ulf Hermann d270c51f81 Adapt examples to AUTO_RESOURCE_PREFIX
Examples that don't explicitly set NO_RESOURCE_TARGET_PATH get the
AUTO_RESOURCE_PREFIX now.

Task-number: QTBUG-103452
Change-Id: I6b41e96ce5620079f60ca2f967b0a2e611c1f738
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
2022-06-24 08:45:43 +02:00
Lucie Gérard 0dc4fd240a Use SPDX license identifiers
Replace the current license disclaimer in files by
a SPDX-License-Identifier.
Files that have to be modified by hand are modified.
License files are organized under LICENSES directory.

Pick-to: 6.4
Task-number: QTBUG-67283
Change-Id: I63563bbeb6f60f89d2c99660400dca7fab78a294
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2022-06-11 08:05:15 +02:00
Ulf Hermann d8dc3507d0 Examples: Add missing header files to the CMakeLists.txt
It's generally a good idea to state the headers. Let's teach our users
to do so.

Change-Id: I50b81d6724bce1f7e5aa6ed4491fcc63e21a0247
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2022-06-07 09:33:29 +02:00
Ulf Hermann b61301af77 Add missing "flipable" example to the build tree
Change-Id: I6452ba667078cb8ad5dbf9cc8c6512c8dea9f933
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2022-06-07 09:33:25 +02:00
Shawn Rutledge 864dade139 Sidebar example: nest content in MouseArea to restore hover propagation
After 499828b855 if you want a MouseArea
underneath some other contents to receive propagated hover events, the
content must be inside the MouseArea, not a sibling. HoverHandler still
does not have this restriction (handlers cannot have items as children,
and the handler is not considered a sibling: it's an event-handling
facet added to the item in which it's declared).

Pick-to: 6.3 6.2
Change-Id: I5ac31d982e429ac002cb0bd7ae9c071ab927032b
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2022-03-28 23:42:16 +02:00
Tasuku Suzuki 771b31c235 Replace paintedWidth/Height with contentWidth/Height
They were renamed in 51b7425329

Pick-to: 6.2 6.3
Task-number: QTBUG-15160
Change-Id: If30f69d47adf391d2d1c795caaf2bbe15f6bc32a
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2022-03-27 21:38:57 +00:00
Jani Korteniemi 9dcd908fb5 Add improvements to object listmodel example
Scaled to fit whole screen on android.
Replaced items with Qt Module names.
Randomized colors.
Added scrollbar.

Task-number: QTBUG-95438
Pick-to: 6.3 6.2
Change-Id: I1686aff4d4770d0d34399f20301c8fc393b8d778
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-03-22 18:47:47 +02:00
Laszlo Agocs a184f2e0ab Make QQuickWidget QRhi-based
When it comes to examples, quickwidget has the direct OpenGL usage
removed because we want this example to be working with any graphics
API. qquickviewcomparison, which features direct OpenGL usage within
its Qt Quick scene, is renamed to a more descriptive name and is also
getting a doc landing page. It continues to be requesting OpenGL (via
QRhi) explicitly.

Change-Id: Iae5b835441f3af229e9746e14dedbe9d1a62b2b9
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2022-03-18 22:56:54 +01:00
Kai Köhne e2138561df Use QSGRendererInterface::OpenGL in documentation and examples
QSGRendererInterface::OpenGLRhi is only an (undocumented) alias to
...::OpenGL, so let's use that instead.

Amends 0b2311a62b

Pick-to: 6.2 6.3
Change-Id: I4acdd39dc1d9b75bed5c474667a43b4ad86e7f47
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2022-02-14 11:38:10 +00:00
Kai Köhne 9d82f4bff8 Improve examples CMakeLists.txt
- Remove # generated from xyz.pro comment from pro2cmake
- Remove "# special case" markers for pro2cmake
- Remove automatic use of CMAKE_AUTORCC
- Only opt into CMAKE_AUTOUIC if .ui files are involved
- Remove explicit setting of CMAKE_INCLUDE_CURRENT_DIR
- Combine multiple find_package(Qt6 ... calls)
 - use REQUIRED COMPONENTS
 - sort components alphabetically
- Fix wrong indentations
- Use (only) one empty line after multi-line commands

Pick-to: 6.3
Change-Id: I0d6bfb06c4b25e9921d3d2bf31d977150f12b31b
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-01-24 13:25:13 +01:00
Shawn Rutledge 092b582460 Drag and Drop example: remove ParentChange
Reparenting the tile doesn't seem to be needed; and behavior changed
somehow in Qt 6.

Pick-to: 6.2
Pick-to: 6.3
Task-number: QTBUG-99436
Change-Id: If860d62260a7904718eb33b857b339bc6c5557a8
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2022-01-04 22:00:24 +00:00
Alexandru Croitor 2f45a9c2b9 Switch examples to build as isolated sub-builds
Pick-to: 6.2 6.3
Task-number: QTBUG-90820
Change-Id: I7fab73f63a22901ab2d4d4e57b5a25b433100de5
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
2021-12-16 18:28:29 +01:00
Shawn Rutledge 0d008bc0cd Fix pointer handlers example build: include piemenu, qmake support
Amends e17bfffc07 and
8503f884bb : all qml files need to be
listed in CMakeLists.txt, we need to keep qml.qrc updated too, and
we decided to keep the qmake project files.

Change-Id: Idaa4bbddabd59e79a0ae3b907319c6843d8a026a
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
2021-12-12 14:39:36 +01:00
Shawn Rutledge 8326ff2ac1 Instantiator: don't interfere with delegates that assign parents
[ChangeLog][QtQml][Instantiator] Instantiator now avoids re-assigning a
delegate object's parent to itself if it was already set; thus, you can
now declare a parent assignment.

Task-number: QTBUG-64546
Task-number: QTBUG-84730
Change-Id: I7d95fa76e71c363b4cb5b7a512c2e984488c8af4
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2021-12-10 06:52:35 +01:00
Shawn Rutledge cd5d62e999 Pointer Handlers example: show mouse wheel feedback
MouseFeedbackSprite now shows a mouse wheel animating in the same
direction as the physical mouse wheel is being rotated.

Change-Id: I08709ead3b85065723d2320d17d49adb51a00f92
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2021-12-10 06:52:06 +01:00
Shawn Rutledge 2b50181be8 Add HoverHandler.blocking property
As with WheelHandler, sometimes users want to let the hover events
propagate (which has been the default all along), but sometimes it's not
appropriate to allow parents of nested items to show hover feedback.

[ChangeLog][QtQuick][HoverHandler] HoverHandler now has a property
called blocking, which is false by default; but if set to true, it
prevents hover events from propagating to items "under" this handler's
parent, and their HoverHandlers.

Task-number: QTBUG-85926
Change-Id: I26f89482e294c7a6b30a55a7e23ac444a0d1ac7f
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2021-12-09 23:16:36 +01:00
Fabian Kosmale 4e8fe676d2 Fix toplevel Qt build (for real this time)
reused_dir_targets takes a list of targets, not directories, so provide
that one. Amends 953c1cf394

Fixes: QTBUG-98468
Change-Id: I44e811ff738c5a51845c4829e1e6928e5f2f06f1
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
(cherry picked from commit 00c352c4d4)
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2021-12-06 22:42:39 +01:00
Fabian Kosmale 45d63800d7 Fix toplevel Qt build
All targets using the "shared" approach need special handling in
toplevel builds to ensure that AUTOMOC works.
Amends aa4897e017.

Fixes: QTBUG-98468
Change-Id: Ic0a6ee0ab43190e359ad7cfb7e7634d393ff0b03
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
(cherry picked from commit 953c1cf394)
2021-12-06 22:42:34 +01:00
Shawn Rutledge e17bfffc07 Add TapHandler.gesturePolicy: DragWithinBounds enum value; examples
On a touchscreen, right-clicking is not directly possible; so sometimes
a long-press gesture is used as a substitute. The next thing a UI
designer would want would then be a way of showing feedback that a
long-press is in progress, rather than simply waiting for the long-press
to occur and then surprising the user with some instant action.
For example, a menu might begin to open as the user holds down the
touchpoint; but before the long-press gesture is complete, the user can
simply release, to cancel the gesture and close the menu. The timeHeld
property could drive the animation, to avoid needing a separate
animation type; in fact the reason timeHeld exists is to make it easy
to emulate this sort of touch-press animation, like one that occurs on
touchscreens since Windows 7.

But after the menu is open, the user would probably expect to be able to
drag the finger to a menu item and release, to select the menu item. For
such a purpose, the existing gesture policies weren't very useful: each
of them resets the timeHeld property if the user drags beyond the drag
threshold; so if the user expects to drag and release over a menu item,
then the timeHeld property cannot drive the menu-opening animation,
because the menu would disappear as soon as the user drags a little.

So it makes more sense to have a gesturePolicy that acts like
WithinBounds, but also applies the same policy to the timeHeld property
and the longPressed signal. We don't care about the drag threshold:
if the user is holding down a finger, it's considered to be a
long-press-in-progress, regardless of how far it has moved since press
(as long as it stays within the parent's bounds).

An example of such a menu is added.  The menu must have TapHandler as
its root object, because it reacts to press-and-drag within some larger
item, larger than the menu itself.  For example such a menu could be
used in a canvas-like application (drawing, diagramming, dragging things
like photos or file icons, or something like that): dragging items on
the canvas is possible, but long-pressing anywhere will open a context
menu. But in this example so far, only the menu is implemented.
It's a pie menu, because those are particularly touch-friendly; but
perhaps for the mouse, a conventional context menu would be used.

[ChangeLog][QtQuick][Event Handlers] TapHandler now has one more
gesturePolicy value: DragWithinBounds; it is similar to WithinBounds,
except that timeHeld is not reset during dragging, and the longPressed
signal can be emitted regardless of the drag threshold. This is useful
for implementing press-drag-release components such as menus, while
using timeHeld to directly drive an "opening" animation.

Change-Id: I298f8b1ad8f8d7d3c241ef4fdd68e7ec8d8b5bdd
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
2021-12-02 12:52:58 +01:00
Friedemann Kleint 0b2311a62b Scenegraph examples: Use suffix-less RHI constants
Complements 23dbe3d6e0.

Pick-to: 6.2
Change-Id: Ic1bda49a888b0580ac483d650b879a9ae843129b
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2021-11-23 18:42:51 +01:00
Oliver Eftevaag 88dfbe0dea Rendercontrol example: use new cmake api
Updating the CMakeLists.txt files in the d3d11 and opengl version of
the example to use the new qt_add_qml_module() function instead of the
old qt_add_resources()

Task-number: QTBUG-98130
Pick-to: 6.2
Change-Id: Ida43e4b0c875951a85d754b3a96f88366b580e24
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2021-11-15 23:07:17 +01:00
Oliver Eftevaag a155b3bc3e Model examples: use new cmake api
The models directory contains 3 subdirectories with an example project
in each.

This patch updates the CMakeLists.txt files to use qt_add_qml_module()
instead of the old qt_add_resources().

In order to achieve intercompatibility with both cmake and qmake, I had
to do some slight modifications to both the .qrc files and the url path
used to set the source to the QQuickView.

Task-number: QTBUG-98130
Pick-to: 6.2
Change-Id: I13d1c01a0eda181823f394bc2a4259ce98abd4f8
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2021-11-12 12:24:29 +01:00
Oliver Eftevaag fe59c788a6 painteditem: better error message when running cmake on textballoon
Building the TextBalloon in isolation doesn't make any sense.
Its purpose is to implement a delegate, for the painteditem example to
use, and should therefore only be built as part of the painteditem
project.

To build the example, cmake should be invoked with
examples/quick/customitems/painteditem/CMakeLists.txt as its source
path.

The CMakeLists.txt in examples/quick/customitems/painteditem/TextBalloon
should only be used from another CMakeLists.txt file via the
add_subdirectory() command. If invoked directly it makes sense to print
an error message and stop processing.

Task-number: QTBUG-96806
Pick-to: 6.2
Change-Id: I1ebd2157790afbf7307498a4fb64049794ae6c5b
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2021-11-11 13:11:40 +02:00
Oliver Eftevaag fb26412952 Embeddedinwidgets example: use qt_add_qml_module()
We want to use the new cmake api, rather than qt6_add_resources()

Task-number: QTBUG-98130
Pick-to: 6.2
Change-Id: I567aec77b963adce03fb683c244d758880891ce5
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2021-11-11 11:11:40 +00:00
Oliver Eftevaag 750e7d946c Keyinteraction example: use qt_add_qml_module() in CMakeLists.txt
We want to use the new cmake api instead of qt6_add_resources()
The file structure has also been flattened a bit.

Task-number: QTBUG-98130
Pick-to: 6.2
Change-Id: I1651d25e2902bf6932b78c2224ee4ffe454b658d
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2021-11-11 12:11:40 +01:00
Oliver Eftevaag 28bfd773ca MouseArea example: use qt_add_qml_module() and update a signal handler
Thing patch updates the CMakeLists.txt file to use qt_add_qml_module()
instead of qt6_add_resource().

Additionally, it changes a signal handler, which was previously a plain
statement, into a js function, which is the preferred way to write signal
handlers.

Task-number: QTBUG-98130
Pick-to: 6.2
Change-Id: I1b08dcd3eae370d78587aa3d37d9456437b54b42
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2021-11-11 11:11:40 +00:00
Oliver Eftevaag aa4897e017 Particle examples: use new cmake api
The particles directory contains 5 different examples
and a shared directory with some images files.

This patch changes the examples to use qt_add_qml_module()
in the CMakeLists.txt project files, and changes the .qrc
files to directory reference the files needed by the individual
projects, which removes the need for images.qrc.
(The .pro files still reference the shared.qrc file)

The "content" directories located in the different example
projects, have been removed, and the containing files have simply
been moved to the parent directories instead.

Some unused files in the itemparticle example have also been
deleted. This example looks very outdated and should ideally
be improved, or perhaps simply removed, but I decided to leave
it for now.

Task-number: QTBUG-98130
Pick-to: 6.2
Change-Id: If05986b4347814715bca50b8d3f6a5cddbf9ced4
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2021-11-11 12:11:40 +01:00
Ulf Hermann d7862eac1b Update examples to use new PropertyChanges
Also, prefer the multi-line syntax over ';'-separated bindings for
readability.

Change-Id: I3d6eb854e514ee257ca83773a11e6e9e10770bff
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
2021-11-03 09:14:48 +01:00
Andrei Golubev 3f2816ff6e rendercontrol_d3d11: Explicitly include qt_windows.h
Prevent accidental inclusion of windows.h through d3d11_1.h where
max/min are defined as macro. That causes the subtle error elsewhere
within the example

Change-Id: I527c53ecbc82204a1f087719f5b0b4736d8c3447
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2021-10-29 17:49:13 +02:00
JiDe Zhang 85b5413dc4 Avoid unnecessary color format conversion
If a color is not the rgb format, when QColor::red() QColor::blue()
QColor::green() is used continuously to obtain the values of different
channels, three times color conversions will occur. Therefore, use
QColor::toRgb() before that to ensure that only one conversion is
performed at most. Not only rgb, the conversion of other formats is the
same.

Change-Id: Ia969e1ca6f1524ad5d7e8dec915bcbc407875c66
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2021-10-29 18:59:48 +08:00
Ivan Tkachenko e4308747d3 Fix indentation in positioners example
Pick-to: 6.2 5.15
Change-Id: I5a39ba9361503cd5d7ce2e6da59d7807d540bee5
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2021-10-28 07:16:40 +03:00
Shawn Rutledge cc18223e0b Remove import versions from qml files in the pointerhandlers example
Many of these are portable to Qt 5; but we don't need the version
numbers in Qt 6, and the components that use "palette" refer to
Item.palette, which was added in Qt 6.

Pick-to: 6.2
Change-Id: Ic799fba5dd66db51a8808c52dce01d27c6da62bb
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2021-10-27 12:35:15 +00:00
Shawn Rutledge c61cfa8487 Fix pointerhandlers/fakeFlickable example
TapHandlerButton is not in this example: we just call it Button.
Amends 8503f884bb

Pick-to: 6.2
Change-Id: I49bc6081f05642cd938a257c14c10497bfafb8a8
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-10-26 12:04:34 +02:00
Oliver Eftevaag e2532e8773 Pointerhandlers example: fix CMakeLists.txt linking error
Fixes: QTBUG-97466
Pick-to: 6.2
Change-Id: I9bb0b79b12cbd43209f56137bbdb67ca2457ca6c
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2021-10-26 10:03:30 +00:00
Allan Sandfeld Jensen 72c3befaa2 Replace 0 pointer constants with nullptr
Replaced in most common patterns.

Change-Id: Idcaff1f2e915f29922702d3600a2e5f1e2418a7a
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2021-10-18 12:39:28 +02:00
Edward Welbourne d8ce3b7f61 Fix typo: alignment has an n in it
Change-Id: Ibe0ef16609a704042b964b4c29078c462820e602
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2021-10-13 18:58:22 +02:00
Oliver Eftevaag b128136f80 DragAndDrop example: Update CMakeLists.txt
This commit updates the drag and drop example to use qt_add_qml_module()
in its CMakeLists.txt file.

Pick-to: 6.2
Change-Id: I47fd28a1a114fe70986f73d4f2d87265255652a0
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2021-10-06 01:03:51 +02:00
Shawn Rutledge 8fc3c036de Flickable manual test: add sliders to adjust flick-speed metrics
The sliders adjust maximumFlickVelocity and flickDeceleration.

Also in the shared Slider: try harder to end up with value being
the same as init, after initialization, by making the range of movement
divisible by more numbers, by default.  180 is highly divisible, and
keeps the default Slider size reasonable.  You can still override the
size of the Slider arbitrarily, though.

Task-number: QTBUG-97055
Change-Id: I6fb41ccb87e401a747d5a8add3100053a06d9d88
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2021-10-04 15:53:33 +02:00
Alexandru Croitor d5e8a697f8 CMake: Fix wrongly copy-pasted dependency in example
Amends edc4357ae4

Pick-to: 6.2
Task-number: QTBUG-96805
Change-Id: Iedbf372cd94b1b04db55685a5d05daca491200fe
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2021-10-01 14:04:01 +02:00
Shawn Rutledge 0c4851e12b doc: Replace qmlscene with qml
We deprecated qmlscene in a9c93e2716
so we should stop recommending it in docs, too.

Task-number: QTBUG-53219
Pick-to: 6.2
Change-Id: Ic729624a8ef849bd13f38087e20b5a410c5c5756
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2021-09-29 23:16:33 +02:00
Alexandru Croitor 73d8a2c016 CMake: Fix textballoon example when using a shared Qt on macOS
Copy the qml plugin into the macOS app bundle just like we do for the
examples that use the 'shared' project using the new
add_qml_module_to_macos_app_bundle helper function.

Amends 79cae5f652

Pick-to: 6.2
Fixes: QTBUG-96805
Change-Id: Ib22131a15f0cd06a7888ec991f5ec9f79045d202
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2021-09-29 16:14:44 +02:00
Alexandru Croitor 7ab424a5cd CMake: Refactor bundle_shared into a more reusable function
Refactor the logic of bundle_shared into a more reusable
add_qml_module_to_macos_app_bundle function that can be used in
QtQuick examples that need to bundle the qml plugin on macOS, but don't
use the 'shared' qml module plugin.

The new function is placed in a QtBundleQmlModuleForMacOS.cmake file
which can be included separately from the shared/CMakeLists.txt
project.

Amends 633a85cd39

Pick-to: 6.2
Task-number: QTBUG-96805
Change-Id: Iebb3f4734b9a6bd8a8316bf5ae01d9740c442645
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2021-09-29 16:14:44 +02:00
Alexandru Croitor d73f98b1b5 CMake: Fix textballoon example when using a static Qt
Don't pre-create a qml module backing library, don't link to it
directly and instead rely on regular qml plugin loading.

This avoids undefined linker errors.

Amends 79cae5f652

Pick-to: 6.2
Fixes: QTBUG-96805
Change-Id: I77acd086257e27e1933e9b36d7f0212765afceb3
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2021-09-29 16:14:44 +02:00
Alexandru Croitor edc4357ae4 CMake: Fix examples that use 'shared' project when using a static Qt
When using a static Qt, linking of examples that use the 'shared' Qml
module would fail with the following error

Undefined symbols for architecture x86_64:
  "qt_static_plugin_sharedPlugin()", referenced from:
  StaticsharedPluginPluginInstance::StaticsharedPluginPluginInstance()
  in window_shared_init.cpp.o

This happened because the 'shared' project pre-created its
plugin target with qt_add_library instead of qt_add_plugin.

qt_add_plugin passes an additional QT_STATICPLUGIN compile definition
when compiling the moc'ed file to ensure that the QT_MOC_EXPORT_PLUGIN
macro creates a qt_plugin_instance_PLUGIN_NAME symbol.

Unfortunately we can't use qt_add_plugin for shared Qt builds, because
some of the projects link directly against the plugin target and it's
not possible to link against a MODULE_LIBRARY target which
qt_add_plugin creates in shared Qt build.

We could try to conditionally switch between using qt_add_library for
a shared Qt build and qt_add_plugin for a static Qt build, but that
further complicates the build system code because it requires
specifying a class name and plugin type explicitly.

Remove the direct linkage against the libraries in the examples and
instead rely on plugin loading.
This simplifies the logic of not having to pre-create a target.

Amends 7b6eea37ae

Pick-to: 6.2
Fixes: QTBUG-96805
Change-Id: I5b2f3992ccda29b59f1e99748005381c73daca69
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2021-09-29 16:14:44 +02:00
Alexandru Croitor 2a04bfaf3a CMake: Ensure proper dependencies in bundle_shared
Ensure the shared qml module is built before it is bundled into the
app's bundle dir on macOS.

Pick-to: 6.2
Change-Id: I0b93fc54d1caa86070335347f5d2735eafe6819a
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2021-09-29 16:14:44 +02:00
Shawn Rutledge e57ba6916e Large Text: populate only lines visible in Window into SG
Text is rendered top-to-bottom: QQuickTextNode::addTextLayout()
iterates lines of text.  Now it first maps the window size() rectangle
into the Text item's coordinate system, and treats that as the viewport:
lines whose y coordinates fall outside are omitted.
This saves a huge amount of time and memory when the text is large.
So Flickable { Text { } } can actually be used in an ebook reader now,
for example.

QQuickItemPrivate::transformChanged(parent) is now used to inform
all children when a parent moves; so e.g. when a content item is
moved inside a "viewport" item (like a Flickable, or any other item
that is being used as a clipping viewport or just as a holder),
all children of the content item will be notified; and QQuickTextPrivate
uses this occasion to mark itself dirty so that the updatePaintNode()
will be called again.  This happens directly after the actual movement:

  QQuickTextPrivate::transformChanged  qquicktext.cpp        2990
  QQuickItemPrivate::transformChanged  qquickitem.cpp        5200
  QQuickItemPrivate::dirty             qquickitem.cpp        6339
  QQuickItem::setY                     qquickitem.cpp        6830
  QQuickFlickablePrivate::setViewportY qquickflickable.cpp   1800

Task-number: QTBUG-60491
Task-number: QTBUG-90734
Change-Id: I152d23caa725f194a186a604fbc8d0c07f597b16
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2021-09-29 16:14:44 +02:00