diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2010-03-30 08:52:54 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2010-03-30 08:52:54 (GMT) |
commit | c6dbce5e54da4c33ae50fad9aab21457a9219f94 (patch) | |
tree | 7d0524028fcc5831ac43215bd9c50f41d47d0b4d | |
parent | 5107b4c5e670b7357b9eb0f8f81f9810eaa9647b (diff) | |
download | Qt-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%.
-rw-r--r-- | src/declarative/graphicsitems/qdeclarativeitem.cpp | 16 |
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); } } |