From c6dbce5e54da4c33ae50fad9aab21457a9219f94 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Tue, 30 Mar 2010 18:52:54 +1000 Subject: Optimization: Use internal QGraphicsItemPrivate::setItemParentHelper() This brings the "data" property inline with the "children" property. Improves the declarative/creation/itemtree_qml test by 13%. --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 16 ++++++++++++---- 1 file 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 *prop, QObject *o) { - QGraphicsObject *i = qobject_cast(o); - if (i) { - i->setParentItem(static_cast(prop->object)); + if (!o) + return; + + QDeclarativeItem *that = static_cast(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(o))->setParentItemHelper(that, 0, 0); } else { - o->setParent(static_cast(prop->object)); + o->setParent(that); } } -- cgit v0.12