diff options
author | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2015-06-04 10:24:46 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2015-06-04 10:28:48 +0200 |
commit | 9556f6d075b61fa95d6e1057f305e522a26f71d6 (patch) | |
tree | 53190472453390810c47b9b5a47b23188a00267e /src/quick/items/qquicktext.cpp | |
parent | 42ffe9b193a5bd958b0853233fd0d94170722bd1 (diff) | |
parent | 1fd0cdc6a2e01775d8a79c6614910cc5a2fbf2b3 (diff) |
Merge remote-tracking branch 'origin/5.5' into dev
Conflicts:
src/qml/jsruntime/qv4engine_p.h
src/quick/items/qquickitemsmodule.cpp
src/quick/items/qquicktext.cpp
src/quick/util/qquickpixmapcache.cpp
tests/auto/quick/qquickwindow/tst_qquickwindow.cpp
Change-Id: I90ecaad6a4bfaa4f36149a7463f4d7141f4a516a
Diffstat (limited to 'src/quick/items/qquicktext.cpp')
-rw-r--r-- | src/quick/items/qquicktext.cpp | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp index 9db5fa2059..799b1465ea 100644 --- a/src/quick/items/qquicktext.cpp +++ b/src/quick/items/qquicktext.cpp @@ -809,7 +809,7 @@ QRectF QQuickTextPrivate::setupTextLayout(qreal *const baseline) lineWidth = (q->widthValid() || implicitWidthValid) && q->width() > 0 ? q->width() : FLT_MAX; - qreal maxHeight = q->heightValid() ? q->height() : FLT_MAX; + qreal maxHeight = q->heightValid() ? availableHeight() : FLT_MAX; const bool customLayout = isLineLaidOutConnected(); const bool wasTruncated = truncated; @@ -829,6 +829,7 @@ QRectF QQuickTextPrivate::setupTextLayout(qreal *const baseline) : largeFont; int scaledFontSize = largeFont; + bool widthChanged = false; widthExceeded = availableWidth() <= 0 && (singlelineElide || canWrap || horizontalFit); heightExceeded = availableHeight() <= 0 && (multilineElide || verticalFit); @@ -1028,6 +1029,7 @@ QRectF QQuickTextPrivate::setupTextLayout(qreal *const baseline) if ((lineWidth < qMin(oldWidth, naturalWidth) || (widthExceeded && lineWidth > oldWidth)) && (singlelineElide || multilineElide || canWrap || horizontalFit || q->effectiveHAlign() != QQuickText::AlignLeft)) { + widthChanged = true; widthExceeded = false; heightExceeded = false; continue; @@ -1049,6 +1051,39 @@ QRectF QQuickTextPrivate::setupTextLayout(qreal *const baseline) heightExceeded = false; continue; } + } else if (widthChanged) { + widthChanged = false; + if (line.isValid()) { + for (int lineCount = layout.lineCount(); lineCount < maxLineCount; ++lineCount) { + line = layout.createLine(); + if (!line.isValid()) + break; + setLineGeometry(line, lineWidth, naturalHeight); + } + } + layout.endLayout(); + + bool wasInLayout = internalWidthUpdate; + internalWidthUpdate = true; + q->setImplicitHeight(naturalHeight); + internalWidthUpdate = wasInLayout; + + multilineElide = elideMode == QQuickText::ElideRight + && q->widthValid() + && (q->heightValid() || maximumLineCountValid); + verticalFit = fontSizeMode() & QQuickText::VerticalFit + && (q->heightValid() || (maximumLineCountValid && canWrap)); + + const qreal oldHeight = maxHeight; + maxHeight = q->heightValid() ? availableHeight() : FLT_MAX; + // If the height of the item has changed and it's possible the result of eliding, + // line count truncation or scaling has changed, do another layout. + if ((maxHeight < qMin(oldHeight, naturalHeight) || (heightExceeded && maxHeight > oldHeight)) + && (multilineElide || (canWrap && maximumLineCountValid))) { + widthExceeded = false; + heightExceeded = false; + continue; + } } else { layout.endLayout(); } @@ -1420,10 +1455,14 @@ QQuickText::~QQuickText() The weight can be one of: \list + \li Font.Thin \li Font.Light + \li Font.ExtraLight \li Font.Normal - the default + \li Font.Medium \li Font.DemiBold \li Font.Bold + \li Font.ExtraBold \li Font.Black \endlist |