aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/animations
Commit message (Collapse)AuthorAgeFilesLines
* Quick Animations: Fix crashFabian Kosmale2022-05-072-4/+4
| | | | | | | | | | | | | SwipeDelegate causes the running animation job to be deleted when calling swipe.close in swipe.completed. Employ the RETURN_IF_DELETED check in more places to avoid crashes. Fixes: QTBUG-100560 Task-number: QTBUG-103223 Change-Id: I276eeaa9aed1bdb36449b322a24641fa02c4d5e4 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> (cherry picked from commit 0238af0bd48b831d72126f2228d5913eccf67bae) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Unset the QQmlAnimationTimer pointer from unregistered jobsVolker Hilsheimer2021-11-241-2/+4
| | | | | | | | | | | | | | | | | | | | | Amends 4b125a5bfdd935d260118406c343535e76023200, which reset the pointer in registered jobs when the timer was destroyed. However, if a job is unregistered explicitly before the timer is destroyed, then the job's m_timer pointer might still be a dangling pointer, resulting in a crash when the job is reactivated later. So clear the job's pointer to QQmlAnimationTimer whenever it is unregistered from the timer. Since a running job can then have a nullptr timer, only assert in the job's destructor if the timer is not nullptr. Introduce a test case that reliably crashes without the fix. The test is added to the QQuickAnimation test as it uses a Qt Quick UI. Fixes: QTBUG-98248 Pick-to: 6.2 6.2.2 5.15 Change-Id: Ief991900c50aefd480d9c79e83324968102ca29c Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* StackView: complete animations when using StackView.Immediate transitionIvan Solovev2021-10-142-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | The idea behind using StackView.Immediate is to immediately move the stack view item into the new state without running any animations. However the preexisting code in QQuickStackViewPrivate::completeTransition was doing nothing, because the animations didn't have the proper target set. So they could never be started and/or completed. As a result, the pushed stack view item could appear at the wrong position and with the other properties set incorrectly (for example, opacity). The new code uses the same approach, as in startTransition(), but simplifies it to execute only the animations. Instead of actually running the animations, a new QAbstractAnimationJob::complete() method is added, which simulates the animation progress by starting the animation, forwarding it to the end, and completing it. This results in all the properties receiving the correct values, and the stack view items being shown correctly. Fixes: QTBUG-96966 Fixes: QTBUG-61496 Pick-to: 6.2 Change-Id: I990a133881c66e3ecb83887c60596a5d45e570d9 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Reset the timer of all controlled animations upon timer destructionVolker Hilsheimer2021-07-232-5/+38
| | | | | | | | | | | | | | | | | | | | | | | | | Fixes a crash when quitting an application while an animation parented within the regular item tree is running. This amends 0e797296f9bb590926803463c32681e7fcd46064, which only turned the crash into a Q_ASSERT failure. As the render thread exits, the QThreadStorage destroys the timer. That left the m_timer of the QAbstractAnimationJob a dangling pointer, so we need to iterate over all registered animtation, and reset that pointer to nullptr. The animation jobs will then be destroyed later as part of regular object tree cleanup. They will set their state to Stopped, which attempted to unregister from the timer, creating one if needed. This also crashed as the QThread was already finished. Don't create the timer if all we want to do is stop the animation anyway. Since testing this requires control over the thread lifecycle, this fix does not come with an auto test. Pick-to: 6.2 Change-Id: Ice0c83818dd712c9e3be1261b79631f639de61a0 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Don't create an animation timer when destroying the animation jobVolker Hilsheimer2021-07-211-1/+1
| | | | | | | | | | | | | | | QQmlAnimationTimer::instance() takes an optional boolean "create" parameter that defaults to true. Creating the timer when shutting down the process requires access to thread-local storage, which might already be destroyed as part of process shutdown, resulting in a segfault from a Q_ASSERT. We don't want to create any timer at this point. Pick-to: 6.2 Change-Id: If73a6a3db138d01e818ee8cbbfa517a7ff14c59c Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Use a QDoubleEndedList for the children of animation group jobsUlf Hermann2021-02-058-115/+92
| | | | | | | | | | 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>
* QSequentialAnimationGroupJob: Protect against self-deletionUlf Hermann2021-02-052-9/+9
| | | | | | | | | | | setCurrentAnimation() can indirectly delete the animation group job itself by invoking the animation controller. Use the RETURN_IF_DELETED mechanism to avoid the resulting dangling pointers. Task-number: QTBUG-90401 Pick-to: 6.1 6.0 5.15 5.12 Change-Id: Ibd0ad21e8d3af4760604c3ff37dc46101d5f49ad Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* QAnimationGroupJob: Don't call virtual functions from dtorUlf Hermann2021-01-222-23/+42
| | | | | | | | | | | | The subclasses are already dead at that point. We don't need to notify them anymore. Rather, refactor the code so that we can clean up QAnimationGroupJob itself without virtual calls. Task-number: QTBUG-90401 Pick-to: 5.12 5.15 6.0 Change-Id: I6917bf299ceb1383b9d29687e5bf53ae36803ecf Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
* Remove the qmake project filesFabian Kosmale2021-01-151-18/+0
| | | | | | | | | Remove all qmake project files, except for examples which are used to test that qmake continues to work. Change-Id: Ic4abb72dc2dcd75df7a797c56056b6b3c5fe62ac Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Rely on default parameter in QUnifiedTimer::updateAnimationTimerVolker Hilsheimer2020-10-151-1/+1
| | | | | | | | Allows that parameter to be removed in qtbase. Change-Id: If409d91d0e3a542106790759b8916858eca546e4 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
* Fix alwaysRunToEnd==true prevented complex Anim from stoppingPiotr Mikolajczyk2020-10-132-0/+4
| | | | | | | | | | AnimatorProxyJob would not forward loopCount to the controlled job causing the sequential or parallel animation to go infinitely after attempt to stop Task-number: QTBUG-82890 Pick-to: 5.15 Change-Id: I6a1ca787f06789064e05407bbe9ae5e5861f24d5 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Remove unused defineNorihito Tohge2020-03-121-2/+0
| | | | | | | It looks like this has never been used since 5.0. Change-Id: I1038a9f15f05b5476515cf2d35931f992e77fbbe Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Fix Qt6 build in preparation of qt5 submodule updateAlexandru Croitor2019-12-195-5/+5
| | | | | | | | | Fixes the QTextStream usages. Change-Id: I0c009a82fb644a9f3c3d42ec410d18b680977f23 (cherry picked from commit 1c5c5f7aadc2dcc73a21eeb818e95c4e1b7de70f) Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Merge remote-tracking branch 'origin/5.12' into 5.13Liang Qi2019-06-193-11/+28
|\ | | | | | | | | | | | | | | | | Conflicts: .qmake.conf src/imports/sharedimage/qsharedimageloader.cpp src/quick/items/qquickitemviewfxitem_p_p.h Change-Id: I12ce7c32788f4a394188a934e689b4ebac78138b
| * Fix crash caused by objects self-destructions during displacement animationsYulong Bai2019-06-173-11/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The root cause was that the QAbstractAnimationJob::finished() might delegate its destruction to change.listener->animationFinished(this), and the original author was aware of that and provided a RETURN_IF_DELETE macro to return early if itself got deleted. In the bug's case, change.listener->animationFinished(this) dispatched to QQuickItemViewPrivate::animationFinished() which called QQuickItemViewPrivate::release() and deleted the QAbstractAnimationJob object itself in the end. However, any objects derived from QAbstractAnimationJob, or holding a pointer to a QAbstractAnimationJob, may potentially fall into the code path calling QAbstractAnimationJob::finished(). Any QAnimationJobChangeListener that directly or indirectly deletes QAbstractAnimationJob should be very suspicious to this kind of "heap-use-after-free" bug. Should ensure that the QAbstractAnimationJob won't be referenced after deletion. In the bug's case, within the code path triggered by ListView displacement animation, the other affected classes by QAbstractAnimationJob are: QQuickItemViewFxItem, QQuickItemViewTransitionableItem, QQuickTransitionManager. To fix this, a new SelfDeletable class is factored out to simplify the self-deletion test logic. Any affected classes are made to have a public member m_selfDeletable. Any code paths that finally reach QAbstractAnimationJob::finished() are wrapped with related util macro. Change-Id: Idd33fc3f2d529fd7d8bb088c329101b1e70dd6c0 Task-number: QTBUG-44308 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* | Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-03-132-8/+6
|\| | | | | | | | | | | | | | | Conflicts: src/qml/compiler/qv4codegen.cpp src/qml/animations/qsequentialanimationgroupjob.cpp Change-Id: I8b76e509fd7c8599d4cef25181d790ee28edab54
| * QAnimationGroupJob: Notify about removed children on clear()Ulf Hermann2019-02-261-7/+3
| | | | | | | | | | | | | | | | | | | | Derived classes, such as QSequentialAnimationGroupJob, might keep additional pointers to the children. Those need to be cleared, too. Therefore, use the regular removeAnimation() method for clearing. Fixes: QTBUG-73828 Change-Id: I64cc1fe4da59f10b29f27012b10f93b4289b6e5a Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Animation: Avoid dangling pointersUlf Hermann2018-12-133-1/+9
|/ | | | | | | | | When we clear a QSequentialAnimationGroupJob, we also need to clear its m_currentAnimation, as that always points to some animation job in its list. Change-Id: I1baae5121b00b5f65e84a7b5363704b6832ed386 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Make QtDeclarative work for the no-thread configMorten Johan Sørvig2018-09-051-5/+0
| | | | | | | | | | | | | Force use of the basic render loop, adapt qqmlthread and qqmltypeloader to work on a single thread. Disable components and features that require worker threads: qmldb_server, worker script, shapes, folderlistmodel, threaded render loop, software renderer. Done-with: Lorn Potter <lorn.potter@gmail.com> Change-Id: I77d965947f684f8b7d19284b5decd893395316cb Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
* Fix build with QT_NO_THREADSimon Hausmann2018-05-281-1/+1
| | | | | Change-Id: I246460709eb45e1fb5a029ca14dd1d931fb0a329 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Merge remote-tracking branch 'origin/5.11' into devQt Forward Merge Bot2018-03-032-2/+2
|\ | | | | | | Change-Id: I308b964d86ca01916f6af7d6e3f71557e3624eca
| * use the override keyword consistently and correctly (clang-tidy)Shawn Rutledge2018-02-272-2/+2
| | | | | | | | | | Change-Id: If9e28d143f8cba3df3c757476b4f2265e2eb8b2a Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into devLiang Qi2018-02-278-31/+29
|\| | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/qml/jsruntime/qv4engine.cpp src/qml/jsruntime/qv4internalclass.cpp src/qml/parser/qqmljslexer.cpp src/qml/qml/v8/qv8engine.cpp src/qml/util/qqmladaptormodel_p.h src/quick/items/qquickanimatedsprite.cpp tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp Change-Id: I16702b7a0da29c2a332afee47728d6a6ebf4fb3f
| * init variables where they are declared when possible (clang-tidy)Shawn Rutledge2018-02-265-13/+11
| | | | | | | | | | | | | | | | clang-tidy -p compile_commands.json $file -checks='-*,modernize-use-default-member-init,readability-redundant-member-init' -config='{CheckOptions: [{key: modernize-use-default-member-init.UseAssignment, value: "1"}]}' -header-filter='qtdeclarative' -fix Change-Id: I705f3235ff129ba68b0d8dad54a083e29fcead5f Reviewed-by: Johan Helsing <johan.helsing@qt.io>
| * use nullptr consistently (clang-tidy)Shawn Rutledge2018-02-264-19/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | From now on we prefer nullptr instead of 0 to clarify cases where we are assigning or testing a pointer rather than a numeric zero. Also, replaced cases where 0 was passed as Qt::KeyboardModifiers with Qt::NoModifier (clang-tidy replaced them with nullptr, which waas wrong, so it was just as well to make the tests more readable rather than to revert those lines). Change-Id: I4735d35e4d9f42db5216862ce091429eadc6e65d Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Add a feature for qml-animationUlf Hermann2018-02-157-0/+14
|/ | | | | | | | | It should be possible to switch it off without globally switching animations off in Qt. Change-Id: I3cae6b72b2c6b5c420f21625208de5e273839438 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Avoid repeated calls into thread local storage to get the animation timerLars Knoll2018-01-222-43/+41
| | | | | | | | | | Instead hold a direct pointer to the animation timer and make it's methods non static. Change-Id: I6382fd2a1c02464ddb573f0210a14c603fd932db Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: J-P Nurmi <jpnurmi@qt.io> Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
* Run includemocs in qtdeclarativeThiago Macieira2017-04-261-0/+1
| | | | | Change-Id: I84e363d735b443cb9beefffd14b8c023a37aa489 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* headers: Add missing override and remove redundant virtualAlexander Volkov2016-12-074-20/+20
| | | | | | Change-Id: Ifa816ebcd79372afca42dbd0dc0ecde006bb688a Reviewed-by: Anton Kudryavtsev <antkudr@mail.ru> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Qml: add missing 'override'Anton Kudryavtsev2016-10-072-7/+7
| | | | | | | ... and drop redundant 'virtual' Change-Id: Ib1f68c1ebd0468cb4a77eecc986bbf718f6bf789 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Fix compilationSimon Hausmann2016-05-241-0/+1
| | | | | | | Add missing qdebug.h include after some header file changes in qtbase. Change-Id: Ie3bc9469650c954596a03fb471765767149b8f05 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Replace QPODVector with a std::vector in QAbstractAnimationJobFrank Meerkoetter2016-04-072-14/+11
| | | | | | | | | | QAbstractAnimationJob::ChangeListener was not a POD type in the first place. The goal is to get rid of QPODVector altogether. Change-Id: Ia04d281d59b9691868a9ce563d2f2794d9db898b Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
* Updated license headersJani Heikkinen2016-01-1913-182/+260
| | | | | | | | | | | 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>
* Add missing "We mean it" comments to private headers.Friedemann Kleint2015-10-067-0/+77
| | | | | | Task-number: QTBUG-48594 Change-Id: Ifc207938de7f0c8995fc712df92665f222612647 Reviewed-by: Alan Alpert <aalpert@blackberry.com>
* QtQml: Fix const correctness in old style castsThiago Macieira2015-07-095-5/+5
| | | | | | | Found with GCC's -Wcast-qual. Change-Id: Ia0aac2f09e9245339951ffff13c958364a2e9859 Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
* Improve debug formatting of QAbstractAnimationJob and related classes.Friedemann Kleint2015-04-022-3/+4
| | | | | | | | | | | - Output the state. - Add output to QQuickAnimatorJob. - Add a private export to the debug operator for use by QQuickAnimatorProxyJob to format its contained job. Task-number: QTBUG-45220 Change-Id: Ic64bb5d949864de1c4fb322d53acc3e253977e5d Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com>
* Update copyright headersJani Heikkinen2015-02-1213-89/+89
| | | | | | | | | 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>
* Update license headers and add new licensesJani Heikkinen2014-08-2513-245/+141
| | | | | | | | | - 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>
* Avoid eventloop recursion in touch event handling.Gunnar Sletta2014-07-312-1/+5
| | | | | | | | | | | | | | | | | | The eventloop recursion in the threaded render loop was there to preempt any pending event to make sure we worked with as recent as possible input events. The benefit of this was never verified. The recursion after the actual flush was to fix animations which were constantly started during touch events, such as a behavior tracking the mouse point. This is fixed differently. Event loop recursion is always dangerous, so we're doing what we can to avoid it. Change-Id: I120b2e98350e3b9068153415a671408773fbc769 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Append the start time of the current loop to the animation time.Gunnar Sletta2014-04-241-1/+1
| | | | | | | | | currentTime() uses the total time, so when we use only the loop-local time for the child animations, normal animations will seem to have terminated long ago (on the previous loop). Change-Id: I80a229f40a99569014d8082d153ad579c09fb9db Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Reset loop counters when animations are started.Gunnar Sletta2014-04-242-1/+4
| | | | | | | | | | Where normal animations would derive the current loop from the current time, uncontrolled animations use an iterative approach and which was not reset when an animation was restarted or a parent had a loop around it. Change-Id: Ia7a1880c8b7578463dff4c5ddeab48324bcb32ee Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Fix sequential animations with uncontrolled looped children.Gunnar Sletta2014-04-241-2/+6
| | | | | | | | | An animation needs to be through all its loop cycles or explicitly stopped before we can consider it finished. Task-number: QTBUG-37246 Change-Id: Ia30b27448ec7a1e0d2dd8165575b8a7105caae8d Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Fix nested parallel/sequential animations combined with animators.Gunnar Sletta2014-04-241-5/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | The logic for looping uncontrolled animations in QAbstractAnimationJob::setCurrentTime assumes that uncontrolled animations return duration == -1, always. The logic falls apart when a duration gets set while the animation is running. To rememdy this, update QParallelAnimation's duration to return -1 for this case. This is also how the sequential group's duration is implemented so these are now using the same pattern. Update the logic in parallel animations to flush previous loops in updateAnimationsTime to handle the case where duration is -1. This solves the case where we have for instance: ParallelAnimation Sequential YAnimator: duration: 1000 ScriptAction ... Sequential Pause duration: 5000 <--- longer than yanimator ScriptAction ... Task-number: QTBUG-37246 Change-Id: I7a1ea547b2f3090feb8b1e87aa7ca746151736fa Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Support dumping of animation jobs via QML_ANIMATION_TICK_DUMP.Michael Brasser2014-04-0812-0/+72
| | | | | Change-Id: I0b444321667691be3e1037164d02f29ed4dfc13e Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
* Don't start continuing animation when it doesn't have children.Gunnar Sletta2014-04-071-2/+5
| | | | | | | If we did, it would never stop. Change-Id: Ie9d8f1731f6fa555f8dd6a56d6967a8f8f19a9f4 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Stop the animation driver when no animations are ticking.Gunnar Sletta2014-04-041-1/+2
| | | | | | | | | | | | | | | | | When animations were registered we made a queued connection to 'startAnimations' to start the animation driver and also set the 'startAnimationPending' state to true. In 'stopTimer' we aborted if 'startAnimationPending' was true, presumeably to avoid stopping just to restart shortly after. However, if an animation is registered which triggers the invoke and then is immediately removed again, 'startAnimationPending' will be true with no pending animations at the time of 'stopTimer'. As a result, the driver would not stop and the system would continue animating and trying to render. Change-Id: Icbb01d7129c3a1bddef08a9f2a7aee957e3d2909 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Don't crash if a ScriptAction changes state mid-transition.Michael Brasser2014-03-131-14/+15
| | | | | Change-Id: Ia85cb128c7410e2276bf4da02f946d3d0bf44989 Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
* Make SmoothedAnimation and SpringAnimation smoothly transition again.Michael Brasser2014-02-205-9/+194
| | | | | | | | | Fix regression introduced in Qt 5.0 when animation backend was rewritten. Task-number: QTBUG-36709 Change-Id: Ib8caa4bc6a38e3bb4c1d1d3961f775fdd2b342c7 Reviewed-by: Martin Jones <martin.jones@jollamobile.com>
* Fix various compiler warnings in order to remove warn_off in the near futureErik Verbruggen2013-11-041-1/+1
| | | | | Change-Id: Ic0492fbe31a1e134674bc6c20381f735dd6d5b7a Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Support looping for "uncontrolled animations".Gunnar Sletta2013-09-265-29/+101
| | | | | | | | | | The render thread animations rely heavily on uncontrolled animations, meaning animations with duration=-1. We support this by adding a m_currentLoopStartTime and incrementally counting the finish time of each uncontrolled animation. Change-Id: I1f2ccea09aff4c51b1a7f98a2ddb58636af50557 Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>