diff --git a/src/layouts/QskLayoutConstraint.cpp b/src/layouts/QskLayoutConstraint.cpp index fdc3b17e..4aecb734 100644 --- a/src/layouts/QskLayoutConstraint.cpp +++ b/src/layouts/QskLayoutConstraint.cpp @@ -43,42 +43,6 @@ static inline bool qskHasHintFor( const QQuickItem* item, const char* method ) return false; } -static inline QSizeF qskExpandedSize( const QQuickItem* item, const QSizeF& constraint ) -{ - using namespace QskLayoutConstraint; - - const auto policy = sizePolicy( item ); - - QSizeF size = constraint; - - const bool vGrow = ( policy.policy( Qt::Vertical ) & QskSizePolicy::GrowFlag ); - const bool hGrow = ( policy.policy( Qt::Horizontal ) & QskSizePolicy::GrowFlag ); - - if ( !vGrow || !hGrow ) - { - const auto hint = sizeHint( item, Qt::PreferredSize, constraint ); - - if ( !vGrow ) - size.setHeight( hint.height() ); - - if ( !hGrow ) - size.setWidth( hint.width() ); - } - - if ( !size.isValid() ) - { - const auto hint = sizeHint( item, Qt::MaximumSize, size ); - - if ( size.width() == -1 ) - size.setWidth( hint.width() ); - - if ( size.height() == -1 ) - size.setHeight( hint.height() ); - } - - return size; -} - static inline QSizeF qskEffectiveSizeHint( const QQuickItem* item, Qt::SizeHint whichHint ) { @@ -403,32 +367,13 @@ QSizeF QskLayoutConstraint::sizeHint( const QQuickItem* item, return hint; } -QRectF QskLayoutConstraint::itemRect( const QQuickItem* item, +QRectF QskLayoutConstraint::boundedRect( const QQuickItem* item, const QRectF& rect, Qt::Alignment alignment ) { - QSizeF size = qskExpandedSize( item, QSizeF( -1, -1 ) ); - - switch( constraintType( item ) ) - { - case HeightForWidth: - { - if ( size.width() > rect.width() ) - size = qskExpandedSize( item, QSizeF( rect.width(), -1 ) ); - - break; - } - case WidthForHeight: - { - if ( size.height() > rect.height() ) - size = qskExpandedSize( item, QSizeF( -1, rect.height() ) ); - - break; - } - default: - break; - } - - size = size.boundedTo( rect.size() ); + auto size = boundedSize( item, rect.size() ); +#if 0 + size = size.boundedTo( rect.size() ); // ignoring minimumSize +#endif return qskAlignedRectF( rect, size.width(), size.height(), alignment ); } diff --git a/src/layouts/QskLayoutConstraint.h b/src/layouts/QskLayoutConstraint.h index 742482b6..70445efc 100644 --- a/src/layouts/QskLayoutConstraint.h +++ b/src/layouts/QskLayoutConstraint.h @@ -46,7 +46,10 @@ namespace QskLayoutConstraint QSK_EXPORT QskSizePolicy sizePolicy( const QQuickItem* ); + // size/rect bounded by the layout hints QSK_EXPORT QSizeF boundedSize( const QQuickItem*, const QSizeF& ); + QSK_EXPORT QRectF boundedRect( + const QQuickItem*, const QRectF&, Qt::Alignment ); QSK_EXPORT QSizeF sizeHint( const QQuickItem*, Qt::SizeHint, const QSizeF& constraint = QSizeF() ); @@ -54,9 +57,6 @@ namespace QskLayoutConstraint QSK_EXPORT qreal sizeHint( const QQuickItem*, Qt::SizeHint, Qt::Orientation, qreal constraint ); - QSK_EXPORT QRectF itemRect( - const QQuickItem*, const QRectF&, Qt::Alignment ); - QSK_EXPORT QskLayoutHint layoutHint( const QQuickItem*, Qt::Orientation, qreal constraint ); diff --git a/src/layouts/QskLayoutEngine2D.cpp b/src/layouts/QskLayoutEngine2D.cpp index d1116be9..884dd234 100644 --- a/src/layouts/QskLayoutEngine2D.cpp +++ b/src/layouts/QskLayoutEngine2D.cpp @@ -263,7 +263,7 @@ void QskLayoutEngine2D::layoutItem( QQuickItem* item, alignment = m_data->effectiveAlignment( alignment ); QRectF rect = layoutData->geometryAt( grid ); - rect = QskLayoutConstraint::itemRect(item, rect, alignment ); + rect = QskLayoutConstraint::boundedRect(item, rect, alignment ); if ( layoutData->direction == Qt::RightToLeft ) { diff --git a/src/layouts/QskStackBox.cpp b/src/layouts/QskStackBox.cpp index 6e5b49c2..456930ca 100644 --- a/src/layouts/QskStackBox.cpp +++ b/src/layouts/QskStackBox.cpp @@ -400,7 +400,7 @@ QRectF QskStackBox::geometryForItemAt( int index ) const const auto& info = m_data->itemInfos[ index ]; const auto align = info.alignment ? info.alignment : m_data->defaultAlignment; - return QskLayoutConstraint::itemRect( info.item, r, align ); + return QskLayoutConstraint::boundedRect( info.item, r, align ); } return QRectF( r.x(), r.y(), 0.0, 0.0 );