5#include <private/qqmlengine_p.h>
6#include <private/qqmlglobal_p.h>
7#include <private/qjsvalue_p.h>
8#include <QRandomGenerator>
25 , m_particlesPerParticlePerSecond(0)
27 , m_emitterXVariation(0)
28 , m_emitterYVariation(0)
35 this,
SLOT(recalcParticlesPerSecond()));
37 this,
SLOT(recalcParticlesPerSecond()));
39 this,
SLOT(recalcParticlesPerSecond()));
93bool QQuickTrailEmitter::isEmitFollowConnected()
99void QQuickTrailEmitter::recalcParticlesPerSecond(){
107 m_lastEmission.resize(m_followCount);
108 m_lastEmission.fill(m_lastTimeStamp);
125 recalcParticlesPerSecond();
131 m_pulseLeft -= timeStamp - m_lastTimeStamp * 1000.;
140 qreal particleRatio = 1. / m_particlesPerParticlePerSecond;
153 m_lastEmission[
i] =
time;
156 pt = m_lastEmission[
i];
159 if (pt + maxLife <
time)
164 m_lastEmission[
d->index] =
time;
182 qreal followT = pt -
d->t;
183 qreal followT2 = followT * followT * 0.5;
184 qreal eW = m_emitterXVariation < 0 ?
d->curSize(
m_system) : m_emitterXVariation;
185 qreal eH = m_emitterYVariation < 0 ?
d->curSize(
m_system) : m_emitterYVariation;
187 QRectF boundsRect(
d->x -
offset.x() +
d->vx * followT +
d->ax * followT2 - eW/2,
188 d->y -
offset.y() +
d->vy * followT +
d->ay * followT2 - eH/2,
191 QQuickParticleExtruder* effectiveEmissionExtruder = m_emissionExtruder ? m_emissionExtruder : m_defaultEmissionExtruder;
192 const QPointF &newPos = effectiveEmissionExtruder->
extrude(boundsRect);
193 datum->
x = newPos.
x();
194 datum->
y = newPos.
y();
205 datum->
ax = accel.
x();
206 datum->
ay = accel.
y();
241 for (
int i=0;
i<toEmit.
size();
i++)
246 if (isEmitFollowConnected()) {
254 m_lastEmission[
d->index] = pt;
257 m_lastTimeStamp =
time;
261#include "moc_qquicktrailemitter_p.cpp"
QV4::ExecutionEngine * handle() const
static QJSValue fromReturnedValue(QV4::ReturnedValue d)
static void setValue(QJSValue *jsval, const QV4::Value &v)
The QJSValue class acts as a container for Qt/JavaScript data types.
qsizetype size() const noexcept
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.
The QQmlEngine class provides an environment for instantiating QML components.
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
void emitParticles(const QJSValue &particles)
QQuickDirection * m_velocity
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
virtual QPointF extrude(const QRectF &)
void emitParticle(QQuickParticleData *p, QQuickParticleEmitter *particleEmitter)
QVarLengthArray< QQuickParticleGroupData *, 32 > groupData
QHash< QString, int > groupIds
QQuickParticleData * newDatum(int groupId, bool respectLimits=true, int sysIdx=-1)
void followChanged(const QString &arg)
QQuickTrailEmitter(QQuickItem *parent=nullptr)
\qmltype TrailEmitter \instantiates QQuickTrailEmitter \inqmlmodule QtQuick.Particles \inherits QQuic...
void emitFollowParticles(const QJSValue &particles, const QJSValue &followed)
void emitWindow(int timeStamp) override
void particlesPerParticlePerSecondChanged(int arg)
double generateDouble()
Generates one random qreal in the canonical range [0, 1) (that is, inclusive of zero and exclusive of...
static Q_DECL_CONST_FUNCTION QRandomGenerator * global()
\threadsafe
double bounded(double highest)
Generates one random double in the range between 0 (inclusive) and highest (exclusive).
\inmodule QtCore\reentrant
\macro QT_RESTRICTED_CAST_FROM_ASCII
constexpr size_type size() const noexcept
Combined button and popup list for selecting options.
constexpr const T & qMax(const T &a, const T &b)
GLsizei const GLfloat * v
[13]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLuint GLintptr offset
QQmlEngine * qmlEngine(const QObject *obj)
#define IS_SIGNAL_CONNECTED(Sender, SenderType, Name, Arguments)
Heap::ArrayObject * newArrayObject(int count=0)
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent