387 if (!m_container || m_container->width() <= 0 || m_container->height() <= 0)
390 QList<QQStyleKitLayoutItem *> left;
391 QList<QQStyleKitLayoutItem *> right;
392 QList<QQStyleKitLayoutItem *> center;
394 for (QQStyleKitLayoutItem *li : m_layoutItems) {
395 if (!li->item() || !li->item()->isVisible())
397 if (li->fillWidth()) {
403 const auto hAlign = li->alignment() & Qt::AlignHorizontal_Mask;
404 const bool isMirrored = m_mirrored && !(hAlign & Qt::AlignAbsolute);
424 const qreal containerWidth = m_container->width() ? m_container->width() : m_container->implicitWidth();
425 const qreal containerHeight = m_container->height() ? m_container->height() : m_container->implicitHeight();
426 const qreal paddedX = m_contentMargins.left();
427 const qreal paddedY = m_contentMargins.top();
428 const qreal paddedWidth = qMax(containerWidth - m_contentMargins.left() - m_contentMargins.right(), .0);
429 const qreal paddedHeight = qMax(containerHeight - m_contentMargins.top() - m_contentMargins.bottom(), .0);
431 qreal maxTopMargin = .0;
432 qreal maxBottomMargin = .0;
437 for (QQStyleKitLayoutItem *li : left) {
438 QQuickItem *item = li->item();
439 if (!item || !item->isVisible())
442 const QMarginsF margins = li->margins();
443 const qreal itemWidth = layoutWidth(li, paddedWidth);
444 const qreal itemHeight = layoutHeight(li, paddedHeight);
445 auto y = vAlignY(li, paddedY, paddedHeight);
446 li->setX(x + margins.left());
448 li->setWidth(itemWidth);
449 li->setHeight(itemHeight);
450 x += itemWidth + margins.left() + margins.right() + m_spacing;
451 maxTopMargin = qMax(maxTopMargin, margins.top());
452 maxBottomMargin = qMax(maxBottomMargin, margins.bottom());
458 qreal x = paddedX + paddedWidth;
459 for (QQStyleKitLayoutItem *li : right) {
460 QQuickItem *item = li->item();
461 if (!item || !item->isVisible())
464 const QMarginsF margins = li->margins();
465 const qreal itemWidth = layoutWidth(li, paddedWidth);
466 const qreal itemHeight = layoutHeight(li, paddedHeight);
467 x -= itemWidth + margins.right() + margins.left();
468 auto y = vAlignY(li, paddedY, paddedHeight);
469 li->setX(x + margins.left());
471 li->setWidth(itemWidth);
472 li->setHeight(itemHeight);
474 maxTopMargin = qMax(maxTopMargin, margins.top());
475 maxBottomMargin = qMax(maxBottomMargin, margins.bottom());
481 qreal x = paddedX + (paddedWidth - totalWidth(center, m_spacing)) / 2;
482 for (QQStyleKitLayoutItem *li : center) {
483 QQuickItem *item = li->item();
484 if (!item || !item->isVisible())
487 const QMarginsF margins = li->margins();
488 const qreal itemWidth = layoutWidth(li, paddedWidth);
489 const qreal itemHeight = layoutHeight(li, paddedHeight);
490 auto y = vAlignY(li, paddedY, paddedHeight);
491 li->setX(x + margins.left());
493 li->setWidth(itemWidth);
494 li->setHeight(itemHeight);
495 x += itemWidth + margins.left() + margins.right() + m_spacing;
496 maxTopMargin = qMax(maxTopMargin, margins.top());
497 maxBottomMargin = qMax(maxBottomMargin, margins.bottom());
501 const auto leftWidth = totalWidth(left, m_spacing);
502 const auto leftHeight = totalHeight(left);
503 const auto rightWidth = totalWidth(right, m_spacing);
504 const auto rightHeight = totalHeight(right);
505 const auto centerWidth = totalWidth(center, m_spacing);
506 const auto centerHeight = totalHeight(center);
508 const auto implicitWidth = leftWidth + rightWidth + centerWidth
509 - m_spacing * (left.isEmpty() ? 0 : 1)
510 - m_spacing * (right.isEmpty() ? 0 : 1)
511 - m_spacing * (center.isEmpty() ? 0 : 1)
512 + m_contentMargins.left() + m_contentMargins.right();
513 setImplicitWidth(implicitWidth);
514 const auto implicitHeight = qMax(qMax(leftHeight, rightHeight), centerHeight)
515 + m_contentMargins.top() + m_contentMargins.bottom();
516 setImplicitHeight(implicitHeight);
521 auto leftPadding = m_contentMargins.left() + leftWidth;
522 auto topPadding = m_contentMargins.top() + maxTopMargin;
523 auto rightPadding = m_contentMargins.right() + rightWidth;
524 auto bottomPadding = m_contentMargins.bottom() + maxBottomMargin;
526 std::swap(leftPadding, rightPadding);
527 QMarginsF newPadding = QMarginsF(leftPadding, topPadding, rightPadding, bottomPadding);
528 if (m_padding != newPadding) {
529 m_padding = newPadding;
530 emit paddingChanged();