aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJustin McPherson <justin.mcpherson@nokia.com>2012-02-17 13:52:09 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-21 01:21:41 +0100
commit2954685be016123aac8100f398150a9f8cf01a92 (patch)
treee64641efb81d91e477f2cfe93f87452c5c59afc7 /src
parent2d72f97328f3d379476034549a26f1002c0b5fbc (diff)
Remove the callback facility from context node.
- It's not really necessary. - It's probably a mis-use of QSGNode::preprocess() - Because it triggers a race between object deletion in the main thread and preprocess() in the render thread. Change-Id: I51433f508db306aab53398f8c3d1d8c9d9e986fd Reviewed-by: Michael Brasser <michael.brasser@nokia.com> Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/context2d/qquickcanvasitem.cpp15
-rw-r--r--src/quick/items/context2d/qquickcanvasitemnode.cpp13
-rw-r--r--src/quick/items/context2d/qquickcanvasitemnode_p.h8
3 files changed, 3 insertions, 33 deletions
diff --git a/src/quick/items/context2d/qquickcanvasitem.cpp b/src/quick/items/context2d/qquickcanvasitem.cpp
index 783fedf9fc..7031294ecc 100644
--- a/src/quick/items/context2d/qquickcanvasitem.cpp
+++ b/src/quick/items/context2d/qquickcanvasitem.cpp
@@ -96,16 +96,6 @@ QQuickCanvasItemPrivate::~QQuickCanvasItemPrivate()
qDeleteAll(images);
}
-class QQuickCanvasItemCallback : public QQuickCanvasItemNode::Callback
-{
-public:
- QQuickCanvasItemCallback(QQuickCanvasItemPrivate *d):item(d) {}
- void process() const {
- // on SG render thread
- item->context->sync();
- }
- QQuickCanvasItemPrivate *item;
-};
/*!
\qmlclass Canvas QQuickCanvasItem
@@ -573,10 +563,11 @@ QSGNode *QQuickCanvasItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
QQuickCanvasItemNode *node = static_cast<QQuickCanvasItemNode*>(oldNode);
if (!node) {
node = new QQuickCanvasItemNode;
- if (d->renderStrategy == QQuickCanvasItem::Cooperative)
- node->setCallback(new QQuickCanvasItemCallback(d));
}
+ if (d->renderStrategy == QQuickCanvasItem::Cooperative)
+ d->context->sync();
+
node->setTexture(d->context->texture());
node->setSize(d->canvasWindow.size());
node->update();
diff --git a/src/quick/items/context2d/qquickcanvasitemnode.cpp b/src/quick/items/context2d/qquickcanvasitemnode.cpp
index 307d5716e6..b9347dd33c 100644
--- a/src/quick/items/context2d/qquickcanvasitemnode.cpp
+++ b/src/quick/items/context2d/qquickcanvasitemnode.cpp
@@ -65,13 +65,6 @@ QQuickCanvasItemNode::~QQuickCanvasItemNode()
delete m_texture;
}
-// Must be called before this node is added to SG
-void QQuickCanvasItemNode::setCallback(QQuickCanvasItemNode::Callback *cb)
-{
- m_cb = cb;
- setFlag(UsePreprocess, true);
-}
-
void QQuickCanvasItemNode::setSize(const QSizeF& size)
{
if (m_size != size) {
@@ -80,12 +73,6 @@ void QQuickCanvasItemNode::setSize(const QSizeF& size)
}
}
-void QQuickCanvasItemNode::preprocess()
-{
- if (m_cb)
- m_cb->process();
-}
-
void QQuickCanvasItemNode::setTexture(QSGDynamicTexture* texture)
{
if (texture != m_texture) {
diff --git a/src/quick/items/context2d/qquickcanvasitemnode_p.h b/src/quick/items/context2d/qquickcanvasitemnode_p.h
index bee221554e..77181c64e6 100644
--- a/src/quick/items/context2d/qquickcanvasitemnode_p.h
+++ b/src/quick/items/context2d/qquickcanvasitemnode_p.h
@@ -59,18 +59,11 @@ class QSGDynamicTexture;
class QQuickCanvasItemNode : public QSGGeometryNode
{
public:
- class Callback {
- public:
- virtual void process() const = 0;
- };
-
QQuickCanvasItemNode();
~QQuickCanvasItemNode();
- void setCallback(Callback *cb);
void setTexture(QSGDynamicTexture *texture);
void update();
- void preprocess();
void setSize(const QSizeF& size);
private:
@@ -85,7 +78,6 @@ private:
bool m_dirtyGeometry;
bool m_dirtyTexture;
- Callback *m_cb;
};
QT_END_HEADER