78void QQuickIconLabelPrivate::syncImage()
80 if (!image || icon.isEmpty())
83 image->setName(icon.name());
84 image->setSource(icon.resolvedSource());
85 image->setSourceSize(QSize(icon.width(), icon.height()));
86 image->setColor(icon.color());
87 image->setCache(icon.cache());
88 const int valign = alignment & Qt::AlignVertical_Mask;
89 image->setVerticalAlignment(
static_cast<QQuickImage::VAlignment>(valign));
90 const int halign = alignment & Qt::AlignHorizontal_Mask;
91 image->setHorizontalAlignment(
static_cast<QQuickImage::HAlignment>(halign));
167void QQuickIconLabelPrivate::updateImplicitSize()
169 Q_Q(QQuickIconLabel);
170 const bool showIcon = image && hasIcon();
171 const bool showText = label && hasText();
172 const qreal horizontalPadding = leftPadding + rightPadding;
173 const qreal verticalPadding = topPadding + bottomPadding;
174 const qreal iconImplicitWidth = showIcon ? image->implicitWidth() : 0;
175 const qreal iconImplicitHeight = showIcon ? image->implicitHeight() : 0;
176 const qreal textImplicitWidth = showText ? label->implicitWidth() : 0;
177 const qreal textImplicitHeight = showText ? label->implicitHeight() : 0;
178 const qreal effectiveSpacing = showText && showIcon && image->implicitWidth() > 0 ? spacing : 0;
179 const qreal implicitWidth = display == QQuickIconLabel::TextBesideIcon ? iconImplicitWidth + textImplicitWidth + effectiveSpacing
180 : qMax(iconImplicitWidth, textImplicitWidth);
181 const qreal implicitHeight = display == QQuickIconLabel::TextUnderIcon ? iconImplicitHeight + textImplicitHeight + effectiveSpacing
182 : qMax(iconImplicitHeight, textImplicitHeight);
183 q->setImplicitSize(implicitWidth + horizontalPadding, implicitHeight + verticalPadding);
205void QQuickIconLabelPrivate::layout()
207 Q_Q(QQuickIconLabel);
208 if (!componentComplete)
211 const qreal availableWidth = width - leftPadding - rightPadding;
212 const qreal availableHeight = height - topPadding - bottomPadding;
215 case QQuickIconLabel::IconOnly:
217 const QRectF iconRect = alignedRect(mirrored, alignment,
218 QSizeF(qMin(image->implicitWidth(), availableWidth),
219 qMin(image->implicitHeight(), availableHeight)),
220 QRectF(leftPadding, topPadding, availableWidth, availableHeight));
221 image->setSize(iconRect.size());
222 image->snapPositionTo(iconRect.topLeft());
225 case QQuickIconLabel::TextOnly:
227 const QRectF textRect = alignedRect(mirrored, alignment,
228 QSizeF(qMin(label->implicitWidth(), availableWidth),
229 qMin(label->implicitHeight(), availableHeight)),
230 QRectF(leftPadding, topPadding, availableWidth, availableHeight));
231 label->setSize(textRect.size());
232 label->setPosition(textRect.topLeft());
236 case QQuickIconLabel::TextUnderIcon: {
241 iconSize.setWidth(qMin(image->implicitWidth(), availableWidth));
242 iconSize.setHeight(qMin(image->implicitHeight(), availableHeight));
244 qreal effectiveSpacing = 0;
246 if (!iconSize.isEmpty())
247 effectiveSpacing = spacing;
248 textSize.setWidth(qMin(label->implicitWidth(), availableWidth));
249 textSize.setHeight(qMin(label->implicitHeight(), availableHeight - iconSize.height() - effectiveSpacing));
252 QRectF combinedRect = alignedRect(mirrored, alignment,
253 QSizeF(qMax(iconSize.width(), textSize.width()),
254 iconSize.height() + effectiveSpacing + textSize.height()),
255 QRectF(leftPadding, topPadding, availableWidth, availableHeight));
257 QRectF iconRect = alignedRect(mirrored, Qt::AlignHCenter | Qt::AlignTop, iconSize, combinedRect);
258 image->setSize(iconRect.size());
259 image->snapPositionTo(iconRect.topLeft());
262 QRectF textRect = alignedRect(mirrored, Qt::AlignHCenter | Qt::AlignBottom, textSize, combinedRect);
263 label->setSize(textRect.size());
264 label->setPosition(textRect.topLeft());
269 case QQuickIconLabel::TextBesideIcon:
272 QSizeF iconSize(0, 0);
273 QSizeF textSize(0, 0);
275 iconSize.setWidth(qMin(image->implicitWidth(), availableWidth));
276 iconSize.setHeight(qMin(image->implicitHeight(), availableHeight));
278 qreal effectiveSpacing = 0;
280 if (!iconSize.isEmpty())
281 effectiveSpacing = spacing;
282 textSize.setWidth(qMin(label->implicitWidth(), availableWidth - iconSize.width() - effectiveSpacing));
283 textSize.setHeight(qMin(label->implicitHeight(), availableHeight));
286 const QRectF combinedRect = alignedRect(mirrored, alignment,
287 QSizeF(iconSize.width() + effectiveSpacing + textSize.width(),
288 qMax(iconSize.height(), textSize.height())),
289 QRectF(leftPadding, topPadding, availableWidth, availableHeight));
291 const QRectF iconRect = alignedRect(mirrored, Qt::AlignLeft | Qt::AlignVCenter, iconSize, combinedRect);
292 image->setSize(iconRect.size());
293 image->snapPositionTo(iconRect.topLeft());
296 const QRectF textRect = alignedRect(mirrored, Qt::AlignRight | Qt::AlignVCenter, textSize, combinedRect);
297 label->setSize(textRect.size());
298 label->setPosition(textRect.topLeft());
303 q->setBaselineOffset(label ? label->y() + label->baselineOffset() : 0);