8#include <private/qqmlglobal_p.h>
9#include <private/qquickv4particledata_p.h>
11#include <QtCore/qrandom.h>
30 , m_particlesPerParticlePerSecond(0)
32 , m_emitterXVariation(0)
33 , m_emitterYVariation(0)
40 this, &QQuickTrailEmitter::recalcParticlesPerSecond);
42 this, &QQuickTrailEmitter::recalcParticlesPerSecond);
44 this, &QQuickTrailEmitter::recalcParticlesPerSecond);
98bool QQuickTrailEmitter::isEmitFollowConnected()
105void QQuickTrailEmitter::recalcParticlesPerSecond(){
113 m_lastEmission.resize(m_followCount);
114 m_lastEmission.fill(m_lastTimeStamp);
131 recalcParticlesPerSecond();
137 m_pulseLeft -= timeStamp - m_lastTimeStamp * 1000.;
146 qreal particleRatio = 1. / m_particlesPerParticlePerSecond;
159 m_lastEmission[
i] =
time;
162 pt = m_lastEmission[
i];
165 if (pt + maxLife <
time)
170 m_lastEmission[
d->index] =
time;
174 QList<QQuickParticleData*> toEmit;
188 qreal followT = pt -
d->t;
189 qreal followT2 = followT * followT * 0.5;
190 qreal eW = m_emitterXVariation < 0 ?
d->curSize(
m_system) : m_emitterXVariation;
191 qreal eH = m_emitterYVariation < 0 ?
d->curSize(
m_system) : m_emitterYVariation;
193 QRectF boundsRect(
d->x -
offset.x() +
d->vx * followT +
d->ax * followT2 - eW/2,
194 d->y -
offset.y() +
d->vy * followT +
d->ay * followT2 - eH/2,
197 QQuickParticleExtruder* effectiveEmissionExtruder = m_emissionExtruder ? m_emissionExtruder : m_defaultEmissionExtruder;
198 const QPointF &newPos = effectiveEmissionExtruder->extrude(boundsRect);
199 datum->
x = newPos.
x();
200 datum->
y = newPos.
y();
211 datum->
ax = accel.
x();
212 datum->
ay = accel.
y();
242 QList<QQuickV4ParticleData> particles;
243 particles.reserve(toEmit.size());
245 particles.push_back(particle->v4Value(
m_system));
247 if (isEmitFollowConnected()) {
254 m_lastEmission[
d->index] = pt;
257 m_lastTimeStamp =
time;
261#include "moc_qquicktrailemitter_p.cpp"
bool isEmpty() const noexcept
void pop_front() noexcept
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
\inmodule QtCore\reentrant
constexpr qreal x() const noexcept
Returns the x coordinate of this point.
constexpr qreal y() const noexcept
Returns the y coordinate of this point.
virtual QPointF sample(const QPointF &from)
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
Q_INVOKABLE QPointF mapFromItem(const QQuickItem *item, const QPointF &point) const
Maps the given point in item's coordinate system to the equivalent point within this item's coordinat...
virtual Q_INVOKABLE bool contains(const QPointF &point) const
\qmlmethod bool QtQuick::Item::contains(point point)
qreal width
This property holds the width of this item.
qreal height
This property holds the height of this item.
QQuickDirection * velocity
QQuickDirection * m_velocity
void emitParticles(const QList< QQuickV4ParticleData > &particles)
QQuickParticleSystem * m_system
qreal m_velocity_from_movement
qreal m_particleSizeVariation
int m_particleDurationVariation
QQuickDirection * m_acceleration
void particleDurationChanged(int)
void setParticlesPerSecond(qreal arg)
QList< QPair< int, QPointF > > m_burstQueue
QQuickParticleExtruder * effectiveExtruder()
qreal m_particlesPerSecond
QQuickParticleGroupData::ID groupId() const
QQuickParticleData * newDatum(int groupId, bool respectLimits=true, int sysIdx=-1, const QQuickParticleData *cloneFrom=nullptr)
void emitParticle(QQuickParticleData *p, QQuickParticleEmitter *particleEmitter)
QVarLengthArray< QQuickParticleGroupData *, 32 > groupData
QHash< QString, int > groupIds
void followChanged(const QString &arg)
void emitFollowParticles(const QList< QQuickV4ParticleData > &particles, const QQuickV4ParticleData &followed)
QQuickTrailEmitter(QQuickItem *parent=nullptr)
\qmltype TrailEmitter \instantiates QQuickTrailEmitter \inqmlmodule QtQuick.Particles \inherits QQuic...
void emitWindow(int timeStamp) override
void particlesPerParticlePerSecondChanged(int arg)
static Q_DECL_CONST_FUNCTION QRandomGenerator * global()
\threadsafe
\inmodule QtCore\reentrant
constexpr size_type size() const noexcept
Combined button and popup list for selecting options.
constexpr const T & qMax(const T &a, const T &b)
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLuint GLintptr offset
#define IS_SIGNAL_CONNECTED(Sender, SenderType, Name, Arguments)