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 const auto hAlign = li->alignment() & Qt::AlignHorizontal_Mask;
398 const bool isMirrored = m_mirrored && !(hAlign & Qt::AlignAbsolute);
418 const qreal containerWidth = m_container->width() ? m_container->width() : m_container->implicitWidth();
419 const qreal containerHeight = m_container->height() ? m_container->height() : m_container->implicitHeight();
420 const qreal paddedX = m_contentMargins.left();
421 const qreal paddedY = m_contentMargins.top();
422 const qreal paddedWidth = qMax(containerWidth - m_contentMargins.left() - m_contentMargins.right(), .0);
423 const qreal paddedHeight = qMax(containerHeight - m_contentMargins.top() - m_contentMargins.bottom(), .0);
425 qreal maxTopMargin = .0;
426 qreal maxBottomMargin = .0;
431 for (QQStyleKitLayoutItem *li : left) {
432 QQuickItem *item = li->item();
433 if (!item || !item->isVisible())
436 const QMarginsF margins = li->margins();
437 const qreal itemWidth = layoutWidth(li, paddedWidth);
438 const qreal itemHeight = layoutHeight(li, paddedHeight);
439 auto y = vAlignY(li, paddedY, paddedHeight);
440 li->setX(x + margins.left());
442 li->setWidth(itemWidth);
443 li->setHeight(itemHeight);
444 x += itemWidth + margins.left() + margins.right() + m_spacing;
445 maxTopMargin = qMax(maxTopMargin, margins.top());
446 maxBottomMargin = qMax(maxBottomMargin, margins.bottom());
452 qreal x = paddedX + paddedWidth;
453 for (QQStyleKitLayoutItem *li : right) {
454 QQuickItem *item = li->item();
455 if (!item || !item->isVisible())
458 const QMarginsF margins = li->margins();
459 const qreal itemWidth = layoutWidth(li, paddedWidth);
460 const qreal itemHeight = layoutHeight(li, paddedHeight);
461 x -= itemWidth + margins.right() + margins.left();
462 auto y = vAlignY(li, paddedY, paddedHeight);
463 li->setX(x + margins.left());
465 li->setWidth(itemWidth);
466 li->setHeight(itemHeight);
468 maxTopMargin = qMax(maxTopMargin, margins.top());
469 maxBottomMargin = qMax(maxBottomMargin, margins.bottom());
475 qreal x = paddedX + (paddedWidth - totalWidth(center, m_spacing)) / 2;
476 for (QQStyleKitLayoutItem *li : center) {
477 QQuickItem *item = li->item();
478 if (!item || !item->isVisible())
481 const QMarginsF margins = li->margins();
482 const qreal itemWidth = layoutWidth(li, paddedWidth);
483 const qreal itemHeight = layoutHeight(li, paddedHeight);
484 auto y = vAlignY(li, paddedY, paddedHeight);
485 li->setX(x + margins.left());
487 li->setWidth(itemWidth);
488 li->setHeight(itemHeight);
489 x += itemWidth + margins.left() + margins.right() + m_spacing;
490 maxTopMargin = qMax(maxTopMargin, margins.top());
491 maxBottomMargin = qMax(maxBottomMargin, margins.bottom());
495 const auto leftWidth = totalWidth(left, m_spacing);
496 const auto leftHeight = totalHeight(left);
497 const auto rightWidth = totalWidth(right, m_spacing);
498 const auto rightHeight = totalHeight(right);
499 const auto centerWidth = totalWidth(center, m_spacing);
500 const auto centerHeight = totalHeight(center);
502 const auto implicitWidth = leftWidth + rightWidth + centerWidth
503 - m_spacing * (left.isEmpty() ? 0 : 1)
504 - m_spacing * (right.isEmpty() ? 0 : 1)
505 - m_spacing * (center.isEmpty() ? 0 : 1)
506 + m_contentMargins.left() + m_contentMargins.right();
507 setImplicitWidth(implicitWidth);
508 const auto implicitHeight = qMax(qMax(leftHeight, rightHeight), centerHeight)
509 + m_contentMargins.top() + m_contentMargins.bottom();
510 setImplicitHeight(implicitHeight);
515 auto leftPadding = m_contentMargins.left() + leftWidth;
516 auto topPadding = m_contentMargins.top() + maxTopMargin;
517 auto rightPadding = m_contentMargins.right() + rightWidth;
518 auto bottomPadding = m_contentMargins.bottom() + maxBottomMargin;
520 std::swap(leftPadding, rightPadding);
521 QMarginsF newPadding = QMarginsF(leftPadding, topPadding, rightPadding, bottomPadding);
522 if (m_padding != newPadding) {
523 m_padding = newPadding;
524 emit paddingChanged();