aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicklayouts
diff options
context:
space:
mode:
authorSanthosh Kumar <santhosh.kumar.selvaraj@qt.io>2024-02-27 18:08:58 +0100
committerSanthosh Kumar <santhosh.kumar.selvaraj@qt.io>2024-03-05 14:06:28 +0100
commitb60b1e17a2d0dc6f263dc0c788f0a6bf14e6d0de (patch)
treea310eae168156a795f3e5a7a258cc701428e3cb1 /src/quicklayouts
parent2f3bf5f515fea9738b3bdef318de86a6e313b918 (diff)
Use Qt::AA_QtQuickUseDefaultSizePolicy to apply size policy for layout
The default size policy that need to be applied for quick items within the layout has been changed as opt-in. This further require layout to consider Qt::AA_QtQuickUseDefaultSizePolicy attribute and the same been tested for set before applying those size policies. Task-number: QTBUG-117597 Pick-to: 6.7 Change-Id: Idbd27f8cd1ffbfe7631e953c787234f9f1e5b0e2 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Diffstat (limited to 'src/quicklayouts')
-rw-r--r--src/quicklayouts/qquicklayout.cpp26
-rw-r--r--src/quicklayouts/qquicklayout_p.h22
2 files changed, 38 insertions, 10 deletions
diff --git a/src/quicklayouts/qquicklayout.cpp b/src/quicklayouts/qquicklayout.cpp
index 5a6b30ff38..eb4a8f0c51 100644
--- a/src/quicklayouts/qquicklayout.cpp
+++ b/src/quicklayouts/qquicklayout.cpp
@@ -303,15 +303,16 @@ void QQuickLayoutAttached::setMaximumImplicitSize(const QSizeF &sz)
If this property is \c true, the item will be as wide as possible while respecting
the given constraints. If the property is \c false, the item will have a fixed width
set to the preferred width.
- The default is \c false, except for layouts themselves, which default to \c true.
+ The default depends on implicit (built-in) size policy of item.
\sa fillHeight
*/
void QQuickLayoutAttached::setFillWidth(bool fill)
{
+ bool oldFillWidth = fillWidth();
m_isFillWidthSet = true;
- if (m_fillWidth != fill) {
- m_fillWidth = fill;
+ m_fillWidth = fill;
+ if (oldFillWidth != fill) {
invalidateItem();
emit fillWidthChanged();
}
@@ -323,15 +324,16 @@ void QQuickLayoutAttached::setFillWidth(bool fill)
If this property is \c true, the item will be as tall as possible while respecting
the given constraints. If the property is \c false, the item will have a fixed height
set to the preferred height.
- The default is \c false, except for layouts themselves, which default to \c true.
+ The default depends on implicit (built-in) size policy of the item.
\sa fillWidth
*/
void QQuickLayoutAttached::setFillHeight(bool fill)
{
+ bool oldFillHeight = fillHeight();
m_isFillHeightSet = true;
- if (m_fillHeight != fill) {
- m_fillHeight = fill;
+ m_fillHeight = fill;
+ if (oldFillHeight != fill) {
invalidateItem();
emit fillHeightChanged();
}
@@ -1255,7 +1257,15 @@ void QQuickLayout::effectiveSizeHints_helper(QQuickItem *item, QSizeF *cachedSiz
*/
QLayoutPolicy::Policy QQuickLayout::effectiveSizePolicy_helper(QQuickItem *item, Qt::Orientation orientation, QQuickLayoutAttached *info)
{
- bool fillExtent = false;
+ bool fillExtent([&]{
+ QLayoutPolicy::Policy policy{QLayoutPolicy::Fixed};
+ if (item && QGuiApplication::testAttribute(Qt::AA_QtQuickUseDefaultSizePolicy)) {
+ QLayoutPolicy sizePolicy = QQuickItemPrivate::get(item)->sizePolicy();
+ policy = (orientation == Qt::Horizontal) ? sizePolicy.horizontalPolicy() : sizePolicy.verticalPolicy();
+ }
+ return (policy == QLayoutPolicy::Preferred);
+ }());
+
bool isSet = false;
if (info) {
if (orientation == Qt::Horizontal) {
@@ -1268,8 +1278,8 @@ QLayoutPolicy::Policy QQuickLayout::effectiveSizePolicy_helper(QQuickItem *item,
}
if (!isSet && qobject_cast<QQuickLayout*>(item))
fillExtent = true;
- return fillExtent ? QLayoutPolicy::Preferred : QLayoutPolicy::Fixed;
+ return fillExtent ? QLayoutPolicy::Preferred : QLayoutPolicy::Fixed;
}
void QQuickLayout::_q_dumpLayoutTree() const
diff --git a/src/quicklayouts/qquicklayout_p.h b/src/quicklayouts/qquicklayout_p.h
index 5e1694a4dc..f0ccc6dbf5 100644
--- a/src/quicklayouts/qquicklayout_p.h
+++ b/src/quicklayouts/qquicklayout_p.h
@@ -23,6 +23,7 @@
#include <private/qquickitem_p.h>
#include <QtQuick/private/qquickitemchangelistener_p.h>
#include <QtGui/private/qlayoutpolicy_p.h>
+#include <QtGui/qguiapplication.h>
QT_BEGIN_NAMESPACE
@@ -211,11 +212,19 @@ public:
void setMinimumImplicitSize(const QSizeF &sz);
void setMaximumImplicitSize(const QSizeF &sz);
- bool fillWidth() const { return m_fillWidth; }
+ bool fillWidth() const {
+ if (auto *itemPriv = itemForSizePolicy(m_isFillWidthSet))
+ return (itemPriv->sizePolicy().horizontalPolicy() == QLayoutPolicy::Preferred);
+ return m_fillWidth;
+ }
void setFillWidth(bool fill);
bool isFillWidthSet() const { return m_isFillWidthSet; }
- bool fillHeight() const { return m_fillHeight; }
+ bool fillHeight() const {
+ if (auto *itemPriv = itemForSizePolicy(m_isFillHeightSet))
+ return (itemPriv->sizePolicy().verticalPolicy() == QLayoutPolicy::Preferred);
+ return m_fillHeight;
+ }
void setFillHeight(bool fill);
bool isFillHeightSet() const { return m_isFillHeightSet; }
@@ -303,6 +312,15 @@ public:
return false;
}
+ QQuickItemPrivate *itemForSizePolicy(bool isFillSet) const
+ {
+ QQuickItemPrivate *itemPriv = nullptr;
+ if (!isFillSet && qobject_cast<QQuickItem *>(item()) &&
+ QGuiApplication::testAttribute(Qt::AA_QtQuickUseDefaultSizePolicy))
+ itemPriv = QQuickItemPrivate::get(item());
+ return itemPriv;
+ }
+
Q_SIGNALS:
void minimumWidthChanged();
void minimumHeightChanged();