diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-04-10 15:42:03 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-04-11 12:55:15 +0000 |
commit | 4503d45b93721e516e949419f3b9c6b796a7c13e (patch) | |
tree | 3aae36805b8509e805f6d956b3884b8a171565d7 /src/quickcontrols2/qquickiconlabel.cpp | |
parent | a6be134c9d3656e90cf10f1326b05ff085a1e23c (diff) |
Implement QQuickIconLabel::TextUnderIcon
This will be the default for TabButton and RoundButton.
Change-Id: I9ccb0d35f33a80fe7e3da26617ed6f42232afe17
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Diffstat (limited to 'src/quickcontrols2/qquickiconlabel.cpp')
-rw-r--r-- | src/quickcontrols2/qquickiconlabel.cpp | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/src/quickcontrols2/qquickiconlabel.cpp b/src/quickcontrols2/qquickiconlabel.cpp index 5f263f49..cfb733ac 100644 --- a/src/quickcontrols2/qquickiconlabel.cpp +++ b/src/quickcontrols2/qquickiconlabel.cpp @@ -68,9 +68,11 @@ void QQuickIconLabelPrivate::updateImplicitSize() const qreal textImplicitWidth = showText ? label->implicitWidth() : 0; const qreal textImplicitHeight = showText ? label->implicitHeight() : 0; const qreal effectiveSpacing = showText && showIcon && icon->implicitWidth() > 0 ? spacing : 0; - const qreal implicitWidth = iconImplicitWidth + textImplicitWidth + effectiveSpacing + horizontalPadding; - const qreal implicitHeight = qMax(iconImplicitHeight, textImplicitHeight) + verticalPadding; - q->setImplicitSize(implicitWidth, implicitHeight); + const qreal implicitWidth = display == QQuickIconLabel::TextBesideIcon ? iconImplicitWidth + textImplicitWidth + effectiveSpacing + : qMax(iconImplicitWidth, textImplicitWidth); + const qreal implicitHeight = display == QQuickIconLabel::TextUnderIcon ? iconImplicitHeight + textImplicitHeight + effectiveSpacing + : qMax(iconImplicitHeight, textImplicitHeight); + q->setImplicitSize(implicitWidth + horizontalPadding, implicitHeight + verticalPadding); } // adapted from QStyle::alignedRect() @@ -127,6 +129,42 @@ void QQuickIconLabelPrivate::layout() if (icon) icon->setVisible(false); break; + + case QQuickIconLabel::TextUnderIcon: { + // Work out the sizes first, as the positions depend on them. + QSizeF iconSize; + QSizeF textSize; + if (icon) { + iconSize.setWidth(qMin(icon->implicitWidth(), availableWidth)); + iconSize.setHeight(qMin(icon->implicitHeight(), availableHeight)); + } + qreal effectiveSpacing = 0; + if (label) { + if (!iconSize.isEmpty()) + effectiveSpacing = spacing; + textSize.setWidth(qMin(label->implicitWidth(), availableWidth)); + textSize.setHeight(qMin(label->implicitHeight(), availableHeight - iconSize.height() - effectiveSpacing)); + } + + QRectF combinedRect = alignedRect(mirrored, alignment, + QSizeF(qMax(iconSize.width(), textSize.width()), + iconSize.height() + effectiveSpacing + textSize.height()), + QRectF(leftPadding, topPadding, availableWidth, availableHeight)); + if (icon) { + QRectF iconRect = alignedRect(mirrored, Qt::AlignHCenter | Qt::AlignTop, iconSize, combinedRect); + icon->setSize(iconRect.size()); + icon->setPosition(iconRect.topLeft()); + icon->setVisible(true); + } + if (label) { + QRectF textRect = alignedRect(mirrored, Qt::AlignHCenter | Qt::AlignBottom, textSize, combinedRect); + label->setSize(textRect.size()); + label->setPosition(textRect.topLeft()); + label->setVisible(true); + } + break; + } + case QQuickIconLabel::TextBesideIcon: default: // Work out the sizes first, as the positions depend on them. |