From 50d85a524e9fdb9298f164642b4840420b2e3915 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Thu, 25 Jul 2019 18:38:54 +0200 Subject: [PATCH] QskLayoutConstraint::effectiveConstraint hidden --- src/layouts/QskLayoutConstraint.cpp | 132 ++++++++++++++-------------- src/layouts/QskLayoutConstraint.h | 1 - src/layouts/QskStackBox.cpp | 3 +- 3 files changed, 68 insertions(+), 68 deletions(-) diff --git a/src/layouts/QskLayoutConstraint.cpp b/src/layouts/QskLayoutConstraint.cpp index 69bf25e4..e07e0b56 100644 --- a/src/layouts/QskLayoutConstraint.cpp +++ b/src/layouts/QskLayoutConstraint.cpp @@ -96,6 +96,65 @@ static inline QSizeF qskExpandedSize( const QQuickItem* item, const QSizeF& cons return size; } +static inline QSizeF qskEffectiveSizeHint( + const QQuickItem* item, Qt::SizeHint whichHint ) +{ + if ( auto control = qskControlCast( item ) ) + return control->effectiveSizeHint( whichHint ); + + QSizeF constraint( -1.0, -1.0 ); // no hint + + const char* properties[] = + { + "minimumSize", + "preferredSize", + "maximumSize" + }; + + const QVariant v = item->property( properties[ whichHint ] ); + if ( v.canConvert( QMetaType::QSizeF ) ) + constraint = v.toSizeF(); + + switch ( whichHint ) + { + case Qt::MinimumSize: + { + if ( constraint.width() < 0 ) + constraint.setWidth( 0.0 ); + + if ( constraint.height() < 0 ) + constraint.setHeight( 0.0 ); + + break; + } + + case Qt::PreferredSize: + { + if ( constraint.width() < 0 ) + constraint.setWidth( item->implicitWidth() ); + + if ( constraint.height() < 0 ) + constraint.setHeight( item->implicitHeight() ); + + break; + } + case Qt::MaximumSize: + { + if ( constraint.width() < 0 ) + constraint.setWidth( QskLayoutConstraint::unlimited ); + + if ( constraint.height() < 0 ) + constraint.setHeight( QskLayoutConstraint::unlimited ); + + break; + } + default: + break; + } + + return constraint; +} + QskLayoutConstraint::Type QskLayoutConstraint::constraintType( const QQuickItem* item ) { if ( item == nullptr ) @@ -227,65 +286,6 @@ qreal QskLayoutConstraint::constrainedChildrenMetric( return constrainedValue; } -QSizeF QskLayoutConstraint::effectiveConstraint( - const QQuickItem* item, Qt::SizeHint whichHint ) -{ - if ( auto control = qskControlCast( item ) ) - return control->effectiveSizeHint( whichHint ); - - QSizeF constraint( -1.0, -1.0 ); // no hint - - const char* properties[] = - { - "minimumSize", - "preferredSize", - "maximumSize" - }; - - const QVariant v = item->property( properties[ whichHint ] ); - if ( v.canConvert( QMetaType::QSizeF ) ) - constraint = v.toSizeF(); - - switch ( whichHint ) - { - case Qt::MinimumSize: - { - if ( constraint.width() < 0 ) - constraint.setWidth( 0.0 ); - - if ( constraint.height() < 0 ) - constraint.setHeight( 0.0 ); - - break; - } - - case Qt::PreferredSize: - { - if ( constraint.width() < 0 ) - constraint.setWidth( item->implicitWidth() ); - - if ( constraint.height() < 0 ) - constraint.setHeight( item->implicitHeight() ); - - break; - } - case Qt::MaximumSize: - { - if ( constraint.width() < 0 ) - constraint.setWidth( unlimited ); - - if ( constraint.height() < 0 ) - constraint.setHeight( unlimited ); - - break; - } - default: - break; - } - - return constraint; -} - QskSizePolicy QskLayoutConstraint::sizePolicy( const QQuickItem* item ) { if ( item ) @@ -303,8 +303,8 @@ QskSizePolicy QskLayoutConstraint::sizePolicy( const QQuickItem* item ) QSizeF QskLayoutConstraint::boundedSize( const QQuickItem* item, const QSizeF& size ) { - const auto minSize = effectiveConstraint( item, Qt::MinimumSize ); - const auto maxSize = effectiveConstraint( item, Qt::MaximumSize ); + const auto minSize = qskEffectiveSizeHint( item, Qt::MinimumSize ); + const auto maxSize = qskEffectiveSizeHint( item, Qt::MaximumSize ); qreal width = size.width(); qreal height = size.height(); @@ -330,7 +330,7 @@ QSizeF QskLayoutConstraint::adjustedSize( const auto policy = sizePolicy( item ); const auto boundedSize = QskLayoutConstraint::boundedSize( item, targetSize ); - const auto preferredSize = effectiveConstraint( item, Qt::PreferredSize ); + const auto preferredSize = qskEffectiveSizeHint( item, Qt::PreferredSize ); qreal w; qreal h; @@ -403,7 +403,7 @@ QSizeF QskLayoutConstraint::sizeHint( const QQuickItem* item, if ( !( sizePolicy( item ).policy( Qt::Horizontal ) & growFlags ) ) { - const auto maxW = effectiveConstraint( item, Qt::PreferredSize ).width(); + const auto maxW = qskEffectiveSizeHint( item, Qt::PreferredSize ).width(); if ( maxW >= 0.0 ) w = qMin( w, maxW ); @@ -418,7 +418,7 @@ QSizeF QskLayoutConstraint::sizeHint( const QQuickItem* item, if ( !( sizePolicy( item ).policy( Qt::Vertical ) & growFlags ) ) { - const auto maxH = effectiveConstraint( item, Qt::PreferredSize ).height(); + const auto maxH = qskEffectiveSizeHint( item, Qt::PreferredSize ).height(); if ( maxH >= 0.0 ) h = qMin( h, maxH ); @@ -429,7 +429,7 @@ QSizeF QskLayoutConstraint::sizeHint( const QQuickItem* item, } else { - hint = effectiveConstraint( item, Qt::PreferredSize ); + hint = qskEffectiveSizeHint( item, Qt::PreferredSize ); if ( constraintType == WidthForHeight ) hint.setWidth( widthForHeight( item, hint.height() ) ); @@ -439,7 +439,7 @@ QSizeF QskLayoutConstraint::sizeHint( const QQuickItem* item, } else { - hint = effectiveConstraint( item, whichHint ); + hint = qskEffectiveSizeHint( item, whichHint ); } hint = hint.expandedTo( QSizeF( 0.0, 0.0 ) ); diff --git a/src/layouts/QskLayoutConstraint.h b/src/layouts/QskLayoutConstraint.h index 734e0ef0..a6416305 100644 --- a/src/layouts/QskLayoutConstraint.h +++ b/src/layouts/QskLayoutConstraint.h @@ -43,7 +43,6 @@ namespace QskLayoutConstraint QSK_EXPORT qreal constrainedChildrenMetric( Type, const QskControl*, qreal constraint ); - QSK_EXPORT QSizeF effectiveConstraint( const QQuickItem*, Qt::SizeHint ); QSK_EXPORT QskSizePolicy sizePolicy( const QQuickItem* ); QSK_EXPORT QSizeF boundedSize( const QQuickItem*, const QSizeF& ); diff --git a/src/layouts/QskStackBox.cpp b/src/layouts/QskStackBox.cpp index 46c7be3e..6e5b49c2 100644 --- a/src/layouts/QskStackBox.cpp +++ b/src/layouts/QskStackBox.cpp @@ -445,7 +445,8 @@ QSizeF QskStackBox::contentsSizeHint() const } else { - const QSizeF hint = effectiveConstraint( item, Qt::PreferredSize ); + const auto hint = QskLayoutConstraint::sizeHint( + item, Qt::PreferredSize, QSizeF( -1, -1 ) ); if ( hint.width() >= width ) width = hint.width();