aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickcontrols2/qquickiconlabel.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-04-10 15:42:03 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-04-11 12:55:15 +0000
commit4503d45b93721e516e949419f3b9c6b796a7c13e (patch)
tree3aae36805b8509e805f6d956b3884b8a171565d7 /src/quickcontrols2/qquickiconlabel.cpp
parenta6be134c9d3656e90cf10f1326b05ff085a1e23c (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.cpp44
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.