QskLayoutConstraint::effectiveConstraint hidden
This commit is contained in:
parent
ff0118fe23
commit
50d85a524e
@ -96,6 +96,65 @@ static inline QSizeF qskExpandedSize( const QQuickItem* item, const QSizeF& cons
|
|||||||
return size;
|
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 )
|
QskLayoutConstraint::Type QskLayoutConstraint::constraintType( const QQuickItem* item )
|
||||||
{
|
{
|
||||||
if ( item == nullptr )
|
if ( item == nullptr )
|
||||||
@ -227,65 +286,6 @@ qreal QskLayoutConstraint::constrainedChildrenMetric(
|
|||||||
return constrainedValue;
|
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 )
|
QskSizePolicy QskLayoutConstraint::sizePolicy( const QQuickItem* item )
|
||||||
{
|
{
|
||||||
if ( item )
|
if ( item )
|
||||||
@ -303,8 +303,8 @@ QskSizePolicy QskLayoutConstraint::sizePolicy( const QQuickItem* item )
|
|||||||
|
|
||||||
QSizeF QskLayoutConstraint::boundedSize( const QQuickItem* item, const QSizeF& size )
|
QSizeF QskLayoutConstraint::boundedSize( const QQuickItem* item, const QSizeF& size )
|
||||||
{
|
{
|
||||||
const auto minSize = effectiveConstraint( item, Qt::MinimumSize );
|
const auto minSize = qskEffectiveSizeHint( item, Qt::MinimumSize );
|
||||||
const auto maxSize = effectiveConstraint( item, Qt::MaximumSize );
|
const auto maxSize = qskEffectiveSizeHint( item, Qt::MaximumSize );
|
||||||
|
|
||||||
qreal width = size.width();
|
qreal width = size.width();
|
||||||
qreal height = size.height();
|
qreal height = size.height();
|
||||||
@ -330,7 +330,7 @@ QSizeF QskLayoutConstraint::adjustedSize(
|
|||||||
const auto policy = sizePolicy( item );
|
const auto policy = sizePolicy( item );
|
||||||
|
|
||||||
const auto boundedSize = QskLayoutConstraint::boundedSize( item, targetSize );
|
const auto boundedSize = QskLayoutConstraint::boundedSize( item, targetSize );
|
||||||
const auto preferredSize = effectiveConstraint( item, Qt::PreferredSize );
|
const auto preferredSize = qskEffectiveSizeHint( item, Qt::PreferredSize );
|
||||||
|
|
||||||
qreal w;
|
qreal w;
|
||||||
qreal h;
|
qreal h;
|
||||||
@ -403,7 +403,7 @@ QSizeF QskLayoutConstraint::sizeHint( const QQuickItem* item,
|
|||||||
|
|
||||||
if ( !( sizePolicy( item ).policy( Qt::Horizontal ) & growFlags ) )
|
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 )
|
if ( maxW >= 0.0 )
|
||||||
w = qMin( w, maxW );
|
w = qMin( w, maxW );
|
||||||
@ -418,7 +418,7 @@ QSizeF QskLayoutConstraint::sizeHint( const QQuickItem* item,
|
|||||||
|
|
||||||
if ( !( sizePolicy( item ).policy( Qt::Vertical ) & growFlags ) )
|
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 )
|
if ( maxH >= 0.0 )
|
||||||
h = qMin( h, maxH );
|
h = qMin( h, maxH );
|
||||||
@ -429,7 +429,7 @@ QSizeF QskLayoutConstraint::sizeHint( const QQuickItem* item,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hint = effectiveConstraint( item, Qt::PreferredSize );
|
hint = qskEffectiveSizeHint( item, Qt::PreferredSize );
|
||||||
|
|
||||||
if ( constraintType == WidthForHeight )
|
if ( constraintType == WidthForHeight )
|
||||||
hint.setWidth( widthForHeight( item, hint.height() ) );
|
hint.setWidth( widthForHeight( item, hint.height() ) );
|
||||||
@ -439,7 +439,7 @@ QSizeF QskLayoutConstraint::sizeHint( const QQuickItem* item,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hint = effectiveConstraint( item, whichHint );
|
hint = qskEffectiveSizeHint( item, whichHint );
|
||||||
}
|
}
|
||||||
|
|
||||||
hint = hint.expandedTo( QSizeF( 0.0, 0.0 ) );
|
hint = hint.expandedTo( QSizeF( 0.0, 0.0 ) );
|
||||||
|
@ -43,7 +43,6 @@ namespace QskLayoutConstraint
|
|||||||
QSK_EXPORT qreal constrainedChildrenMetric(
|
QSK_EXPORT qreal constrainedChildrenMetric(
|
||||||
Type, const QskControl*, qreal constraint );
|
Type, const QskControl*, qreal constraint );
|
||||||
|
|
||||||
QSK_EXPORT QSizeF effectiveConstraint( const QQuickItem*, Qt::SizeHint );
|
|
||||||
QSK_EXPORT QskSizePolicy sizePolicy( const QQuickItem* );
|
QSK_EXPORT QskSizePolicy sizePolicy( const QQuickItem* );
|
||||||
|
|
||||||
QSK_EXPORT QSizeF boundedSize( const QQuickItem*, const QSizeF& );
|
QSK_EXPORT QSizeF boundedSize( const QQuickItem*, const QSizeF& );
|
||||||
|
@ -445,7 +445,8 @@ QSizeF QskStackBox::contentsSizeHint() const
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const QSizeF hint = effectiveConstraint( item, Qt::PreferredSize );
|
const auto hint = QskLayoutConstraint::sizeHint(
|
||||||
|
item, Qt::PreferredSize, QSizeF( -1, -1 ) );
|
||||||
|
|
||||||
if ( hint.width() >= width )
|
if ( hint.width() >= width )
|
||||||
width = hint.width();
|
width = hint.width();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user