diff --git a/examples/particles/emitters/customemitter.qml b/examples/particles/emitters/customemitter.qml index 757c8361063cbd59872ada563e1cab376ddc6a0e..135b3d781c4282e011a5b2d624e1656325260784 100644 --- a/examples/particles/emitters/customemitter.qml +++ b/examples/particles/emitters/customemitter.qml @@ -72,7 +72,11 @@ ParticleSystem { for (var i=0; i<particles.length; i++) { var particle = particles[i]; particle.startSize = Math.max(02,Math.min(492,Math.tan(particle.t/2)*24)); - var theta = Math.floor(Math.random() * 6.0) / 6.0; + var theta = Math.floor(Math.random() * 6.0); + particle.red = theta == 0 || theta == 1 || theta == 2 ? 0.2 : 1; + particle.green = theta == 2 || theta == 3 || theta == 4 ? 0.2 : 1; + particle.blue = theta == 4 || theta == 5 || theta == 0 ? 0.2 : 1; + theta /= 6.0; theta *= 2.0*Math.PI; theta += sys.convert(sys.petalRotation); particle.initialVX = petalLength * Math.cos(theta); @@ -86,7 +90,5 @@ ParticleSystem { ImageParticle { source: "../images/particle4.png" alpha: 0.0 - redVariation: 0.6 - color: "white" } } diff --git a/src/particles/qquickparticleemitter.cpp b/src/particles/qquickparticleemitter.cpp index 6e53b0940ce669ea677573f8013672d8b3ee0962..7db1707d740e77ddfb05a6b112333f30eeed256a 100644 --- a/src/particles/qquickparticleemitter.cpp +++ b/src/particles/qquickparticleemitter.cpp @@ -472,7 +472,12 @@ void QQuickParticleEmitter::emitWindow(int timeStamp) } } + foreach (QQuickParticleData* d, toEmit) + m_system->emitParticle(d); + if (isEmitConnected()) { + //Done after emitParticle so that the Painter::load is done first, this allows you to customize its static variables + //We then don't need to request another reload, because the first reload isn't scheduled until we get back to the render thread v8::HandleScope handle_scope; v8::Context::Scope scope(QQmlEnginePrivate::getV8Engine(qmlEngine(this))->context()); v8::Handle<v8::Array> array = v8::Array::New(toEmit.size()); @@ -481,8 +486,6 @@ void QQuickParticleEmitter::emitWindow(int timeStamp) emitParticles(QQmlV8Handle::fromHandle(array));//A chance for arbitrary JS changes } - foreach (QQuickParticleData* d, toEmit) - m_system->emitParticle(d); m_last_emission = pt; diff --git a/src/particles/qquicktrailemitter.cpp b/src/particles/qquicktrailemitter.cpp index 68b43a0e991372d2b8e903e4a81650beec21d819..5f094105e1ff9e2cb8e0e2ce65912fdcd30ef65c 100644 --- a/src/particles/qquicktrailemitter.cpp +++ b/src/particles/qquicktrailemitter.cpp @@ -118,7 +118,7 @@ QQuickTrailEmitter::QQuickTrailEmitter(QQuickItem *parent) : \qmlproperty real QtQuick.Particles2::TrailEmitter::emitRatePerParticle */ /*! - \qmlsignal QtQuick.Particles2::TrailEmitter::emitFollowParticles(Array particles, real followed) + \qmlsignal QtQuick.Particles2::TrailEmitter::emitFollowParticles(Array particles, QtQuick.Particles2::Particle followed) This handler is called when particles are emitted from the \a followed particle. \a particles contains an array of particle objects which can be directly manipulated. @@ -264,6 +264,9 @@ void QQuickTrailEmitter::emitWindow(int timeStamp) } } + foreach (QQuickParticleData* d, toEmit) + m_system->emitParticle(d); + if (isEmitConnected() || isEmitFollowConnected()) { v8::HandleScope handle_scope; v8::Context::Scope scope(QQmlEnginePrivate::getV8Engine(qmlEngine(this))->context()); @@ -276,8 +279,6 @@ void QQuickTrailEmitter::emitWindow(int timeStamp) else if (isEmitConnected()) emitParticles(QQmlV8Handle::fromHandle(array));//A chance for arbitrary JS changes } - foreach (QQuickParticleData* d, toEmit) - m_system->emitParticle(d); m_lastEmission[d->index] = pt; }