aboutsummaryrefslogtreecommitdiffstats
path: root/src/particles
diff options
context:
space:
mode:
Diffstat (limited to 'src/particles')
-rw-r--r--src/particles/qquickparticlesystem.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/particles/qquickparticlesystem.cpp b/src/particles/qquickparticlesystem.cpp
index db5d607922..be64851a19 100644
--- a/src/particles/qquickparticlesystem.cpp
+++ b/src/particles/qquickparticlesystem.cpp
@@ -931,19 +931,26 @@ void QQuickParticleSystem::emittersChanged()
if (!m_componentComplete)
return;
- m_emitters.removeAll(0);
-
-
- QList<int> previousSizes;
- QList<int> newSizes;
+ QVector<int> previousSizes;
+ QVector<int> newSizes;
+ previousSizes.reserve(m_nextGroupId);
+ newSizes.reserve(m_nextGroupId);
for (int i=0; i<m_nextGroupId; i++) {
previousSizes << groupData[i]->size();
newSizes << 0;
}
- foreach (QQuickParticleEmitter* e, m_emitters) {//Populate groups and set sizes.
- if (!groupIds.contains(e->group())
- || (!e->group().isEmpty() && !groupIds[e->group()])) {//or it was accidentally inserted by a failed lookup earlier
+ // Populate groups and set sizes.
+ for (int i = 0; i < m_emitters.count(); ++i) {
+ QQuickParticleEmitter *e = m_emitters.at(i);
+ if (!e) {
+ m_emitters.removeAt(i);
+ i--;
+ continue;
+ }
+
+ if (!e->group().isEmpty() &&
+ !groupIds.contains(e->group())) {
int id = m_nextGroupId++;
QQuickParticleGroupData* gd = new QQuickParticleGroupData(id, this);
groupIds.insert(e->group(), id);