diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2016-04-11 12:44:00 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@qt.io> | 2016-07-11 07:50:51 +0000 |
commit | e2c296c46b3f922ed12f83b166b1493dfded480e (patch) | |
tree | 4275a195b7fcd8bb79285b5c1a2f56cf6da9f61b /src/quick/items/qquickitemchangelistener_p.h | |
parent | 1c5171eb9747107ea10b4cc3b694ae064fda8655 (diff) |
QML: Pass the kind of geometry change around
This prevents re-calculation of what actually changed, and removes the
now unused parameter newGeometry. Other than this change calculation,
the only place where oldGeometry was used is
QQuickListViewPrivate::itemGeometryChanged. To get rid of oldGeometry
too, QQuickListViewPrivate now stores the current (i.e. last known)
geometry, and updates it in itemGeometryChanged.
Change-Id: I8a5286d08a04132c9a4c81de7ce221f5676946e6
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Diffstat (limited to 'src/quick/items/qquickitemchangelistener_p.h')
-rw-r--r-- | src/quick/items/qquickitemchangelistener_p.h | 59 |
1 files changed, 58 insertions, 1 deletions
diff --git a/src/quick/items/qquickitemchangelistener_p.h b/src/quick/items/qquickitemchangelistener_p.h index 6e3ef25506..7a4949fc0b 100644 --- a/src/quick/items/qquickitemchangelistener_p.h +++ b/src/quick/items/qquickitemchangelistener_p.h @@ -58,12 +58,69 @@ QT_BEGIN_NAMESPACE class QRectF; class QQuickItem; class QQuickAnchorsPrivate; + +class QQuickGeometryChange +{ +public: + enum Kind: int { + Nothing = 0x00, + X = 0x01, + Y = 0x02, + Width = 0x04, + Height = 0x08, + + Size = Width | Height, + All = X | Y | Size + }; + + QQuickGeometryChange(int change = Nothing) + : kind(change) + {} + + bool noChange() const { return kind == Nothing; } + bool anyChange() const { return !noChange(); } + + bool xChange() const { return kind & X; } + bool yChange() const { return kind & Y; } + bool widthChange() const { return kind & Width; } + bool heightChange() const { return kind & Height; } + + bool positionChange() const { return xChange() || yChange(); } + bool sizeChange() const { return widthChange() || heightChange(); } + + bool horizontalChange() const { return xChange() || widthChange(); } + bool verticalChange() const { return yChange() || heightChange(); } + + void setXChange(bool enabled) { set(X, enabled); } + void setYChange(bool enabled) { set(Y, enabled); } + void setWidthChange(bool enabled) { set(Width, enabled); } + void setHeightChange(bool enabled) { set(Height, enabled); } + void setSizeChange(bool enabled) { set(Size, enabled); } + void setAllChanged(bool enabled) { set(All, enabled); } + void setHorizontalChange(bool enabled) { set(X | Width, enabled); } + void setVerticalChange(bool enabled) { set(Y | Height, enabled); } + + void set(int bits, bool enabled) + { + if (enabled) { + kind |= bits; + } else { + kind &= ~bits; + } + } + + bool matches(QQuickGeometryChange other) const { return kind & other.kind; } + +private: + int kind; +}; + class QQuickItemChangeListener { public: virtual ~QQuickItemChangeListener() {} - virtual void itemGeometryChanged(QQuickItem *, const QRectF & /* new */, const QRectF & /* old */ ) {} + virtual void itemGeometryChanged(QQuickItem *, QQuickGeometryChange, const QRectF &) {} virtual void itemSiblingOrderChanged(QQuickItem *) {} virtual void itemVisibilityChanged(QQuickItem *) {} virtual void itemOpacityChanged(QQuickItem *) {} |