effectiveSizeHint added
This commit is contained in:
parent
86fa9f9479
commit
fae80c3107
|
@ -1349,7 +1349,8 @@ void QskControl::setExplicitSizeHint( Qt::SizeHint whichHint, const QSizeF& size
|
|||
}
|
||||
}
|
||||
|
||||
void QskControl::setExplicitSizeHint( Qt::SizeHint whichHint, qreal width, qreal height )
|
||||
void QskControl::setExplicitSizeHint(
|
||||
Qt::SizeHint whichHint, qreal width, qreal height )
|
||||
{
|
||||
setExplicitSizeHint( whichHint, QSizeF( width, height ) );
|
||||
}
|
||||
|
@ -1362,28 +1363,76 @@ QSizeF QskControl::explicitSizeHint( Qt::SizeHint whichHint ) const
|
|||
return QSizeF( -1, -1 );
|
||||
}
|
||||
|
||||
QSizeF QskControl::effectiveSizeHint( Qt::SizeHint whichHint ) const
|
||||
QSizeF QskControl::implicitSizeHint(
|
||||
Qt::SizeHint whichHint, const QSizeF& constraint ) const
|
||||
{
|
||||
if ( whichHint < Qt::MinimumSize || whichHint > Qt::MaximumSize )
|
||||
return QSizeF( -1, -1 );
|
||||
|
||||
if ( constraint.isValid() )
|
||||
{
|
||||
// having constraints in both directions does not make sense
|
||||
return constraint;
|
||||
}
|
||||
|
||||
QSizeF hint( -1, -1 );
|
||||
|
||||
if ( whichHint == Qt::PreferredSize )
|
||||
{
|
||||
if ( constraint.width() >= 0 )
|
||||
{
|
||||
hint.setWidth( constraint.width() );
|
||||
hint.setHeight( heightForWidth( constraint.width() ) );
|
||||
}
|
||||
else if ( constraint.height() >= 0 )
|
||||
{
|
||||
hint.setWidth( widthForHeight( constraint.height() ) );
|
||||
hint.setHeight( constraint.height() );
|
||||
}
|
||||
else
|
||||
{
|
||||
hint = implicitSize();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO ...
|
||||
}
|
||||
|
||||
return hint;
|
||||
}
|
||||
|
||||
QSizeF QskControl::effectiveSizeHint(
|
||||
Qt::SizeHint whichHint, const QSizeF& constraint ) const
|
||||
{
|
||||
if ( whichHint < Qt::MinimumSize || whichHint > Qt::MaximumSize )
|
||||
return QSizeF( 0, 0 );
|
||||
|
||||
d_func()->blockLayoutRequestEvents = false;
|
||||
|
||||
QSizeF size = explicitSizeHint( whichHint );
|
||||
QSizeF hint;
|
||||
|
||||
if ( whichHint == Qt::PreferredSize && !size.isValid() )
|
||||
if ( ( constraint.width() < 0 ) && ( constraint.height() < 0 ) )
|
||||
{
|
||||
// in most cases we don't have a preferred width/height
|
||||
// and fall back to the implicit size.
|
||||
hint = explicitSizeHint( whichHint );
|
||||
|
||||
if ( size.width() < 0 )
|
||||
size.setWidth( implicitWidth() );
|
||||
if ( !hint.isValid() )
|
||||
{
|
||||
const auto implicit = implicitSizeHint( whichHint, constraint );
|
||||
|
||||
if ( size.height() < 0 )
|
||||
size.setHeight( implicitHeight() );
|
||||
if ( hint.width() < 0 )
|
||||
hint.setWidth( implicit.width() );
|
||||
|
||||
if ( hint.height() < 0 )
|
||||
hint.setHeight( implicit.height() );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hint = implicitSizeHint( whichHint, constraint );
|
||||
}
|
||||
|
||||
return size;
|
||||
return hint;
|
||||
}
|
||||
|
||||
void QskControl::resetImplicitSize()
|
||||
|
@ -1848,8 +1897,8 @@ void QskControl::layoutConstraintChanged()
|
|||
qskSendEventTo( item, QEvent::LayoutRequest );
|
||||
|
||||
/*
|
||||
We don't send further LayoutRequest events until someone has requested
|
||||
a layout relevant information
|
||||
We don't send further LayoutRequest events until someone
|
||||
actively requests a layout relevant information
|
||||
*/
|
||||
d->blockLayoutRequestEvents = true;
|
||||
}
|
||||
|
|
|
@ -184,9 +184,11 @@ class QSK_EXPORT QskControl : public QQuickItem, public QskSkinnable
|
|||
QSizeF preferredSize() const;
|
||||
|
||||
QSizeF explicitSizeHint( Qt::SizeHint ) const;
|
||||
QSizeF implicitSizeHint( Qt::SizeHint, const QSizeF& constraint ) const;
|
||||
|
||||
QSizeF sizeHint() const;
|
||||
QSizeF effectiveSizeHint( Qt::SizeHint ) const;
|
||||
QSizeF effectiveSizeHint( Qt::SizeHint,
|
||||
const QSizeF& constraint = QSizeF( -1.0, -1.0 ) ) const;
|
||||
|
||||
virtual qreal heightForWidth( qreal width ) const;
|
||||
virtual qreal widthForHeight( qreal height ) const;
|
||||
|
@ -311,17 +313,17 @@ inline QSizeF QskControl::sizeHint() const
|
|||
|
||||
inline QSizeF QskControl::minimumSize() const
|
||||
{
|
||||
return explicitSizeHint( Qt::MinimumSize );
|
||||
return effectiveSizeHint( Qt::MinimumSize );
|
||||
}
|
||||
|
||||
inline QSizeF QskControl::maximumSize() const
|
||||
{
|
||||
return explicitSizeHint( Qt::MaximumSize );
|
||||
return effectiveSizeHint( Qt::MaximumSize );
|
||||
}
|
||||
|
||||
inline QSizeF QskControl::preferredSize() const
|
||||
{
|
||||
return explicitSizeHint( Qt::PreferredSize );
|
||||
return effectiveSizeHint( Qt::PreferredSize );
|
||||
}
|
||||
|
||||
inline QskControl* qskControlCast( QObject* object )
|
||||
|
|
Loading…
Reference in New Issue