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