diff options
Diffstat (limited to 'src/particles/qquickv4particledata.cpp')
-rw-r--r-- | src/particles/qquickv4particledata.cpp | 92 |
1 files changed, 45 insertions, 47 deletions
diff --git a/src/particles/qquickv4particledata.cpp b/src/particles/qquickv4particledata.cpp index 1d7b7abd9c..bd73509eeb 100644 --- a/src/particles/qquickv4particledata.cpp +++ b/src/particles/qquickv4particledata.cpp @@ -273,18 +273,16 @@ QT_BEGIN_NAMESPACE //### Particle data handles are not locked to within certain scopes like QQuickContext2D, but there's no way to reload either... struct QV4ParticleData : public QV4::Object { - V4_OBJECT - QV4ParticleData(QV4::ExecutionEngine *engine, QQuickParticleData *datum) - : Object(engine) - { - setVTable(staticVTable()); - this->datum = datum; - } - - QQuickParticleData* datum;//TODO: Guard needed? - - static void destroy(Managed *that) - { that->as<QV4ParticleData>()->~QV4ParticleData(); } + struct Data : QV4::Object::Data { + Data(QV4::ExecutionEngine *engine, QQuickParticleData *datum) + : Object::Data(engine) + , datum(datum) + { + setVTable(QV4ParticleData::staticVTable()); + } + QQuickParticleData* datum;//TODO: Guard needed? + }; + V4_OBJECT(QV4::Object) }; DEFINE_OBJECT_VTABLE(QV4ParticleData); @@ -301,55 +299,55 @@ public: static QV4::ReturnedValue particleData_discard(QV4::CallContext *ctx) { QV4::Scope scope(ctx); - QV4::Scoped<QV4ParticleData> r(scope, ctx->callData->thisObject); + QV4::Scoped<QV4ParticleData> r(scope, ctx->d()->callData->thisObject); - if (!r || !r->datum) + if (!r || !r->d()->datum) return 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 + r->d()->datum->lifeSpan = 0; //Don't kill(), because it could still be in the middle of being created return QV4::Encode::undefined(); } static QV4::ReturnedValue particleData_lifeLeft(QV4::CallContext *ctx) { QV4::Scope scope(ctx); - QV4::Scoped<QV4ParticleData> r(scope, ctx->callData->thisObject); + QV4::Scoped<QV4ParticleData> r(scope, ctx->d()->callData->thisObject); - if (!r || !r->datum) + if (!r || !r->d()->datum) return ctx->throwError(QStringLiteral("Not a valid ParticleData object")); - return QV4::Encode(r->datum->lifeLeft()); + return QV4::Encode(r->d()->datum->lifeLeft()); } static QV4::ReturnedValue particleData_curSize(QV4::CallContext *ctx) { QV4::Scope scope(ctx); - QV4::Scoped<QV4ParticleData> r(scope, ctx->callData->thisObject); + QV4::Scoped<QV4ParticleData> r(scope, ctx->d()->callData->thisObject); - if (!r || !r->datum) + if (!r || !r->d()->datum) return ctx->throwError(QStringLiteral("Not a valid ParticleData object")); - return QV4::Encode(r->datum->curSize()); + return QV4::Encode(r->d()->datum->curSize()); } #define COLOR_GETTER_AND_SETTER(VAR, NAME) static QV4::ReturnedValue particleData_get_ ## NAME (QV4::CallContext *ctx) \ { \ QV4::Scope scope(ctx); \ - QV4::Scoped<QV4ParticleData> r(scope, ctx->callData->thisObject); \ - if (!r || !r->datum) \ + QV4::Scoped<QV4ParticleData> r(scope, ctx->d()->callData->thisObject); \ + if (!r || !r->d()->datum) \ ctx->throwError(QStringLiteral("Not a valid ParticleData object")); \ \ - return QV4::Encode((r->datum->color. VAR )/255.0);\ + return QV4::Encode((r->d()->datum->color. VAR )/255.0);\ }\ \ static QV4::ReturnedValue particleData_set_ ## NAME (QV4::CallContext *ctx)\ {\ QV4::Scope scope(ctx); \ - QV4::Scoped<QV4ParticleData> r(scope, ctx->callData->thisObject); \ - if (!r || !r->datum)\ + QV4::Scoped<QV4ParticleData> r(scope, ctx->d()->callData->thisObject); \ + if (!r || !r->d()->datum)\ ctx->throwError(QStringLiteral("Not a valid ParticleData object"));\ \ - double d = ctx->callData->argc ? ctx->callData->args[0].toNumber() : 0; \ - r->datum->color. VAR = qMin(255, qMax(0, (int)floor(d * 255.0)));\ + double d = ctx->d()->callData->argc ? ctx->d()->callData->args[0].toNumber() : 0; \ + r->d()->datum->color. VAR = qMin(255, qMax(0, (int)floor(d * 255.0)));\ return QV4::Encode::undefined(); \ } @@ -357,63 +355,63 @@ static QV4::ReturnedValue particleData_set_ ## NAME (QV4::CallContext *ctx)\ #define SEMIBOOL_GETTER_AND_SETTER(VARIABLE) static QV4::ReturnedValue particleData_get_ ## VARIABLE (QV4::CallContext *ctx) \ { \ QV4::Scope scope(ctx); \ - QV4::Scoped<QV4ParticleData> r(scope, ctx->callData->thisObject); \ - if (!r || !r->datum) \ + QV4::Scoped<QV4ParticleData> r(scope, ctx->d()->callData->thisObject); \ + if (!r || !r->d()->datum) \ ctx->throwError(QStringLiteral("Not a valid ParticleData object")); \ \ - return QV4::Encode(r->datum-> VARIABLE);\ + return QV4::Encode(r->d()->datum-> VARIABLE);\ }\ \ static QV4::ReturnedValue particleData_set_ ## VARIABLE (QV4::CallContext *ctx)\ {\ QV4::Scope scope(ctx); \ - QV4::Scoped<QV4ParticleData> r(scope, ctx->callData->thisObject); \ - if (!r || !r->datum)\ + QV4::Scoped<QV4ParticleData> r(scope, ctx->d()->callData->thisObject); \ + if (!r || !r->d()->datum)\ ctx->throwError(QStringLiteral("Not a valid ParticleData object"));\ \ - r->datum-> VARIABLE = (ctx->callData->argc && ctx->callData->args[0].toBoolean()) ? 1.0 : 0.0;\ + r->d()->datum-> VARIABLE = (ctx->d()->callData->argc && ctx->d()->callData->args[0].toBoolean()) ? 1.0 : 0.0;\ return QV4::Encode::undefined(); \ } #define FLOAT_GETTER_AND_SETTER(VARIABLE) static QV4::ReturnedValue particleData_get_ ## VARIABLE (QV4::CallContext *ctx) \ { \ QV4::Scope scope(ctx); \ - QV4::Scoped<QV4ParticleData> r(scope, ctx->callData->thisObject); \ - if (!r || !r->datum) \ + QV4::Scoped<QV4ParticleData> r(scope, ctx->d()->callData->thisObject); \ + if (!r || !r->d()->datum) \ ctx->throwError(QStringLiteral("Not a valid ParticleData object")); \ \ - return QV4::Encode(r->datum-> VARIABLE);\ + return QV4::Encode(r->d()->datum-> VARIABLE);\ }\ \ static QV4::ReturnedValue particleData_set_ ## VARIABLE (QV4::CallContext *ctx)\ {\ QV4::Scope scope(ctx); \ - QV4::Scoped<QV4ParticleData> r(scope, ctx->callData->thisObject); \ - if (!r || !r->datum)\ + QV4::Scoped<QV4ParticleData> r(scope, ctx->d()->callData->thisObject); \ + if (!r || !r->d()->datum)\ ctx->throwError(QStringLiteral("Not a valid ParticleData object"));\ \ - r->datum-> VARIABLE = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN();\ + r->d()->datum-> VARIABLE = ctx->d()->callData->argc ? ctx->d()->callData->args[0].toNumber() : qSNaN();\ return QV4::Encode::undefined(); \ } #define FAKE_FLOAT_GETTER_AND_SETTER(VARIABLE, GETTER, SETTER) static QV4::ReturnedValue particleData_get_ ## VARIABLE (QV4::CallContext *ctx) \ { \ QV4::Scope scope(ctx); \ - QV4::Scoped<QV4ParticleData> r(scope, ctx->callData->thisObject); \ - if (!r || !r->datum) \ + QV4::Scoped<QV4ParticleData> r(scope, ctx->d()->callData->thisObject); \ + if (!r || !r->d()->datum) \ ctx->throwError(QStringLiteral("Not a valid ParticleData object")); \ \ - return QV4::Encode(r->datum-> GETTER ());\ + return QV4::Encode(r->d()->datum-> GETTER ());\ }\ \ static QV4::ReturnedValue particleData_set_ ## VARIABLE (QV4::CallContext *ctx)\ {\ QV4::Scope scope(ctx); \ - QV4::Scoped<QV4ParticleData> r(scope, ctx->callData->thisObject); \ - if (!r || !r->datum)\ + QV4::Scoped<QV4ParticleData> r(scope, ctx->d()->callData->thisObject); \ + if (!r || !r->d()->datum)\ ctx->throwError(QStringLiteral("Not a valid ParticleData object"));\ \ - r->datum-> SETTER (ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN());\ + r->d()->datum-> SETTER (ctx->d()->callData->argc ? ctx->d()->callData->args[0].toNumber() : qSNaN());\ return QV4::Encode::undefined(); \ } @@ -518,7 +516,7 @@ QQuickV4ParticleData::QQuickV4ParticleData(QV8Engine* engine, QQuickParticleData QV8ParticleDataDeletable *d = particleV8Data(engine); QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine); QV4::Scope scope(v4); - QV4::ScopedObject o(scope, new (v4->memoryManager) QV4ParticleData(v4, datum)); + QV4::ScopedObject o(scope, v4->memoryManager->alloc<QV4ParticleData>(v4, datum)); QV4::ScopedObject p(scope, d->proto.value()); o->setPrototype(p.getPointer()); m_v4Value = o; |