diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-02-21 23:11:25 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2018-04-13 11:26:45 +0000 |
commit | ec6cc9921f4b804ed309b7dbfae6ee3b1cf3d8a7 (patch) | |
tree | 02e9b87f41a139557c12333cc5473c038e429578 /src/quicktemplates2/qquickpane.cpp | |
parent | 3e3a4062ae8051d862b39420e0955ac5e9fbe7a2 (diff) |
Control: add implicitContentWidth|Height properties
[ChangeLog][Controls][Control] Added implicitContentWidth and
implicitContentHeight properties that can be used to simplify
complex implicit size bindings.
Change-Id: I6ccef572c013605058808ce2ad17f8bd82f49ef0
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickpane.cpp')
-rw-r--r-- | src/quicktemplates2/qquickpane.cpp | 96 |
1 files changed, 29 insertions, 67 deletions
diff --git a/src/quicktemplates2/qquickpane.cpp b/src/quicktemplates2/qquickpane.cpp index d4c38fb6..72a5ee17 100644 --- a/src/quicktemplates2/qquickpane.cpp +++ b/src/quicktemplates2/qquickpane.cpp @@ -116,6 +116,18 @@ QQuickPanePrivate::QQuickPanePrivate() { } +void QQuickPanePrivate::init() +{ + Q_Q(QQuickPane); + q->setFlag(QQuickItem::ItemIsFocusScope); + q->setAcceptedMouseButtons(Qt::AllButtons); +#if QT_CONFIG(cursor) + q->setCursor(Qt::ArrowCursor); +#endif + connect(q, &QQuickControl::implicitContentWidthChanged, this, &QQuickPanePrivate::updateContentWidth); + connect(q, &QQuickControl::implicitContentHeightChanged, this, &QQuickPanePrivate::updateContentHeight); +} + QList<QQuickItem *> QQuickPanePrivate::contentChildItems() const { if (!contentItem) @@ -136,21 +148,17 @@ QQuickItem *QQuickPanePrivate::getContentItem() void QQuickPanePrivate::itemImplicitWidthChanged(QQuickItem *item) { QQuickControlPrivate::itemImplicitWidthChanged(item); - if (item == contentItem || item == firstChild) - updateContentWidth(); + + if (item == firstChild) + updateImplicitContentWidth(); } void QQuickPanePrivate::itemImplicitHeightChanged(QQuickItem *item) { QQuickControlPrivate::itemImplicitHeightChanged(item); - if (item == contentItem || item == firstChild) - updateContentHeight(); -} -void QQuickPanePrivate::itemDestroyed(QQuickItem *item) -{ - if (item == contentItem) - updateContentSize(); + if (item == firstChild) + updateImplicitContentHeight(); } void QQuickPanePrivate::contentChildrenChange() @@ -165,7 +173,7 @@ void QQuickPanePrivate::contentChildrenChange() firstChild = newFirstChild; } - updateContentSize(); + updateImplicitContentSize(); emit q->contentChildrenChanged(); } @@ -204,18 +212,11 @@ qreal QQuickPanePrivate::getContentHeight() const void QQuickPanePrivate::updateContentWidth() { Q_Q(QQuickPane); - if (hasContentWidth) - return; - - // a special case for width<->height dependent content (wrapping text) in ScrollView - if (contentWidth < 0 && !componentComplete) - return; - - qreal oldContentWidth = contentWidth; - contentWidth = getContentWidth(); - if (qFuzzyCompare(contentWidth, oldContentWidth)) + if (hasContentWidth || qFuzzyCompare(contentWidth, implicitContentWidth)) return; + const qreal oldContentWidth = contentWidth; + contentWidth = implicitContentWidth; q->contentSizeChange(QSizeF(contentWidth, contentHeight), QSizeF(oldContentWidth, contentHeight)); emit q->contentWidthChanged(); } @@ -223,56 +224,20 @@ void QQuickPanePrivate::updateContentWidth() void QQuickPanePrivate::updateContentHeight() { Q_Q(QQuickPane); - if (hasContentHeight) - return; - - // a special case for width<->height dependent content (wrapping text) in ScrollView - if (contentWidth < 0 && !componentComplete) - return; - - qreal oldContentHeight = contentHeight; - contentHeight = getContentHeight(); - if (qFuzzyCompare(contentHeight, oldContentHeight)) + if (hasContentHeight || qFuzzyCompare(contentHeight, implicitContentHeight)) return; + const qreal oldContentHeight = contentHeight; + contentHeight = implicitContentHeight; q->contentSizeChange(QSizeF(contentWidth, contentHeight), QSizeF(contentWidth, oldContentHeight)); emit q->contentHeightChanged(); } -void QQuickPanePrivate::updateContentSize() -{ - Q_Q(QQuickPane); - if ((hasContentWidth && hasContentHeight) || !componentComplete) - return; - - const qreal oldContentWidth = contentWidth; - if (!hasContentWidth) - contentWidth = getContentWidth(); - - const qreal oldContentHeight = contentHeight; - if (!hasContentHeight) - contentHeight = getContentHeight(); - - const bool widthChanged = !qFuzzyCompare(contentWidth, oldContentWidth); - const bool heightChanged = !qFuzzyCompare(contentHeight, oldContentHeight); - - if (widthChanged || heightChanged) - q->contentSizeChange(QSizeF(contentWidth, contentHeight), QSizeF(oldContentWidth, oldContentHeight)); - - if (widthChanged) - emit q->contentWidthChanged(); - if (heightChanged) - emit q->contentHeightChanged(); -} - QQuickPane::QQuickPane(QQuickItem *parent) : QQuickControl(*(new QQuickPanePrivate), parent) { - setFlag(QQuickItem::ItemIsFocusScope); - setAcceptedMouseButtons(Qt::AllButtons); -#if QT_CONFIG(cursor) - setCursor(Qt::ArrowCursor); -#endif + Q_D(QQuickPane); + d->init(); } QQuickPane::~QQuickPane() @@ -285,11 +250,8 @@ QQuickPane::~QQuickPane() QQuickPane::QQuickPane(QQuickPanePrivate &dd, QQuickItem *parent) : QQuickControl(dd, parent) { - setFlag(QQuickItem::ItemIsFocusScope); - setAcceptedMouseButtons(Qt::AllButtons); -#if QT_CONFIG(cursor) - setCursor(Qt::ArrowCursor); -#endif + Q_D(QQuickPane); + d->init(); } /*! @@ -421,7 +383,7 @@ void QQuickPane::componentComplete() { Q_D(QQuickPane); QQuickControl::componentComplete(); - d->updateContentSize(); + d->updateImplicitContentSize(); } void QQuickPane::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem) |