aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickitem.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@qt.io>2016-11-03 14:34:43 +0100
committerErik Verbruggen <erik.verbruggen@qt.io>2016-11-10 14:53:34 +0000
commit8161a92b5fe1c0e4818a0fb19ed2177d7a12f731 (patch)
tree9221973be79f94848a583d89c08be0c9320c57e5 /src/quick/items/qquickitem.cpp
parent08a9fc04989aa05d4cc8c44430977d23cc729656 (diff)
Quick: Do not calculate the difference in a geometryChange
This difference is only used by the ListView, so calculating it and storing it (on the stack) introduces a penalty for all items. As the new geometry is already applied, the old geometry is passed along. This has the added advantage that the ListView does not have to re-calculate that either. This fixes a performance regression. Change-Id: Id5e67bb663a5b11a55ec15ff24ca5b213d1fcef5 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
Diffstat (limited to 'src/quick/items/qquickitem.cpp')
-rw-r--r--src/quick/items/qquickitem.cpp14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp
index 1e60ef8c02..13b75c0482 100644
--- a/src/quick/items/qquickitem.cpp
+++ b/src/quick/items/qquickitem.cpp
@@ -3658,21 +3658,17 @@ void QQuickItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeo
QQuickAnchorsPrivate::get(d->_anchors)->updateMe();
QQuickGeometryChange change;
- QRectF diff(newGeometry.x() - oldGeometry.x(),
- newGeometry.y() - oldGeometry.y(),
- newGeometry.width() - oldGeometry.width(),
- newGeometry.height() - oldGeometry.height());
- change.setXChange(diff.x() != 0);
- change.setYChange(diff.y() != 0);
- change.setWidthChange(diff.width() != 0);
- change.setHeightChange(diff.height() != 0);
+ change.setXChange(newGeometry.x() != oldGeometry.x());
+ change.setYChange(newGeometry.y() != oldGeometry.y());
+ change.setWidthChange(newGeometry.width() != oldGeometry.width());
+ change.setHeightChange(newGeometry.height() != oldGeometry.height());
if (!d->changeListeners.isEmpty()) {
const auto listeners = d->changeListeners; // NOTE: intentional copy (QTBUG-54732)
for (const QQuickItemPrivate::ChangeListener &listener : listeners) {
if (listener.types & QQuickItemPrivate::Geometry) {
if (change.matches(listener.gTypes))
- listener.listener->itemGeometryChanged(this, change, diff);
+ listener.listener->itemGeometryChanged(this, change, oldGeometry);
}
}
}