Example #1
0
/*!
    \qmlmethod object QtQuick2::Loader::setSource(url source, object properties)

    Creates an object instance of the given \a source component that will have
    the given \a properties. The \a properties argument is optional.  The instance
    will be accessible via the \l item property once loading and instantiation
    is complete.

    If the \l active property is \c false at the time when this function is called,
    the given \a source component will not be loaded but the \a source and initial
    \a properties will be cached.  When the loader is made \l active, an instance of
    the \a source component will be created with the initial \a properties set.

    Setting the initial property values of an instance of a component in this manner
    will \b{not} trigger any associated \l{Behavior}s.

    Note that the cached \a properties will be cleared if the \l source or \l sourceComponent
    is changed after calling this function but prior to setting the loader \l active.

    Example:
    \table
    \row
    \li
    \qml
    // ExampleComponent.qml
    import QtQuick 2.0
    Rectangle {
        id: rect
        color: "red"
        width: 10
        height: 10

        Behavior on color {
            NumberAnimation {
                target: rect
                property: "width"
                to: (rect.width + 20)
                duration: 0
            }
        }
    }
    \endqml
    \li
    \qml
    // example.qml
    import QtQuick 2.0
    Item {
        Loader {
            id: squareLoader
            onLoaded: console.log(squareLoader.item.width); // prints [10], not [30]
        }

        Component.onCompleted: {
            squareLoader.setSource("ExampleComponent.qml", { "color": "blue" });
            // will trigger the onLoaded code when complete.
        }
    }
    \endqml
    \endtable

    \sa source, active
*/
void QQuickLoader::setSource(QQmlV8Function *args)
{
    Q_ASSERT(args);
    Q_D(QQuickLoader);

    bool ipvError = false;
    args->returnValue(v8::Undefined());
    v8::Handle<v8::Object> ipv = d->extractInitialPropertyValues(args, this, &ipvError);
    if (ipvError)
        return;

    d->clear();
    QUrl sourceUrl = d->resolveSourceUrl(args);
    if (!ipv.IsEmpty()) {
        d->disposeInitialPropertyValues();
        d->initialPropertyValues = qPersistentNew(ipv);
        d->qmlGlobalForIpv = qPersistentNew(args->qmlGlobal());
    }

    setSource(sourceUrl, false); // already cleared and set ipv above.
}
Example #2
0
QQuickV8ParticleData::QQuickV8ParticleData(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);
}
Example #3
0
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());
}
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("curSize"), V8FUNCTION(particleData_curSize, engine));
    FLOAT_REGISTER_ACCESSOR(ft, engine, x);
    FLOAT_REGISTER_ACCESSOR(ft, engine, y);
    FLOAT_REGISTER_ACCESSOR(ft, engine, t);
    FLOAT_REGISTER_ACCESSOR(ft, engine, lifeSpan);
    FLOAT_REGISTER_ACCESSOR(ft, engine, size);
    FLOAT_REGISTER_ACCESSOR(ft, engine, endSize);
    FLOAT_REGISTER_ACCESSOR(ft, engine, vx);
    FLOAT_REGISTER_ACCESSOR(ft, engine, vy);
    FLOAT_REGISTER_ACCESSOR(ft, engine, ax);
    FLOAT_REGISTER_ACCESSOR(ft, engine, ay);
    FLOAT_REGISTER_ACCESSOR(ft, engine, xx);
    FLOAT_REGISTER_ACCESSOR(ft, engine, xy);
    FLOAT_REGISTER_ACCESSOR(ft, engine, rotation);
    FLOAT_REGISTER_ACCESSOR(ft, engine, rotationSpeed);
    FLOAT_REGISTER_ACCESSOR(ft, engine, autoRotate);
    FLOAT_REGISTER_ACCESSOR(ft, engine, animIdx);
    FLOAT_REGISTER_ACCESSOR(ft, engine, frameDuration);
    FLOAT_REGISTER_ACCESSOR(ft, engine, frameCount);
    FLOAT_REGISTER_ACCESSOR(ft, engine, animT);
    FLOAT_REGISTER_ACCESSOR(ft, engine, r);
    FLOAT_REGISTER_ACCESSOR(ft, engine, curX);
    FLOAT_REGISTER_ACCESSOR(ft, engine, curVX);
    FLOAT_REGISTER_ACCESSOR(ft, engine, curAX);
    FLOAT_REGISTER_ACCESSOR(ft, engine, curY);
    FLOAT_REGISTER_ACCESSOR(ft, engine, curVY);
    FLOAT_REGISTER_ACCESSOR(ft, engine, curAY);

    constructor = qPersistentNew(ft->GetFunction());
}