code moved to QskLayoutConstraint

This commit is contained in:
Uwe Rathmann 2019-09-01 15:33:36 +02:00
parent 83efc6afe7
commit dbae418b1d
2 changed files with 37 additions and 20 deletions

View File

@ -33,9 +33,6 @@ QSK_SYSTEM_STATE( QskControl, Disabled, QskAspect::FirstSystemState )
QSK_SYSTEM_STATE( QskControl, Hovered, QskAspect::LastSystemState >> 1 ) QSK_SYSTEM_STATE( QskControl, Hovered, QskAspect::LastSystemState >> 1 )
QSK_SYSTEM_STATE( QskControl, Focused, QskAspect::LastSystemState ) QSK_SYSTEM_STATE( QskControl, Focused, QskAspect::LastSystemState )
static QSizeF qskDefaultSizeHints[] =
{ { 0, 0 }, { -1, -1 }, { QskLayoutConstraint::unlimited, QskLayoutConstraint::unlimited } };
void qskResolveLocale( QskControl* ); // not static as being used from outside ! void qskResolveLocale( QskControl* ); // not static as being used from outside !
static void qskUpdateControlFlags( QskControl::Flags, QskControl* ); static void qskUpdateControlFlags( QskControl::Flags, QskControl* );
@ -187,12 +184,6 @@ class QskControlPrivate final : public QQuickItemPrivate
Q_DECLARE_PUBLIC( QskControl ) Q_DECLARE_PUBLIC( QskControl )
public: public:
class ExplicitSizeData
{
public:
QSizeF sizeHints[ 3 ] =
{ qskDefaultSizeHints[ 0 ], qskDefaultSizeHints[ 1 ], qskDefaultSizeHints[ 2 ] };
};
QskControlPrivate(); QskControlPrivate();
~QskControlPrivate() override; ~QskControlPrivate() override;
@ -215,6 +206,7 @@ class QskControlPrivate final : public QQuickItemPrivate
void implicitHeightChanged() override; void implicitHeightChanged() override;
void setExplicitSizeHint( Qt::SizeHint, const QSizeF& ); void setExplicitSizeHint( Qt::SizeHint, const QSizeF& );
void resetExplicitSizeHint( Qt::SizeHint );
QSizeF explicitSizeHint( Qt::SizeHint ) const; QSizeF explicitSizeHint( Qt::SizeHint ) const;
bool maybeGesture( QQuickItem*, QEvent* ); bool maybeGesture( QQuickItem*, QEvent* );
@ -247,7 +239,7 @@ class QskControlPrivate final : public QQuickItemPrivate
void implicitSizeChanged(); void implicitSizeChanged();
void setImplicitSize( qreal width, qreal height, bool doNotify ); void setImplicitSize( qreal width, qreal height, bool doNotify );
ExplicitSizeData* explicitSizeData; QSizeF* explicitSizeHints;
public: public:
QLocale locale; QLocale locale;
@ -282,7 +274,7 @@ static inline void qskUpdateControlFlags( QskControl::Flags flags, QskControl* c
} }
QskControlPrivate::QskControlPrivate() QskControlPrivate::QskControlPrivate()
: explicitSizeData( nullptr ) : explicitSizeHints( nullptr )
, controlFlags( qskControlFlags() ) , controlFlags( qskControlFlags() )
, controlFlagsMask( 0 ) , controlFlagsMask( 0 )
, sizePolicy( QskSizePolicy::Preferred, QskSizePolicy::Preferred ) , sizePolicy( QskSizePolicy::Preferred, QskSizePolicy::Preferred )
@ -321,7 +313,7 @@ QskControlPrivate::QskControlPrivate()
QskControlPrivate::~QskControlPrivate() QskControlPrivate::~QskControlPrivate()
{ {
delete explicitSizeData; delete [] explicitSizeHints;
} }
void QskControlPrivate::mirrorChange() void QskControlPrivate::mirrorChange()
@ -442,21 +434,37 @@ void QskControlPrivate::implicitHeightChanged()
implicitSizeChanged(); implicitSizeChanged();
} }
inline void QskControlPrivate::setExplicitSizeHint( void QskControlPrivate::setExplicitSizeHint(
Qt::SizeHint whichHint, const QSizeF& size ) Qt::SizeHint whichHint, const QSizeF& size )
{ {
if ( explicitSizeData == nullptr ) if ( explicitSizeHints == nullptr )
explicitSizeData = new ExplicitSizeData; {
using namespace QskLayoutConstraint;
explicitSizeData->sizeHints[ whichHint ] = size; explicitSizeHints = new QSizeF[3];
explicitSizeHints[0] = defaultSizeHints[0];
explicitSizeHints[1] = defaultSizeHints[1];
explicitSizeHints[2] = defaultSizeHints[2];
}
explicitSizeHints[ whichHint ] = size;
}
void QskControlPrivate::resetExplicitSizeHint( Qt::SizeHint whichHint )
{
if ( explicitSizeHints )
{
using namespace QskLayoutConstraint;
explicitSizeHints[ whichHint ] = defaultSizeHints[ whichHint ];
}
} }
inline QSizeF QskControlPrivate::explicitSizeHint( Qt::SizeHint whichHint ) const inline QSizeF QskControlPrivate::explicitSizeHint( Qt::SizeHint whichHint ) const
{ {
if ( explicitSizeData ) if ( explicitSizeHints )
return explicitSizeData->sizeHints[ whichHint ]; return explicitSizeHints[ whichHint ];
return qskDefaultSizeHints[ whichHint ]; return QskLayoutConstraint::defaultSizeHints[ whichHint ];
} }
bool QskControlPrivate::maybeGesture( QQuickItem* child, QEvent* event ) bool QskControlPrivate::maybeGesture( QQuickItem* child, QEvent* event )
@ -1325,7 +1333,15 @@ void QskControl::setFixedHeight( qreal height )
void QskControl::resetExplicitSizeHint( Qt::SizeHint whichHint ) void QskControl::resetExplicitSizeHint( Qt::SizeHint whichHint )
{ {
if ( whichHint >= Qt::MinimumSize && whichHint <= Qt::MaximumSize ) if ( whichHint >= Qt::MinimumSize && whichHint <= Qt::MaximumSize )
setExplicitSizeHint( whichHint, qskDefaultSizeHints[ whichHint ] ); {
Q_D( QskControl );
const auto oldHint = d->explicitSizeHint( whichHint );
d->resetExplicitSizeHint( whichHint );
if ( oldHint != d->explicitSizeHint( whichHint ) )
layoutConstraintChanged();
}
} }
void QskControl::setExplicitSizeHint( Qt::SizeHint whichHint, const QSizeF& size ) void QskControl::setExplicitSizeHint( Qt::SizeHint whichHint, const QSizeF& size )

View File

@ -62,6 +62,7 @@ namespace QskLayoutConstraint
const QQuickItem*, Qt::Orientation, qreal constraint ); const QQuickItem*, Qt::Orientation, qreal constraint );
const qreal unlimited = std::numeric_limits< float >::max(); const qreal unlimited = std::numeric_limits< float >::max();
const QSizeF defaultSizeHints[] = { { 0, 0 }, { -1, -1 }, { unlimited, unlimited } };
} }
#endif #endif