aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/util/qquickanimatorcontroller.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Set explicit default security level of all files with default securityJan Arve Sæther2025-09-171-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | The files (folders) already processed are listed in each issue in epic QTBUG-134547 These files were processed half a year ago. In order to make it clear that all of these files are already processed, mark them with an explicit default security header. For the record, this was generated with this script: find -E . -regex ".*\.(cpp|h|hpp|mm|qml|js)$" | xargs python3 ~/bin/add-cra-header.py in the folders listed in each subtask of QTBUG-134547 (add-cra-header.py only exist at my desktop, but it simply adds the default security header if it doesn't already have any existing security header) QUIP: 23 Fixes: QTBUG-134547 Pick-to: 6.10 6.9 6.8 Change-Id: Ieb8c78ea6561fdbdd27c7b13185ece853eedf80f Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
* Port from qAsConst() to std::as_const()Marc Mutz2022-10-071-7/+7
| | | | | | | | | | | | | | We've been requiring C++17 since Qt 6.0, and our qAsConst use finally starts to bother us (QTBUG-99313), so time to port away from it now. Since qAsConst has exactly the same semantics as std::as_const (down to rvalue treatment, constexpr'ness and noexcept'ness), there's really nothing more to it than a global search-and-replace. Task-number: QTBUG-99313 Change-Id: I601bf70f020f511019ed28731ba53b14b765dbf0 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Use SPDX license identifiersLucie Gérard2022-06-111-39/+3
| | | | | | | | | | | | 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>
* Use a QDoubleEndedList for the children of animation group jobsUlf Hermann2021-02-051-6/+3
| | | | | | | | | | This way it's fundamentally impossible to add the same animation job to two different group jobs. The pointers are not exposed anymore and no one can re-order the jobs. Task-number: QTBUG-90401 Change-Id: Iebff4b64960c853915dd32714acd144fc5cdc00d Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Quick: Clean up some includesUlf Hermann2020-06-041-1/+0
| | | | | | | Uniformly use <...> and sort them by modules. Change-Id: I11cd160783dfb141d8824d635bdc56a63aaee50f Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Introduce new mechanism to manage palette functionality in QMLVitaly Fanaskov2020-03-161-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Main goals of these changes: 1) Add an ability to work with disabled and inactive palettes from QML 2) Eliminate massive code duplication in qtquickcontrols2 module 3) Provide easily extensible architecture for this piece of functionality Architectural part. Palette It was decided to not change existing QPalette, but add thin wrappers around it to provide all required functionality. These wrappers are highly coupled with QPalette class because of using some enum values from it. There are two new classes QQuickPalette and QQuickColorGroup. QQuickPalette class inherits QQuickColorGroup class and represents Active/All color group. QQuickPalette also provides an access to three color groups: Active, Inactive, and Disabled. In order to access colors the special class QQuickPaletteColorProvider is used. This is a wrapper around QPalette that provides some convenience functions. Interface The private property "palette" should be exposed. Implementation All private parts of classes that implement QQuickAbstractPaletteProvider have to inherit QQuickPaletteProviderPrivateBase class. This template class implement all functionality: create palette, resolve dependencies, connect objects etc. This is important to mention that related data is lazily allocatable on demand only. Hence, there is no memory overhead for regular items. Change-Id: I911424b730451b1ad47f68fd8007953b66eddb28 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Make sure we remove stopped animators from the list of rootsGunnar Sletta2017-11-101-1/+3
| | | | | Change-Id: I89b36ee7d03ac6b8d07b24c656d3311728e8f9c3 Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* Run includemocs in qtdeclarativeThiago Macieira2017-04-261-0/+2
| | | | | Change-Id: I84e363d735b443cb9beefffd14b8c023a37aa489 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Remove unused variable after animator redoGunnar Sletta2016-10-241-2/+0
| | | | | Change-Id: Ib4bbd058dd243e9ab4b6f9908da2b0793a59e11e Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* QQuickAnimatorController: add missing qquickanimator_invalidate_jobs()J-P Nurmi2016-10-211-1/+3
| | | | | Change-Id: I61548e914e33906bc833fe4b887a1297b9715794 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Revert "Revert "Redo animator internals""Gunnar Sletta2016-10-201-185/+83
| | | | | | | | | This reverts commit ac765c4eca202e60f3e28d731f7ba3a77401fef5. Fix for problem in next commit. Change-Id: Ie6b0cb09e38e5063d943662be51952dc6da9a533 Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* Revert "Redo animator internals"Jędrzej Nowacki2016-10-171-83/+185
| | | | | | | | | | The change broke qt/qtquickcontrols2. This reverts commit ae80962806f44fc9f58de14d62229771b836cb93. Change-Id: I2313413d7b145594d434bfabf7426b79aaa98f14 Reviewed-by: J-P Nurmi <jpnurmi@qt.io> Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Redo animator internalsGunnar Sletta2016-10-121-185/+83
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The animators have suffered from crashes at runtime and instability during testing which have led them to not live up to their potential. This change brings some new concepts to try to make the situation a bit better: Firstly, the ownership of the render thread animation job is maintained using a QSharedPointer, greatly simplifying the management of that object. For the most part it will be deleted on the render thread, but if not, then that is ok too. Secondly, the proxy job is no longer tied to the animation controller. It simply starts the job on the render thread and polls to see if it has completed and only then performs the write back into the source item. Thirdly, the transform helper object which unifies x, y, scale and rotation animators into one matrix has been moved out of the controller and is striclty managed by the transform jobs. Finally, the qmlbench testcase indicates this new implementation is almost 10% faster than the old one, so the addition of shared pointers have not caused any significant performance additions. Change-Id: I51bbc43f716f8635fea97a08f2367e10cde95499 Reviewed-by: Michael Brasser <michael.brasser@live.com> Reviewed-by: Anton Kudryavtsev <a.kudryavtsev@netris.ru>
* Quick: replace 'foreach' with 'range for'Anton Kudryavtsev2016-08-181-10/+10
| | | | | Change-Id: I3493b16a184fc811289db9e98eff37bb987113a3 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Quick: use const (and const APIs) moreAnton Kudryavtsev2016-08-121-1/+1
| | | | | | | | For CoW types, prefer const methods to avoid needless detach()ing. Change-Id: I270cdc6eb8c5946f5c20b379bbb7c60f0ba518eb Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Updated license headersJani Heikkinen2016-01-191-14/+20
| | | | | | | | | | | From Qt 5.7 -> LGPL v2.1 isn't an option anymore, see http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/ Updated license headers to use new LGPL header instead of LGPL21 one (in those files which will be under LGPL v3) Change-Id: Ic36f1a0a1436fe6ac6eeca8c2375a79857e9cb12 Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* Quick: fix expensive iteration over QHash::keys() and QMap::keys()Anton Kudryavtsev2016-01-181-2/+4
| | | | | Change-Id: I21c48214bfddde01f71710705fe01418818a6581 Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* QQuickAnimatorJob: store the target with a QPointerPaul Lemire2015-12-071-0/+5
| | | | | | | | | | | | | | | This avoids ending up with invalid pointers when under some circumstances the target (which is not owned by the QQuickAnimatorJob) is destroyed between the time the QQuickAnimatorJob is created and the time it is initialized. This is the case when the target of an Animator is the item loaded by a Loader and that the animator is started just before setting the Loader to inactive. Also added an auto test for that special case. Task-number: QTBUG-49634 Change-Id: Iab9bfe76d13755ba735432c6f97bde175d308814 Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com> Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* virtual QQuickAnimatorJob::afterNodeSync()J-P Nurmi2015-10-291-2/+2
| | | | | | | | This is a suitable hook for custom animator jobs to access QQuickItemPrivate::containerChildNode(). Change-Id: Ie23fd9d6fe053843dd9ac2e8153fabd36873883a Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Update copyright headersJani Heikkinen2015-02-121-7/+7
| | | | | | | | | Qt copyrights are now in The Qt Company, so we could update the source code headers accordingly. In the same go we should also fix the links to point to qt.io. Change-Id: I61120571787870c0ed17066afb31779b1e6e30e9 Reviewed-by: Iikka Eklund <iikka.eklund@theqtcompany.com>
* Improve performance of animators.v5.4.0-beta1Gunnar Sletta2014-10-101-4/+40
| | | | | | | | | | | | | | | The use of one QCoreApp::postEvent() per completed animation added up to a very large overhead when 1000+ animators were used at the same time. This is very relevant for sprite games and similar and deserves to work at least as good as normal animations. Instead, store the animations to stop and stop then on the gui thread later as a result of frameSwapped. For the benchmark in question this allows for roughly double the amount of animators being started and stopped. Change-Id: Iae3d1ec1502ee1908fdbba708fa9f976aa230064 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Fix memory leak and crash with transform animators.Gunnar Sletta2014-10-091-5/+3
| | | | | | | | | | | | | | | | | | Every time initialize() was called, we would increment the ref on an item. However, initialize is called every time the job is started, so the ref would increase and only decrease once, leading to a leaked helper. Change it to only increment the first time. A different problem was that when an item was destroyed, we could run the risk of the QQuickTransformAnimatorJob destructor being called with the helper's item being null. This would lead to the helper not being removed from the cache and a dangling helper would remain in the transforms cache. Now change it so that when a target is destroyed, we explicitly destroy the helper as well (as no animation can happen then anyway) and reset all pointers in the job. Change-Id: I1ce76db134bbc1871d32f1224ba5b68a4a4eeafa Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Merge remote-tracking branch 'origin/5.3' into 5.4Simon Hausmann2014-09-081-0/+1
|\ | | | | | | | | | | | | | | | | Conflicts: .qmake.conf src/qml/jsruntime/qv4arraydata.cpp src/quick/scenegraph/util/qsgatlastexture.cpp Change-Id: Ic4c96066d5c37dcf0d5446baed590ea005d445ce
| * Fix crash with cleanup of animators.Gunnar Sletta2014-08-301-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We had several separate issues relating to how the jobs were cleaned up. The first was that upon getting setWindow(0), the animator did not reset m_controller to 0, leading to the starts() coming after that to post null jobs to the controller. This would later crash in beforeNodeSync as the starting job was null. The second issue was that during shutdown, QQuickAnimatorProxy would try to delete jobs on the controller which was already deleted. The controller is deleted on the GUI thread regardless of render loop, so this was solved with a QPointer. The third was that we were a bit too aggressive in trying to clean up jobs on the GUI thread, so we introduced a new bool which gets set to true in startJob() so that Proxy::deleteJob() knows who owns the job. Task-number: QTBUG-37833 Change-Id: I1b6221a2c1ce2bfd0758801b950cda00ff6899d0 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* | Update license headers and add new licensesJani Heikkinen2014-08-251-19/+11
|/ | | | | | | | | - Renamed LICENSE.LGPL to LICENSE.LGPLv21 - Added LICENSE.LGPLv3 & LICENSE.GPLv2 - Removed LICENSE.GPL Change-Id: I84a565e2e0caa3b76bf291a7d188a57a4b00e1b0 Reviewed-by: Jani Heikkinen <jani.heikkinen@digia.com>
* Fix crash with running animators on re-shown windows.Gunnar Sletta2014-05-191-4/+38
| | | | | | | | | | | | | | | | | The non-threaded render loops would clean up the nodes for a window when it was hidden, but the animators kept running and had a reference to the deleted nodes. This was not a problem for the threaded render loop as it would wipe the animator controller as well which would clean the jobs. Fix it by triggering a reset of all nodes in the animators when the window is told to clean up. If an animator is ticked when it doesn't have a node, it will simply do nothing. When the window is made visible again, we call initialize on all animators to find the new node. Task-number: QTBUG-37995 Change-Id: Ie5609d95db29f4b2b30ca5bf641dce901e528389 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Fix crash in animation controller upon destructionSimon Hausmann2013-11-091-0/+2
| | | | | | | | | | Triggered by tst_examples, it appears that we can have jobs in m_deleting that are also still listed in m_starting. So similar to what we do in beforeNodeSync, we now also take any deletion-scheduled jobs out of m_starting/m_stopping in the destructor. Change-Id: I2e00570a4e4669f8172354bf5806c5285920030a Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Refactored Animator internalsGunnar Sletta2013-11-061-66/+119
| | | | | | | | | | | | Change the design from posting events for starting and stopping to use the scene graph's existing 'sync' point. This gives much higher predictability and makes both ownership and cleanup cleaner and also reduces intermediate states while events are waiting to be delivered. Task-number: QTBUG-34137 Change-Id: I069ac22acbddaa47925b8172ba98ac340fe9bf8d Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Make sure we apply the last transformation step.Gunnar Sletta2013-10-031-7/+6
| | | | | Change-Id: Ie9b9a04cf41033bb475875f419b16ce91f6a477d Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Fix crash in tst_qmltest with the new animators.Gunnar Sletta2013-09-281-5/+14
| | | | | | | | | If the target of a job was deleted while it was running we need to avoid any operations on that job. Task-number: QTBUG-33723 Change-Id: Ia86856e7f32465f58e25c87f9c74c99b7cb0caea Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Allow animators to work properly with multiple windowsGunnar Sletta2013-09-261-28/+12
| | | | | Change-Id: I5ba663ba0fa089ea786cf43cb4dfa40cbc955342 Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com>
* Animators - Render thread animation systemGunnar Sletta2013-09-211-0/+202
This introduces 6 new QML types for animating state in the scene graph when the UI thread is blocked. The QObject property being animated is updated after the animation completes. It works also with the "windows" and "basic" render loops, but offer litte benefit then compared to in the "threaded" case. Change-Id: Ic19e47c898c0b8bd53e457db922b3c9c457c8147 Reviewed-by: Lars Knoll <lars.knoll@digia.com>