summaryrefslogtreecommitdiffstats
path: root/src/declarative/graphicsitems
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2010-03-30 08:52:54 (GMT)
committerAaron Kennedy <aaron.kennedy@nokia.com>2010-03-30 08:52:54 (GMT)
commitc6dbce5e54da4c33ae50fad9aab21457a9219f94 (patch)
tree7d0524028fcc5831ac43215bd9c50f41d47d0b4d /src/declarative/graphicsitems
parent5107b4c5e670b7357b9eb0f8f81f9810eaa9647b (diff)
downloadQt-c6dbce5e54da4c33ae50fad9aab21457a9219f94.zip
Qt-c6dbce5e54da4c33ae50fad9aab21457a9219f94.tar.gz
Qt-c6dbce5e54da4c33ae50fad9aab21457a9219f94.tar.bz2
Optimization: Use internal QGraphicsItemPrivate::setItemParentHelper()
This brings the "data" property inline with the "children" property. Improves the declarative/creation/itemtree_qml test by 13%.
Diffstat (limited to 'src/declarative/graphicsitems')
-rw-r--r--src/declarative/graphicsitems/qdeclarativeitem.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp
index 29490e3..05e13a7 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp
@@ -1510,11 +1510,19 @@ QDeclarativeAnchors *QDeclarativeItem::anchors()
void QDeclarativeItemPrivate::data_append(QDeclarativeListProperty<QObject> *prop, QObject *o)
{
- QGraphicsObject *i = qobject_cast<QGraphicsObject *>(o);
- if (i) {
- i->setParentItem(static_cast<QDeclarativeItem *>(prop->object));
+ if (!o)
+ return;
+
+ QDeclarativeItem *that = static_cast<QDeclarativeItem *>(prop->object);
+
+ // This test is measurably (albeit only slightly) faster than qobject_cast<>()
+ const QMetaObject *mo = o->metaObject();
+ while (mo && mo != &QGraphicsObject::staticMetaObject) mo = mo->d.superdata;
+
+ if (mo) {
+ QGraphicsItemPrivate::get(static_cast<QGraphicsObject *>(o))->setParentItemHelper(that, 0, 0);
} else {
- o->setParent(static_cast<QDeclarativeItem *>(prop->object));
+ o->setParent(that);
}
}