From 39d7e330e64c2132828a040497a5b7326202b5b9 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 27 Jan 2014 14:58:52 +0100 Subject: 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 --- src/quick/items/context2d/qquickcontext2d.cpp | 38 ++++++++++++++++----------- 1 file changed, 23 insertions(+), 15 deletions(-) (limited to 'src/quick/items/context2d') 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 qobjectWrapper = value) { + QV4::QObjectWrapperRef qobjectWrapper = value; + if (!!qobjectWrapper) { if (QQuickPath *path = qobject_cast(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 qobjectWrapper = arg) { + QV4::QObjectWrapperRef qobjectWrapper = arg; + if (!!qobjectWrapper) { if (QQuickImage *imageItem = qobject_cast(qobjectWrapper->object())) { pixmap = r->context->createPixmap(imageItem->source()); } else if (QQuickCanvasItem *canvas = qobject_cast(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 imageData = arg) { - QV4::Scoped pix(scope, imageData->pixelData.as()); - if (pix && !pix->image.isNull()) { - pixmap.take(new QQuickCanvasPixmap(pix->image)); + } else { + QQuickJSContext2DImageDataRef imageData = arg; + if (!!imageData) { + QV4::Scoped pix(scope, imageData->pixelData.as()); + 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 imgData = arg0) { + QQuickJSContext2DImageDataRef imgData = arg0; + if (!!imgData) { QV4::Scoped pa(scope, imgData->pixelData.as()); 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 imageData = arg0; + QQuickJSContext2DImageDataRef imageData = arg0; if (!imageData) return ctx->callData->thisObject.asReturnedValue(); -- cgit v1.2.3