hiding isTransparentForPositioner

This commit is contained in:
Uwe Rathmann 2022-04-07 17:19:59 +02:00
parent c17e3defd3
commit 741af6a8a6
5 changed files with 25 additions and 16 deletions

View File

@ -804,7 +804,7 @@ void QskControl::itemChange( QQuickItem::ItemChange change,
}
case QQuickItem::ItemChildAddedChange:
{
if ( autoLayoutChildren() && !qskIsTransparentForPositioner( value.item ) )
if ( autoLayoutChildren() && qskIsAdjustableByLayout( value.item ) )
polish();
break;
@ -844,13 +844,7 @@ void QskControl::updateItemPolish()
const auto children = childItems();
for ( auto child : children )
{
/*
We don't want to resize invisible children, but then
we would need to set up connections to know when a child
becomes visible. So we don't use qskIsVisibleToLayout here.
And what about using QskControl::LayoutOutWhenHidden ?
*/
if ( !qskIsTransparentForPositioner( child ) )
if ( qskIsAdjustableByLayout( child ) )
{
const auto r = qskConstrainedItemRect( child, rect );
qskSetItemGeometry( child, r );

View File

@ -133,14 +133,27 @@ bool qskIsTransparentForPositioner( const QQuickItem* item )
bool qskIsVisibleToLayout( const QQuickItem* item )
{
if ( item )
if ( item == nullptr )
return false;
const auto d = QQuickItemPrivate::get( item );
return !d->isTransparentForPositioner()
&& ( d->explicitVisible || qskRetainSizeWhenHidden( item ) );
}
bool qskIsAdjustableByLayout( const QQuickItem* item )
{
if ( qskIsTransparentForPositioner( item ) )
return false;
bool adjustable = qskIsVisibleToParent( item );
if ( !adjustable )
{
const auto d = QQuickItemPrivate::get( item );
return !d->isTransparentForPositioner()
&& ( d->explicitVisible || qskRetainSizeWhenHidden( item ) );
if ( auto control = qskControlCast( item ) )
adjustable = control->testLayoutHint( QskControl::LayoutWhenHidden );
}
return false;
return adjustable;
}
QskSizePolicy qskSizePolicy( const QQuickItem* item )

View File

@ -32,7 +32,9 @@ QSK_EXPORT bool qskIsPolishScheduled( const QQuickItem* );
QSK_EXPORT void qskSetTransparentForPositioner( QQuickItem*, bool );
QSK_EXPORT bool qskIsTransparentForPositioner( const QQuickItem* );
QSK_EXPORT bool qskIsVisibleToLayout( const QQuickItem* );
QSK_EXPORT bool qskIsAdjustableByLayout( const QQuickItem* );
QSK_EXPORT QSizeF qskEffectiveSizeHint( const QQuickItem*,
Qt::SizeHint, const QSizeF& constraint = QSizeF() );

View File

@ -248,7 +248,7 @@ void QskSubWindow::itemChange( QQuickItem::ItemChange change,
case QQuickItem::ItemChildAddedChange:
case QQuickItem::ItemChildRemovedChange:
{
if ( !qskIsTransparentForPositioner( value.item ) )
if ( qskIsVisibleToLayout( value.item ) )
{
resetImplicitSize();
polish();

View File

@ -489,7 +489,7 @@ QSize QskWindow::sizeConstraint() const
const auto children = contentItem()->childItems();
for ( auto child : children )
{
if ( !qskIsTransparentForPositioner( child ) )
if ( qskIsVisibleToLayout( child ) )
{
const auto size = qskSizeConstraint( child, Qt::PreferredSize );
@ -527,7 +527,7 @@ void QskWindow::layoutItems()
const auto children = contentItem()->childItems();
for ( auto child : children )
{
if ( !qskIsTransparentForPositioner( child ) )
if ( qskIsAdjustableByLayout( child ) )
{
const auto r = qskConstrainedItemRect( child, rect );
qskSetItemGeometry( child, r );