aboutsummaryrefslogtreecommitdiffstats
path: root/src/particles
diff options
context:
space:
mode:
Diffstat (limited to 'src/particles')
-rw-r--r--src/particles/particles.pri4
-rw-r--r--src/particles/particles.pro1
-rw-r--r--src/particles/qquickcustomaffector.cpp17
-rw-r--r--src/particles/qquickcustomaffector_p.h2
-rw-r--r--src/particles/qquickfriction.cpp2
-rw-r--r--src/particles/qquickparticleemitter.cpp13
-rw-r--r--src/particles/qquickparticleemitter_p.h2
-rw-r--r--src/particles/qquickparticlesystem.cpp8
-rw-r--r--src/particles/qquickparticlesystem_p.h8
-rw-r--r--src/particles/qquicktrailemitter.cpp15
-rw-r--r--src/particles/qquicktrailemitter_p.h2
-rw-r--r--src/particles/qquickv4particledata.cpp (renamed from src/particles/qquickv8particledata.cpp)227
-rw-r--r--src/particles/qquickv4particledata_p.h (renamed from src/particles/qquickv8particledata_p.h)12
13 files changed, 166 insertions, 147 deletions
diff --git a/src/particles/particles.pri b/src/particles/particles.pri
index 3e083ab291..9b41a30d6b 100644
--- a/src/particles/particles.pri
+++ b/src/particles/particles.pri
@@ -25,7 +25,7 @@ HEADERS += \
$$PWD/qquickturbulence_p.h \
$$PWD/qquickwander_p.h \
$$PWD/qquickcumulativedirection_p.h \
- $$PWD/qquickv8particledata_p.h \
+ $$PWD/qquickv4particledata_p.h \
$$PWD/qquickrectangleextruder_p.h \
$$PWD/qquickparticlegroup_p.h \
$$PWD/qquickgroupgoal_p.h \
@@ -58,7 +58,7 @@ SOURCES += \
$$PWD/qquickturbulence.cpp \
$$PWD/qquickwander.cpp \
$$PWD/qquickcumulativedirection.cpp \
- $$PWD/qquickv8particledata.cpp \
+ $$PWD/qquickv4particledata.cpp \
$$PWD/qquickrectangleextruder.cpp \
$$PWD/qquickparticlegroup.cpp \
$$PWD/qquickgroupgoal.cpp
diff --git a/src/particles/particles.pro b/src/particles/particles.pro
index 632856ccca..71be71ae25 100644
--- a/src/particles/particles.pro
+++ b/src/particles/particles.pro
@@ -3,7 +3,6 @@ TARGET = QtQuickParticles
CONFIG += internal_module
QT = core-private gui-private qml-private quick-private
-QT_PRIVATE = v8-private
DEFINES += QT_NO_URL_CAST_FROM_STRING QT_NO_INTEGER_EVENT_COORDINATES
win32-msvc*:DEFINES *= _CRT_SECURE_NO_WARNINGS
diff --git a/src/particles/qquickcustomaffector.cpp b/src/particles/qquickcustomaffector.cpp
index 99984bf804..40d0df1a22 100644
--- a/src/particles/qquickcustomaffector.cpp
+++ b/src/particles/qquickcustomaffector.cpp
@@ -103,7 +103,7 @@ QQuickCustomAffector::QQuickCustomAffector(QQuickItem *parent) :
bool QQuickCustomAffector::isAffectConnected()
{
- IS_SIGNAL_CONNECTED(this, QQuickCustomAffector, affectParticles, (QQmlV8Handle,qreal));
+ IS_SIGNAL_CONNECTED(this, QQuickCustomAffector, affectParticles, (QQmlV4Handle,qreal));
}
void QQuickCustomAffector::affectSystem(qreal dt)
@@ -143,15 +143,16 @@ void QQuickCustomAffector::affectSystem(qreal dt)
if (m_onceOff)
dt = 1.0;
- v8::HandleScope handle_scope;
- v8::Context::Scope scope(QQmlEnginePrivate::getV8Engine(qmlEngine(this))->context());
- v8::Handle<v8::Array> array = v8::Array::New(toAffect.size());
+ QQmlEngine *qmlEngine = ::qmlEngine(this);
+ QV4::ExecutionEngine *v4 = QV8Engine::getV4(qmlEngine->handle());
+
+ QV4::ArrayObject *array = v4->newArrayObject(toAffect.size());
for (int i=0; i<toAffect.size(); i++)
- array->Set(i, toAffect[i]->v8Value().toHandle());
+ array->putIndexed(i, toAffect[i]->v4Value().toValue());
if (dt >= simulationCutoff || dt <= simulationDelta) {
affectProperties(toAffect, dt);
- emit affectParticles(QQmlV8Handle::fromHandle(array), dt);
+ emit affectParticles(QQmlV4Handle(QV4::Value::fromObject(array)), dt);
} else {
int realTime = m_system->timeInt;
m_system->timeInt -= dt * 1000.0;
@@ -159,12 +160,12 @@ void QQuickCustomAffector::affectSystem(qreal dt)
m_system->timeInt += simulationDelta * 1000.0;
dt -= simulationDelta;
affectProperties(toAffect, simulationDelta);
- emit affectParticles(QQmlV8Handle::fromHandle(array), simulationDelta);
+ emit affectParticles(QQmlV4Handle(QV4::Value::fromObject(array)), simulationDelta);
}
m_system->timeInt = realTime;
if (dt > 0.0) {
affectProperties(toAffect, dt);
- emit affectParticles(QQmlV8Handle::fromHandle(array), dt);
+ emit affectParticles(QQmlV4Handle(QV4::Value::fromObject(array)), dt);
}
}
diff --git a/src/particles/qquickcustomaffector_p.h b/src/particles/qquickcustomaffector_p.h
index a4a077f864..1a12684c48 100644
--- a/src/particles/qquickcustomaffector_p.h
+++ b/src/particles/qquickcustomaffector_p.h
@@ -99,7 +99,7 @@ public:
signals:
- void affectParticles(QQmlV8Handle particles, qreal dt);
+ void affectParticles(QQmlV4Handle particles, qreal dt);
void positionChanged(QQuickDirection * arg);
diff --git a/src/particles/qquickfriction.cpp b/src/particles/qquickfriction.cpp
index 6d82408707..4802077100 100644
--- a/src/particles/qquickfriction.cpp
+++ b/src/particles/qquickfriction.cpp
@@ -40,6 +40,8 @@
****************************************************************************/
#include "qquickfriction_p.h"
+#include <math.h>
+
QT_BEGIN_NAMESPACE
/*!
\qmltype Friction
diff --git a/src/particles/qquickparticleemitter.cpp b/src/particles/qquickparticleemitter.cpp
index 6d9b945def..6627291c55 100644
--- a/src/particles/qquickparticleemitter.cpp
+++ b/src/particles/qquickparticleemitter.cpp
@@ -256,7 +256,7 @@ QQuickParticleEmitter::~QQuickParticleEmitter()
bool QQuickParticleEmitter::isEmitConnected()
{
- IS_SIGNAL_CONNECTED(this, QQuickParticleEmitter, emitParticles, (QQmlV8Handle));
+ IS_SIGNAL_CONNECTED(this, QQuickParticleEmitter, emitParticles, (QQmlV4Handle));
}
void QQuickParticleEmitter::componentComplete()
@@ -479,15 +479,16 @@ void QQuickParticleEmitter::emitWindow(int timeStamp)
m_system->emitParticle(d);
if (isEmitConnected()) {
+ QQmlEngine *qmlEngine = ::qmlEngine(this);
+ QV4::ExecutionEngine *v4 = QV8Engine::getV4(qmlEngine->handle());
+
//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());
+ QV4::ArrayObject *array = v4->newArrayObject(toEmit.size());
for (int i=0; i<toEmit.size(); i++)
- array->Set(i, toEmit[i]->v8Value().toHandle());
+ array->putIndexed(i, toEmit[i]->v4Value().toValue());
- emitParticles(QQmlV8Handle::fromHandle(array));//A chance for arbitrary JS changes
+ emitParticles(QQmlV4Handle(QV4::Value::fromObject(array)));//A chance for arbitrary JS changes
}
m_last_emission = pt;
diff --git a/src/particles/qquickparticleemitter_p.h b/src/particles/qquickparticleemitter_p.h
index 70de934f6d..051e27816d 100644
--- a/src/particles/qquickparticleemitter_p.h
+++ b/src/particles/qquickparticleemitter_p.h
@@ -119,7 +119,7 @@ public:
void setVelocityFromMovement(qreal s);
virtual void componentComplete();
signals:
- void emitParticles(QQmlV8Handle particles);
+ void emitParticles(QQmlV4Handle particles);
void particlesPerSecondChanged(qreal);
void particleDurationChanged(int);
void enabledChanged(bool);
diff --git a/src/particles/qquickparticlesystem.cpp b/src/particles/qquickparticlesystem.cpp
index 1e59290ceb..b13020fc7d 100644
--- a/src/particles/qquickparticlesystem.cpp
+++ b/src/particles/qquickparticlesystem.cpp
@@ -46,7 +46,7 @@
#include "qquickparticlepainter_p.h"
#include <private/qquickspriteengine_p.h>
#include <private/qquicksprite_p.h>
-#include "qquickv8particledata_p.h"
+#include "qquickv4particledata_p.h"
#include "qquickparticlegroup_p.h"
#include "qquicktrailemitter_p.h"//###For auto-follow on states, perhaps should be in emitter?
@@ -527,11 +527,11 @@ void QQuickParticleData::clone(const QQuickParticleData& other)
animationOwner = other.animationOwner;
}
-QQmlV8Handle QQuickParticleData::v8Value()
+QQmlV4Handle QQuickParticleData::v4Value()
{
if (!v8Datum)
- v8Datum = new QQuickV8ParticleData(QQmlEnginePrivate::getV8Engine(qmlEngine(system)), this);
- return v8Datum->v8Value();
+ v8Datum = new QQuickV4ParticleData(QQmlEnginePrivate::getV8Engine(qmlEngine(system)), this);
+ return v8Datum->v4Value();
}
//sets the x accleration without affecting the instantaneous x velocity or position
void QQuickParticleData::setInstantaneousAX(qreal ax)
diff --git a/src/particles/qquickparticlesystem_p.h b/src/particles/qquickparticlesystem_p.h
index 1177e30b8f..df57cd2cc7 100644
--- a/src/particles/qquickparticlesystem_p.h
+++ b/src/particles/qquickparticlesystem_p.h
@@ -51,7 +51,7 @@
#include <private/qquicksprite_p.h>
#include <QAbstractAnimation>
#include <QtQml/qqml.h>
-#include <private/qv8engine_p.h> //For QQmlV8Handle
+#include <private/qv8engine_p.h> //For QQmlV4Handle
QT_BEGIN_NAMESPACE
@@ -63,7 +63,7 @@ class QQuickParticleData;
class QQuickParticleSystemAnimation;
class QQuickStochasticEngine;
class QQuickSprite;
-class QQuickV8ParticleData;
+class QQuickV4ParticleData;
class QQuickParticleGroup;
class QQuickImageParticle;
@@ -228,10 +228,10 @@ public:
float lifeLeft();
float curSize();
void clone(const QQuickParticleData& other);//Not =, leaves meta-data like index
- QQmlV8Handle v8Value();
+ QQmlV4Handle v4Value();
void extendLife(float time);
private:
- QQuickV8ParticleData* v8Datum;
+ QQuickV4ParticleData* v8Datum;
};
class Q_AUTOTEST_EXPORT QQuickParticleSystem : public QQuickItem
diff --git a/src/particles/qquicktrailemitter.cpp b/src/particles/qquicktrailemitter.cpp
index 8b14626b54..4f4a05d09a 100644
--- a/src/particles/qquicktrailemitter.cpp
+++ b/src/particles/qquicktrailemitter.cpp
@@ -129,7 +129,7 @@ QQuickTrailEmitter::QQuickTrailEmitter(QQuickItem *parent) :
bool QQuickTrailEmitter::isEmitFollowConnected()
{
- IS_SIGNAL_CONNECTED(this, QQuickTrailEmitter, emitFollowParticles, (QQmlV8Handle,QQmlV8Handle));
+ IS_SIGNAL_CONNECTED(this, QQuickTrailEmitter, emitFollowParticles, (QQmlV4Handle,QQmlV4Handle));
}
void QQuickTrailEmitter::recalcParticlesPerSecond(){
@@ -269,16 +269,17 @@ void QQuickTrailEmitter::emitWindow(int timeStamp)
m_system->emitParticle(d);
if (isEmitConnected() || isEmitFollowConnected()) {
- v8::HandleScope handle_scope;
- v8::Context::Scope scope(QQmlEnginePrivate::getV8Engine(qmlEngine(this))->context());
- v8::Handle<v8::Array> array = v8::Array::New(toEmit.size());
+ QQmlEngine *qmlEngine = ::qmlEngine(this);
+ QV4::ExecutionEngine *v4 = QV8Engine::getV4(qmlEngine->handle());
+
+ QV4::ArrayObject *array = v4->newArrayObject(toEmit.size());
for (int i=0; i<toEmit.size(); i++)
- array->Set(i, toEmit[i]->v8Value().toHandle());
+ array->putIndexed(i, toEmit[i]->v4Value().toValue());
if (isEmitFollowConnected())
- emitFollowParticles(QQmlV8Handle::fromHandle(array), d->v8Value());//A chance for many arbitrary JS changes
+ emitFollowParticles(QQmlV4Handle(QV4::Value::fromObject(array)), d->v4Value());//A chance for many arbitrary JS changes
else if (isEmitConnected())
- emitParticles(QQmlV8Handle::fromHandle(array));//A chance for arbitrary JS changes
+ emitParticles(QQmlV4Handle(QV4::Value::fromObject(array)));//A chance for arbitrary JS changes
}
m_lastEmission[d->index] = pt;
}
diff --git a/src/particles/qquicktrailemitter_p.h b/src/particles/qquicktrailemitter_p.h
index 3ae1507f1a..54041f1751 100644
--- a/src/particles/qquicktrailemitter_p.h
+++ b/src/particles/qquicktrailemitter_p.h
@@ -91,7 +91,7 @@ public:
}
signals:
- void emitFollowParticles(QQmlV8Handle particles, QQmlV8Handle followed);
+ void emitFollowParticles(QQmlV4Handle particles, QQmlV4Handle followed);
void particlesPerParticlePerSecondChanged(int arg);
diff --git a/src/particles/qquickv8particledata.cpp b/src/particles/qquickv4particledata.cpp
index 44f992c163..a5ec20aabb 100644
--- a/src/particles/qquickv8particledata.cpp
+++ b/src/particles/qquickv4particledata.cpp
@@ -39,9 +39,12 @@
**
****************************************************************************/
-#include "qquickv8particledata_p.h"
+#include <math.h>
+#include "qquickv4particledata_p.h"
#include "qquickparticlesystem_p.h"//for QQuickParticleData
#include <QDebug>
+#include <private/qv4engine_p.h>
+#include <private/qv4functionobject_p.h>
QT_BEGIN_NAMESPACE
@@ -268,125 +271,140 @@ QT_BEGIN_NAMESPACE
//### Particle data handles are not locked to within certain scopes like QQuickContext2D, but there's no way to reload either...
-class QV8ParticleDataResource : public QV8ObjectResource
+struct QV4ParticleData : public QV4::Object
{
- V8_RESOURCE_TYPE(ParticleDataType)
-public:
- QV8ParticleDataResource(QV8Engine *e) : QV8ObjectResource(e) {}
+ Q_MANAGED
+ QV4ParticleData(QV4::ExecutionEngine *engine, QQuickParticleData *datum)
+ : Object(engine)
+ {
+ vtbl = &static_vtbl;
+ this->datum = datum;
+ }
+
QQuickParticleData* datum;//TODO: Guard needed?
+
+ static void destroy(Managed *that)
+ { that->as<QV4ParticleData>()->~QV4ParticleData(); }
};
+DEFINE_MANAGED_VTABLE(QV4ParticleData);
+
class QV8ParticleDataDeletable : public QV8Engine::Deletable
{
public:
QV8ParticleDataDeletable(QV8Engine *engine);
~QV8ParticleDataDeletable();
- v8::Persistent<v8::Function> constructor;
+ QV4::PersistentValue proto;
};
-static v8::Handle<v8::Value> particleData_discard(const v8::Arguments &args)
+static QV4::Value particleData_discard(QV4::SimpleCallContext *ctx)
{
- QV8ParticleDataResource *r = v8_resource_cast<QV8ParticleDataResource>(args.This());
+ QV4ParticleData *r = ctx->thisObject.as<QV4ParticleData>();
if (!r || !r->datum)
- V8THROW_ERROR("Not a valid ParticleData object");
+ ctx->throwError(QStringLiteral("Not a valid ParticleData object"));
r->datum->lifeSpan = 0; //Don't kill(), because it could still be in the middle of being created
- return v8::Undefined();
+ return QV4::Value::undefinedValue();
}
-static v8::Handle<v8::Value> particleData_lifeLeft(const v8::Arguments &args)
+static QV4::Value particleData_lifeLeft(QV4::SimpleCallContext *ctx)
{
- QV8ParticleDataResource *r = v8_resource_cast<QV8ParticleDataResource>(args.This());
+ QV4ParticleData *r = ctx->thisObject.as<QV4ParticleData>();
if (!r || !r->datum)
- V8THROW_ERROR("Not a valid ParticleData object");
+ ctx->throwError(QStringLiteral("Not a valid ParticleData object"));
- return v8::Number::New(r->datum->lifeLeft());
+ return QV4::Value::fromDouble(r->datum->lifeLeft());
}
-static v8::Handle<v8::Value> particleData_curSize(const v8::Arguments &args)
+static QV4::Value particleData_curSize(QV4::SimpleCallContext *ctx)
{
- QV8ParticleDataResource *r = v8_resource_cast<QV8ParticleDataResource>(args.This());
+ QV4ParticleData *r = ctx->thisObject.as<QV4ParticleData>();
if (!r || !r->datum)
- V8THROW_ERROR("Not a valid ParticleData object");
+ ctx->throwError(QStringLiteral("Not a valid ParticleData object"));
- return v8::Number::New(r->datum->curSize());
+ return QV4::Value::fromDouble(r->datum->curSize());
}
-#define COLOR_GETTER_AND_SETTER(VAR, NAME) static v8::Handle<v8::Value> particleData_get_ ## NAME (v8::Local<v8::String>, const v8::AccessorInfo &info) \
+#define COLOR_GETTER_AND_SETTER(VAR, NAME) static QV4::Value particleData_get_ ## NAME (QV4::SimpleCallContext *ctx) \
{ \
- QV8ParticleDataResource *r = v8_resource_cast<QV8ParticleDataResource>(info.This()); \
+ QV4ParticleData *r = ctx->thisObject.as<QV4ParticleData>(); \
if (!r || !r->datum) \
- V8THROW_ERROR("Not a valid ParticleData object"); \
+ ctx->throwError(QStringLiteral("Not a valid ParticleData object")); \
\
- return v8::Number::New((r->datum->color. VAR )/255.0);\
+ return QV4::Value::fromDouble((r->datum->color. VAR )/255.0);\
}\
\
-static void particleData_set_ ## NAME (v8::Local<v8::String>, v8::Local<v8::Value> value, const v8::AccessorInfo &info)\
+static QV4::Value particleData_set_ ## NAME (QV4::SimpleCallContext *ctx)\
{\
- QV8ParticleDataResource *r = v8_resource_cast<QV8ParticleDataResource>(info.This());\
+ QV4ParticleData *r = ctx->thisObject.as<QV4ParticleData>(); \
if (!r || !r->datum)\
- V8THROW_ERROR_SETTER("Not a valid ParticleData object");\
+ ctx->throwError(QStringLiteral("Not a valid ParticleData object"));\
\
- r->datum->color. VAR = qMin(255, qMax(0, (int)floor(value->NumberValue() * 255.0)));\
+ r->datum->color. VAR = qMin(255, qMax(0, (int)floor(ctx->argument(0).toNumber() * 255.0)));\
+ return QV4::Value::undefinedValue(); \
}
-#define SEMIBOOL_GETTER_AND_SETTER(VARIABLE) static v8::Handle<v8::Value> particleData_get_ ## VARIABLE (v8::Local<v8::String>, const v8::AccessorInfo &info) \
+#define SEMIBOOL_GETTER_AND_SETTER(VARIABLE) static QV4::Value particleData_get_ ## VARIABLE (QV4::SimpleCallContext *ctx) \
{ \
- QV8ParticleDataResource *r = v8_resource_cast<QV8ParticleDataResource>(info.This()); \
+ QV4ParticleData *r = ctx->thisObject.as<QV4ParticleData>(); \
if (!r || !r->datum) \
- V8THROW_ERROR("Not a valid ParticleData object"); \
+ ctx->throwError(QStringLiteral("Not a valid ParticleData object")); \
\
- return v8::Boolean::New(r->datum-> VARIABLE);\
+ return QV4::Value::fromBoolean(r->datum-> VARIABLE);\
}\
\
-static void particleData_set_ ## VARIABLE (v8::Local<v8::String>, v8::Local<v8::Value> value, const v8::AccessorInfo &info)\
+static QV4::Value particleData_set_ ## VARIABLE (QV4::SimpleCallContext *ctx)\
{\
- QV8ParticleDataResource *r = v8_resource_cast<QV8ParticleDataResource>(info.This());\
+ QV4ParticleData *r = ctx->thisObject.as<QV4ParticleData>(); \
if (!r || !r->datum)\
- V8THROW_ERROR_SETTER("Not a valid ParticleData object");\
+ ctx->throwError(QStringLiteral("Not a valid ParticleData object"));\
\
- r->datum-> VARIABLE = value->BooleanValue() ? 1.0 : 0.0;\
+ r->datum-> VARIABLE = ctx->argument(0).toBoolean() ? 1.0 : 0.0;\
+ return QV4::Value::undefinedValue(); \
}
-#define FLOAT_GETTER_AND_SETTER(VARIABLE) static v8::Handle<v8::Value> particleData_get_ ## VARIABLE (v8::Local<v8::String>, const v8::AccessorInfo &info) \
+#define FLOAT_GETTER_AND_SETTER(VARIABLE) static QV4::Value particleData_get_ ## VARIABLE (QV4::SimpleCallContext *ctx) \
{ \
- QV8ParticleDataResource *r = v8_resource_cast<QV8ParticleDataResource>(info.This()); \
+ QV4ParticleData *r = ctx->thisObject.as<QV4ParticleData>(); \
if (!r || !r->datum) \
- V8THROW_ERROR("Not a valid ParticleData object"); \
+ ctx->throwError(QStringLiteral("Not a valid ParticleData object")); \
\
- return v8::Number::New(r->datum-> VARIABLE);\
+ return QV4::Value::fromDouble(r->datum-> VARIABLE);\
}\
\
-static void particleData_set_ ## VARIABLE (v8::Local<v8::String>, v8::Local<v8::Value> value, const v8::AccessorInfo &info)\
+static QV4::Value particleData_set_ ## VARIABLE (QV4::SimpleCallContext *ctx)\
{\
- QV8ParticleDataResource *r = v8_resource_cast<QV8ParticleDataResource>(info.This());\
+ QV4ParticleData *r = ctx->thisObject.as<QV4ParticleData>(); \
if (!r || !r->datum)\
- V8THROW_ERROR_SETTER("Not a valid ParticleData object");\
+ ctx->throwError(QStringLiteral("Not a valid ParticleData object"));\
\
- r->datum-> VARIABLE = value->NumberValue();\
+ r->datum-> VARIABLE = ctx->argument(0).toNumber();\
+ return QV4::Value::undefinedValue(); \
}
-#define FAKE_FLOAT_GETTER_AND_SETTER(VARIABLE, GETTER, SETTER) static v8::Handle<v8::Value> particleData_get_ ## VARIABLE (v8::Local<v8::String>, const v8::AccessorInfo &info) \
+#define FAKE_FLOAT_GETTER_AND_SETTER(VARIABLE, GETTER, SETTER) static QV4::Value particleData_get_ ## VARIABLE (QV4::SimpleCallContext *ctx) \
{ \
- QV8ParticleDataResource *r = v8_resource_cast<QV8ParticleDataResource>(info.This()); \
+ QV4ParticleData *r = ctx->thisObject.as<QV4ParticleData>(); \
if (!r || !r->datum) \
- V8THROW_ERROR("Not a valid ParticleData object"); \
+ ctx->throwError(QStringLiteral("Not a valid ParticleData object")); \
\
- return v8::Number::New(r->datum-> GETTER ());\
+ return QV4::Value::fromDouble(r->datum-> GETTER ());\
}\
\
-static void particleData_set_ ## VARIABLE (v8::Local<v8::String>, v8::Local<v8::Value> value, const v8::AccessorInfo &info)\
+static QV4::Value particleData_set_ ## VARIABLE (QV4::SimpleCallContext *ctx)\
{\
- QV8ParticleDataResource *r = v8_resource_cast<QV8ParticleDataResource>(info.This());\
+ QV4ParticleData *r = ctx->thisObject.as<QV4ParticleData>(); \
if (!r || !r->datum)\
- V8THROW_ERROR_SETTER("Not a valid ParticleData object");\
+ ctx->throwError(QStringLiteral("Not a valid ParticleData object"));\
\
- r->datum-> SETTER ( value->NumberValue() );\
+ r->datum-> SETTER ( ctx->argument(0).toNumber() );\
+ return QV4::Value::undefinedValue(); \
}
-#define REGISTER_ACCESSOR(FT, ENGINE, VARIABLE, NAME) FT ->PrototypeTemplate()->SetAccessor( v8::String::New( #NAME ), particleData_get_ ## VARIABLE , particleData_set_ ## VARIABLE , v8::External::New(ENGINE))
+#define REGISTER_ACCESSOR(PROTO, ENGINE, VARIABLE, NAME) \
+ PROTO ->defineAccessorProperty( ENGINE, QStringLiteral( #NAME ), particleData_get_ ## VARIABLE , particleData_set_ ## VARIABLE )
COLOR_GETTER_AND_SETTER(r, red)
COLOR_GETTER_AND_SETTER(g, green)
@@ -425,82 +443,77 @@ FAKE_FLOAT_GETTER_AND_SETTER(curAY, curAY, setInstantaneousAY)
QV8ParticleDataDeletable::QV8ParticleDataDeletable(QV8Engine *engine)
{
- v8::HandleScope handle_scope;
- v8::Context::Scope scope(engine->context());
-
- v8::Local<v8::FunctionTemplate> ft = v8::FunctionTemplate::New();
- ft->InstanceTemplate()->SetHasExternalResource(true);
- ft->PrototypeTemplate()->Set(v8::String::New("discard"), V8FUNCTION(particleData_discard, engine));
- ft->PrototypeTemplate()->Set(v8::String::New("lifeLeft"), V8FUNCTION(particleData_lifeLeft, engine));
- ft->PrototypeTemplate()->Set(v8::String::New("currentSize"), V8FUNCTION(particleData_curSize, engine));
- REGISTER_ACCESSOR(ft, engine, x, initialX);
- REGISTER_ACCESSOR(ft, engine, y, initialY);
- REGISTER_ACCESSOR(ft, engine, t, t);
- REGISTER_ACCESSOR(ft, engine, lifeSpan, lifeSpan);
- REGISTER_ACCESSOR(ft, engine, size, startSize);
- REGISTER_ACCESSOR(ft, engine, endSize, endSize);
- REGISTER_ACCESSOR(ft, engine, vx, initialVX);
- REGISTER_ACCESSOR(ft, engine, vy, initialVY);
- REGISTER_ACCESSOR(ft, engine, ax, initialAX);
- REGISTER_ACCESSOR(ft, engine, ay, initialAY);
- REGISTER_ACCESSOR(ft, engine, xx, xDeformationVectorX);
- REGISTER_ACCESSOR(ft, engine, xy, xDeformationVectorY);
- REGISTER_ACCESSOR(ft, engine, yx, yDeformationVectorX);
- REGISTER_ACCESSOR(ft, engine, yy, yDeformationVectorY);
- REGISTER_ACCESSOR(ft, engine, rotation, rotation);
- REGISTER_ACCESSOR(ft, engine, rotationVelocity, rotationVelocity);
- REGISTER_ACCESSOR(ft, engine, autoRotate, autoRotate);
- REGISTER_ACCESSOR(ft, engine, animIdx, animationIndex);
- REGISTER_ACCESSOR(ft, engine, frameDuration, frameDuration);
- REGISTER_ACCESSOR(ft, engine, frameAt, frameAt);
- REGISTER_ACCESSOR(ft, engine, frameCount, frameCount);
- REGISTER_ACCESSOR(ft, engine, animT, animationT);
- REGISTER_ACCESSOR(ft, engine, r, r);
- REGISTER_ACCESSOR(ft, engine, update, update);
- REGISTER_ACCESSOR(ft, engine, curX, x);
- REGISTER_ACCESSOR(ft, engine, curVX, vx);
- REGISTER_ACCESSOR(ft, engine, curAX, ax);
- REGISTER_ACCESSOR(ft, engine, curY, y);
- REGISTER_ACCESSOR(ft, engine, curVY, vy);
- REGISTER_ACCESSOR(ft, engine, curAY, ay);
- REGISTER_ACCESSOR(ft, engine, red, red);
- REGISTER_ACCESSOR(ft, engine, green, green);
- REGISTER_ACCESSOR(ft, engine, blue, blue);
- REGISTER_ACCESSOR(ft, engine, alpha, alpha);
-
- constructor = qPersistentNew(ft->GetFunction());
+ QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine);
+ QV4::Object *p = v4->newObject();
+
+ p->defineDefaultProperty(v4, QStringLiteral("discard"), particleData_discard);
+ p->defineDefaultProperty(v4, QStringLiteral("lifeLeft"), particleData_lifeLeft);
+ p->defineDefaultProperty(v4, QStringLiteral("currentSize"), particleData_curSize);
+
+ REGISTER_ACCESSOR(p, v4, x, initialX);
+ REGISTER_ACCESSOR(p, v4, y, initialY);
+ REGISTER_ACCESSOR(p, v4, t, t);
+ REGISTER_ACCESSOR(p, v4, lifeSpan, lifeSpan);
+ REGISTER_ACCESSOR(p, v4, size, startSize);
+ REGISTER_ACCESSOR(p, v4, endSize, endSize);
+ REGISTER_ACCESSOR(p, v4, vx, initialVX);
+ REGISTER_ACCESSOR(p, v4, vy, initialVY);
+ REGISTER_ACCESSOR(p, v4, ax, initialAX);
+ REGISTER_ACCESSOR(p, v4, ay, initialAY);
+ REGISTER_ACCESSOR(p, v4, xx, xDeformationVectorX);
+ REGISTER_ACCESSOR(p, v4, xy, xDeformationVectorY);
+ REGISTER_ACCESSOR(p, v4, yx, yDeformationVectorX);
+ REGISTER_ACCESSOR(p, v4, yy, yDeformationVectorY);
+ REGISTER_ACCESSOR(p, v4, rotation, rotation);
+ REGISTER_ACCESSOR(p, v4, rotationVelocity, rotationVelocity);
+ REGISTER_ACCESSOR(p, v4, autoRotate, autoRotate);
+ REGISTER_ACCESSOR(p, v4, animIdx, animationIndex);
+ REGISTER_ACCESSOR(p, v4, frameDuration, frameDuration);
+ REGISTER_ACCESSOR(p, v4, frameAt, frameAt);
+ REGISTER_ACCESSOR(p, v4, frameCount, frameCount);
+ REGISTER_ACCESSOR(p, v4, animT, animationT);
+ REGISTER_ACCESSOR(p, v4, r, r);
+ REGISTER_ACCESSOR(p, v4, update, update);
+ REGISTER_ACCESSOR(p, v4, curX, x);
+ REGISTER_ACCESSOR(p, v4, curVX, vx);
+ REGISTER_ACCESSOR(p, v4, curAX, ax);
+ REGISTER_ACCESSOR(p, v4, curY, y);
+ REGISTER_ACCESSOR(p, v4, curVY, vy);
+ REGISTER_ACCESSOR(p, v4, curAY, ay);
+ REGISTER_ACCESSOR(p, v4, red, red);
+ REGISTER_ACCESSOR(p, v4, green, green);
+ REGISTER_ACCESSOR(p, v4, blue, blue);
+ REGISTER_ACCESSOR(p, v4, alpha, alpha);
+
+ proto = QV4::Value::fromObject(p);
}
QV8ParticleDataDeletable::~QV8ParticleDataDeletable()
{
- qPersistentDispose(constructor);
}
V8_DEFINE_EXTENSION(QV8ParticleDataDeletable, particleV8Data);
-QQuickV8ParticleData::QQuickV8ParticleData(QV8Engine* engine, QQuickParticleData* datum)
+QQuickV4ParticleData::QQuickV4ParticleData(QV8Engine* engine, QQuickParticleData* datum)
{
if (!engine || !datum)
return;
- v8::HandleScope handle_scope;
- v8::Context::Scope scope(engine->context());
QV8ParticleDataDeletable *d = particleV8Data(engine);
- m_v8Value = qPersistentNew(d->constructor->NewInstance());
- QV8ParticleDataResource *r = new QV8ParticleDataResource(engine);
- r->datum = datum;
- m_v8Value->SetExternalResource(r);
+ QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine);
+ QV4::Object *o = new (v4->memoryManager) QV4ParticleData(v4, datum);
+ o->prototype = d->proto.value().asObject();
+ m_v4Value = QV4::Value::fromObject(o);
}
-QQuickV8ParticleData::~QQuickV8ParticleData()
+QQuickV4ParticleData::~QQuickV4ParticleData()
{
- qPersistentDispose(m_v8Value);
}
-QQmlV8Handle QQuickV8ParticleData::v8Value()
+QQmlV4Handle QQuickV4ParticleData::v4Value()
{
- return QQmlV8Handle::fromHandle(m_v8Value);
+ return QQmlV4Handle(m_v4Value);
}
QT_END_NAMESPACE
diff --git a/src/particles/qquickv8particledata_p.h b/src/particles/qquickv4particledata_p.h
index e3c1bf9324..b3614f94ff 100644
--- a/src/particles/qquickv8particledata_p.h
+++ b/src/particles/qquickv4particledata_p.h
@@ -44,16 +44,18 @@
#include <private/qv8engine_p.h>
+#include <private/qv4value_p.h>
+
QT_BEGIN_NAMESPACE
class QQuickParticleData;
-class QQuickV8ParticleData {
+class QQuickV4ParticleData {
public:
- QQuickV8ParticleData(QV8Engine*,QQuickParticleData*);
- ~QQuickV8ParticleData();
- QQmlV8Handle v8Value();
+ QQuickV4ParticleData(QV8Engine*,QQuickParticleData*);
+ ~QQuickV4ParticleData();
+ QQmlV4Handle v4Value();
private:
- v8::Persistent<v8::Object> m_v8Value;
+ QV4::PersistentValue m_v4Value;
};