diff options
author | Jan Arve Saether <jan-arve.saether@digia.com> | 2013-09-27 15:39:21 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-01 13:32:12 +0200 |
commit | 056e2670dcaf447dbcd0a577483bcdcd22c2d333 (patch) | |
tree | 833ce47a33ad6a76c069e9a4c364ee5df26e7b6e /src | |
parent | 66fb8dd12189232a41164f0f6681699900ef2f3a (diff) | |
download | qtquickcontrols-056e2670dcaf447dbcd0a577483bcdcd22c2d333.tar.gz |
Update the internal alignment when an item *changes* its alignment
Previously it only respected the initial alignment.
Task-number: QTBUG-33773
Change-Id: I1d24209b866babd4bacabaec569f2f7dcc913c02
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/layouts/qquickgridlayoutengine.cpp | 16 | ||||
-rw-r--r-- | src/layouts/qquickgridlayoutengine_p.h | 4 | ||||
-rw-r--r-- | src/layouts/qquicklayout.cpp | 5 | ||||
-rw-r--r-- | src/layouts/qquicklayout_p.h | 1 | ||||
-rw-r--r-- | src/layouts/qquicklinearlayout.cpp | 6 | ||||
-rw-r--r-- | src/layouts/qquicklinearlayout_p.h | 1 |
6 files changed, 32 insertions, 1 deletions
diff --git a/src/layouts/qquickgridlayoutengine.cpp b/src/layouts/qquickgridlayoutengine.cpp index b6c0a244..419a81df 100644 --- a/src/layouts/qquickgridlayoutengine.cpp +++ b/src/layouts/qquickgridlayoutengine.cpp @@ -289,4 +289,20 @@ QLayoutPolicy::Policy QQuickGridLayoutItem::effectiveSizePolicy_helper(QQuickIte return fillExtent ? QLayoutPolicy::Preferred : QLayoutPolicy::Fixed; } + +void QQuickGridLayoutEngine::setAlignment(QQuickItem *quickItem, Qt::Alignment alignment) +{ + if (QQuickGridLayoutItem *item = findLayoutItem(quickItem)) { + item->setAlignment(alignment); + invalidate(); + } +} + +Qt::Alignment QQuickGridLayoutEngine::alignment(QQuickItem *quickItem) const +{ + if (QGridLayoutItem *item = findLayoutItem(quickItem)) + return item->alignment(); + return 0; +} + QT_END_NAMESPACE diff --git a/src/layouts/qquickgridlayoutengine_p.h b/src/layouts/qquickgridlayoutengine_p.h index 8842d36a..6eba922c 100644 --- a/src/layouts/qquickgridlayoutengine_p.h +++ b/src/layouts/qquickgridlayoutengine_p.h @@ -154,6 +154,10 @@ public: } return 0; } + + void setAlignment(QQuickItem *quickItem, Qt::Alignment alignment); + Qt::Alignment alignment(QQuickItem *quickItem) const; + }; diff --git a/src/layouts/qquicklayout.cpp b/src/layouts/qquicklayout.cpp index 709a88e6..0cfe61b7 100644 --- a/src/layouts/qquicklayout.cpp +++ b/src/layouts/qquicklayout.cpp @@ -426,7 +426,10 @@ void QQuickLayoutAttached::setAlignment(Qt::Alignment align) { if (align != m_alignment) { m_alignment = align; - invalidateItem(); + if (QQuickLayout *layout = parentLayout()) { + layout->setAlignment(item(), align); + invalidateItem(); + } emit alignmentChanged(); } } diff --git a/src/layouts/qquicklayout_p.h b/src/layouts/qquicklayout_p.h index ecb97c46..0d8d96ee 100644 --- a/src/layouts/qquicklayout_p.h +++ b/src/layouts/qquicklayout_p.h @@ -76,6 +76,7 @@ public: void componentComplete(); virtual QSizeF sizeHint(Qt::SizeHint whichSizeHint) const = 0; + virtual void setAlignment(QQuickItem *item, Qt::Alignment align) = 0; virtual void invalidate(QQuickItem * childItem = 0); virtual void updateLayoutItems() = 0; diff --git a/src/layouts/qquicklinearlayout.cpp b/src/layouts/qquicklinearlayout.cpp index 530241d4..fd6ffd69 100644 --- a/src/layouts/qquicklinearlayout.cpp +++ b/src/layouts/qquicklinearlayout.cpp @@ -253,6 +253,12 @@ Qt::LayoutDirection QQuickGridLayoutBase::effectiveLayoutDirection() const ? Qt::LeftToRight : Qt::RightToLeft; } +void QQuickGridLayoutBase::setAlignment(QQuickItem *item, Qt::Alignment alignment) +{ + Q_D(QQuickGridLayoutBase); + d->engine.setAlignment(item, alignment); +} + QQuickGridLayoutBase::~QQuickGridLayoutBase() { d_func()->m_isReady = false; diff --git a/src/layouts/qquicklinearlayout_p.h b/src/layouts/qquicklinearlayout_p.h index 1b5a3a18..fb1e554e 100644 --- a/src/layouts/qquicklinearlayout_p.h +++ b/src/layouts/qquicklinearlayout_p.h @@ -75,6 +75,7 @@ public: Qt::LayoutDirection layoutDirection() const; void setLayoutDirection(Qt::LayoutDirection dir); Qt::LayoutDirection effectiveLayoutDirection() const; + void setAlignment(QQuickItem *item, Qt::Alignment align) Q_DECL_OVERRIDE; protected: void updateLayoutItems() Q_DECL_OVERRIDE; |