aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/particles/qquickitemparticle.cpp22
-rw-r--r--src/quick/particles/qquickitemparticle_p.h7
-rw-r--r--tests/auto/particles/qquickitemparticle/qquickitemparticle.pro2
3 files changed, 18 insertions, 13 deletions
diff --git a/src/quick/particles/qquickitemparticle.cpp b/src/quick/particles/qquickitemparticle.cpp
index 56661ffde1..0b7cbe4661 100644
--- a/src/quick/particles/qquickitemparticle.cpp
+++ b/src/quick/particles/qquickitemparticle.cpp
@@ -103,12 +103,8 @@ QQuickItemParticle::QQuickItemParticle(QQuickItem *parent) :
QQuickParticlePainter(parent), m_fade(true), m_delegate(0)
{
setFlag(QQuickItem::ItemHasContents);
- QTimer* manageDelegates = new QTimer(this);//TODO: don't leak
- connect(manageDelegates, SIGNAL(timeout()),
- this, SLOT(tick()));
- manageDelegates->setInterval(16);
- manageDelegates->setSingleShot(false);
- manageDelegates->start();
+ clock = new Clock(this, this);
+ clock->start();
}
@@ -146,8 +142,9 @@ void QQuickItemParticle::commit(int, int)
{
}
-void QQuickItemParticle::tick()
+void QQuickItemParticle::tick(int time)
{
+ Q_UNUSED(time);//only needed because QTickAnimationProxy expects one
foreach (QQuickItem* item, m_deletables){
if (m_fade)
item->setOpacity(0.);
@@ -194,8 +191,8 @@ void QQuickItemParticle::tick()
void QQuickItemParticle::reset()
{
QQuickParticlePainter::reset();
- //TODO: Cleanup items?
m_loadables.clear();
+ //TODO: Cleanup items?
//deletables?
}
@@ -205,7 +202,14 @@ QSGNode* QQuickItemParticle::updatePaintNode(QSGNode* n, UpdatePaintNodeData* d)
//Dummy update just to get painting tick
if (m_pleaseReset){
m_pleaseReset = false;
- reset();
+ //Refill loadables, delayed here so as to only happen once per frame max
+ //### Constant resetting might lead to m_loadables never being populated when tick() occurs
+ foreach (const QString group, m_groups){
+ int gIdx = m_system->groupIds[group];
+ foreach (QQuickParticleData* d, m_system->groupData[gIdx]->data)
+ if (!d->delegate && d->t != -1 && d->stillAlive())
+ m_loadables << d;
+ }
}
prepareNextFrame();
diff --git a/src/quick/particles/qquickitemparticle_p.h b/src/quick/particles/qquickitemparticle_p.h
index 84f60ace31..d5284430e2 100644
--- a/src/quick/particles/qquickitemparticle_p.h
+++ b/src/quick/particles/qquickitemparticle_p.h
@@ -44,6 +44,7 @@
#include "qquickparticlepainter_p.h"
#include <QPointer>
#include <QSet>
+#include <private/qdeclarativeanimation_p_p.h>
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -95,9 +96,8 @@ protected:
virtual void commit(int gIdx, int pIdx);
virtual void initialize(int gIdx, int pIdx);
void prepareNextFrame();
-private slots:
- void tick();
private:
+ void tick(int time = 0);
QList<QQuickItem* > m_deletables;
QList< QQuickParticleData* > m_loadables;
bool m_fade;
@@ -108,6 +108,9 @@ private:
qreal m_lastT;
int m_activeCount;
QDeclarativeComponent* m_delegate;
+
+ typedef QTickAnimationProxy<QQuickItemParticle, &QQuickItemParticle::tick> Clock;
+ Clock *clock;
};
class QQuickItemParticleAttached : public QObject
diff --git a/tests/auto/particles/qquickitemparticle/qquickitemparticle.pro b/tests/auto/particles/qquickitemparticle/qquickitemparticle.pro
index 9d78c2b49d..c36dabbc14 100644
--- a/tests/auto/particles/qquickitemparticle/qquickitemparticle.pro
+++ b/tests/auto/particles/qquickitemparticle/qquickitemparticle.pro
@@ -7,7 +7,5 @@ testDataFiles.files = data
testDataFiles.path = .
DEPLOYMENT += testDataFiles
-CONFIG += insignificant_test #temporary
-
QT += core-private gui-private v8-private declarative-private quick-private opengl-private testlib