diff options
author | Lars Knoll <lars.knoll@digia.com> | 2014-01-27 14:58:52 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-07 10:44:00 +0100 |
commit | 39d7e330e64c2132828a040497a5b7326202b5b9 (patch) | |
tree | 7c5568b5ba0ab6fed316bb88d229e0496ad3c6fd /src/quick | |
parent | 927a46b1af9728c770dabb82f0b2233600636d2a (diff) |
Make the Ref classes not template based
Move to a class hierarchy that mirrors the main classes. This will
allow moving functionality over into the Ref classes, as the current
Managed classes become mainly something that holds the data. This
is required to make objects movable by the GC.
Change-Id: I4ca88ab0e5d8c88c8dc56d51937990500a33e0d9
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/quick')
-rw-r--r-- | src/quick/items/context2d/qquickcontext2d.cpp | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/src/quick/items/context2d/qquickcontext2d.cpp b/src/quick/items/context2d/qquickcontext2d.cpp index 120397c125..9851983201 100644 --- a/src/quick/items/context2d/qquickcontext2d.cpp +++ b/src/quick/items/context2d/qquickcontext2d.cpp @@ -921,6 +921,8 @@ struct QQuickJSContext2DImageData : public QV4::Object QV4::Value pixelData; }; +DEFINE_REF(QQuickJSContext2DImageData, QV4::Object); + DEFINE_OBJECT_VTABLE(QQuickJSContext2DImageData); static QV4::ReturnedValue qt_create_image_data(qreal w, qreal h, QV8Engine* engine, const QImage& image) @@ -2112,7 +2114,8 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_path(QV4::CallContext *ctx) QV4::ScopedValue value(scope, ctx->argument(0)); r->context->beginPath(); - if (QV4::ManagedRef<QV4::QObjectWrapper> qobjectWrapper = value) { + QV4::QObjectWrapperRef qobjectWrapper = value; + if (!!qobjectWrapper) { if (QQuickPath *path = qobject_cast<QQuickPath*>(qobjectWrapper->object())) r->context->m_path = path->path(); } else { @@ -2983,7 +2986,8 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_drawImage(QV4::CallContext pixmap = r->context->createPixmap(url); } else if (arg->isObject()) { - if (QV4::ManagedRef<QV4::QObjectWrapper> qobjectWrapper = arg) { + QV4::QObjectWrapperRef qobjectWrapper = arg; + if (!!qobjectWrapper) { if (QQuickImage *imageItem = qobject_cast<QQuickImage*>(qobjectWrapper->object())) { pixmap = r->context->createPixmap(imageItem->source()); } else if (QQuickCanvasItem *canvas = qobject_cast<QQuickCanvasItem*>(qobjectWrapper->object())) { @@ -2993,19 +2997,22 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_drawImage(QV4::CallContext } else { V4THROW_DOM(DOMEXCEPTION_TYPE_MISMATCH_ERR, "drawImage(), type mismatch"); } - } else if (QV4::ManagedRef<QQuickJSContext2DImageData> imageData = arg) { - QV4::Scoped<QQuickJSContext2DPixelData> pix(scope, imageData->pixelData.as<QQuickJSContext2DPixelData>()); - if (pix && !pix->image.isNull()) { - pixmap.take(new QQuickCanvasPixmap(pix->image)); + } else { + QQuickJSContext2DImageDataRef imageData = arg; + if (!!imageData) { + QV4::Scoped<QQuickJSContext2DPixelData> pix(scope, imageData->pixelData.as<QQuickJSContext2DPixelData>()); + if (pix && !pix->image.isNull()) { + pixmap.take(new QQuickCanvasPixmap(pix->image)); + } else { + V4THROW_DOM(DOMEXCEPTION_TYPE_MISMATCH_ERR, "drawImage(), type mismatch"); + } } else { - V4THROW_DOM(DOMEXCEPTION_TYPE_MISMATCH_ERR, "drawImage(), type mismatch"); + QUrl url(arg->toQStringNoThrow()); + if (url.isValid()) + pixmap = r->context->createPixmap(url); + else + V4THROW_DOM(DOMEXCEPTION_TYPE_MISMATCH_ERR, "drawImage(), type mismatch"); } - } else { - QUrl url(arg->toQStringNoThrow()); - if (url.isValid()) - pixmap = r->context->createPixmap(url); - else - V4THROW_DOM(DOMEXCEPTION_TYPE_MISMATCH_ERR, "drawImage(), type mismatch"); } } else { V4THROW_DOM(DOMEXCEPTION_TYPE_MISMATCH_ERR, "drawImage(), type mismatch"); @@ -3263,7 +3270,8 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createImageData(QV4::CallC if (ctx->callData->argc == 1) { QV4::ScopedValue arg0(scope, ctx->callData->args[0]); - if (QV4::ManagedRef<QQuickJSContext2DImageData> imgData = arg0) { + QQuickJSContext2DImageDataRef imgData = arg0; + if (!!imgData) { QV4::Scoped<QQuickJSContext2DPixelData> pa(scope, imgData->pixelData.as<QQuickJSContext2DPixelData>()); if (pa) { qreal w = pa->image.width(); @@ -3340,7 +3348,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_putImageData(QV4::CallCont if (!qIsFinite(dx) || !qIsFinite(dy)) V4THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "putImageData() : Invalid arguments"); - QV4::ManagedRef<QQuickJSContext2DImageData> imageData = arg0; + QQuickJSContext2DImageDataRef imageData = arg0; if (!imageData) return ctx->callData->thisObject.asReturnedValue(); |