From 63ada5fa00ba37e0fbfcd7b70dcbd99580dd7c4f Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Mon, 19 Nov 2018 09:20:16 +0100 Subject: QQuickText: Signal content height/width changes also when resetting If we change the content height or content width to the initial one, we still need to signal the change. Fixes: QTBUG-71684 Change-Id: Idf6e3f89423eab3d8f5310c164c5acc5108e0d8b Reviewed-by: Frederik Gladhorn --- src/quick/items/qquicktext.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'src/quick/items/qquicktext.cpp') diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp index 3cce30aaf6..4d4540bc36 100644 --- a/src/quick/items/qquicktext.cpp +++ b/src/quick/items/qquicktext.cpp @@ -343,6 +343,19 @@ void QQuickTextPrivate::updateBaseline(qreal baseline, qreal dy) q->setBaselineOffset(baseline + yoff + q->topPadding()); } +void QQuickTextPrivate::signalSizeChange(const QSizeF &previousSize) +{ + Q_Q(QQuickText); + + if (layedOutTextRect.size() != previousSize) { + emit q->contentSizeChanged(); + if (layedOutTextRect.width() != previousSize.width()) + emit q->contentWidthChanged(layedOutTextRect.width()); + if (layedOutTextRect.height() != previousSize.height()) + emit q->contentHeightChanged(layedOutTextRect.height()); + } +} + void QQuickTextPrivate::updateSize() { Q_Q(QQuickText); @@ -363,6 +376,8 @@ void QQuickTextPrivate::updateSize() qreal hPadding = q->leftPadding() + q->rightPadding(); qreal vPadding = q->topPadding() + q->bottomPadding(); + const QSizeF previousSize = layedOutTextRect.size(); + if (text.isEmpty() && !isLineLaidOutConnected() && fontSizeMode() == QQuickText::FixedSize) { // How much more expensive is it to just do a full layout on an empty string here? // There may be subtle differences in the height and baseline calculations between @@ -379,14 +394,13 @@ void QQuickTextPrivate::updateSize() q->setImplicitSize(hPadding, fontHeight + vPadding); layedOutTextRect = QRectF(0, 0, 0, fontHeight); advance = QSizeF(); - emit q->contentSizeChanged(); + signalSizeChange(previousSize); updateType = UpdatePaintNode; q->update(); return; } QSizeF size(0, 0); - QSizeF previousSize = layedOutTextRect.size(); //setup instance of QTextLayout for all cases other than richtext if (!richText) { @@ -483,13 +497,7 @@ void QQuickTextPrivate::updateSize() } } - - if (layedOutTextRect.size() != previousSize) - emit q->contentSizeChanged(); - if (layedOutTextRect.width() != previousSize.width()) - emit q->contentWidthChanged(layedOutTextRect.width()); - if (layedOutTextRect.height() != previousSize.height()) - emit q->contentHeightChanged(layedOutTextRect.height()); + signalSizeChange(previousSize); updateType = UpdatePaintNode; q->update(); } -- cgit v1.2.3