From dbae418b1d54317ec0d9b2dd6f93d84405d937ba Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Sun, 1 Sep 2019 15:33:36 +0200 Subject: [PATCH] code moved to QskLayoutConstraint --- src/controls/QskControl.cpp | 56 ++++++++++++++++++++----------- src/layouts/QskLayoutConstraint.h | 1 + 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/src/controls/QskControl.cpp b/src/controls/QskControl.cpp index 0d354393..a115de74 100644 --- a/src/controls/QskControl.cpp +++ b/src/controls/QskControl.cpp @@ -33,9 +33,6 @@ QSK_SYSTEM_STATE( QskControl, Disabled, QskAspect::FirstSystemState ) QSK_SYSTEM_STATE( QskControl, Hovered, QskAspect::LastSystemState >> 1 ) 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 ! static void qskUpdateControlFlags( QskControl::Flags, QskControl* ); @@ -187,12 +184,6 @@ class QskControlPrivate final : public QQuickItemPrivate Q_DECLARE_PUBLIC( QskControl ) public: - class ExplicitSizeData - { - public: - QSizeF sizeHints[ 3 ] = - { qskDefaultSizeHints[ 0 ], qskDefaultSizeHints[ 1 ], qskDefaultSizeHints[ 2 ] }; - }; QskControlPrivate(); ~QskControlPrivate() override; @@ -215,6 +206,7 @@ class QskControlPrivate final : public QQuickItemPrivate void implicitHeightChanged() override; void setExplicitSizeHint( Qt::SizeHint, const QSizeF& ); + void resetExplicitSizeHint( Qt::SizeHint ); QSizeF explicitSizeHint( Qt::SizeHint ) const; bool maybeGesture( QQuickItem*, QEvent* ); @@ -247,7 +239,7 @@ class QskControlPrivate final : public QQuickItemPrivate void implicitSizeChanged(); void setImplicitSize( qreal width, qreal height, bool doNotify ); - ExplicitSizeData* explicitSizeData; + QSizeF* explicitSizeHints; public: QLocale locale; @@ -282,7 +274,7 @@ static inline void qskUpdateControlFlags( QskControl::Flags flags, QskControl* c } QskControlPrivate::QskControlPrivate() - : explicitSizeData( nullptr ) + : explicitSizeHints( nullptr ) , controlFlags( qskControlFlags() ) , controlFlagsMask( 0 ) , sizePolicy( QskSizePolicy::Preferred, QskSizePolicy::Preferred ) @@ -321,7 +313,7 @@ QskControlPrivate::QskControlPrivate() QskControlPrivate::~QskControlPrivate() { - delete explicitSizeData; + delete [] explicitSizeHints; } void QskControlPrivate::mirrorChange() @@ -442,21 +434,37 @@ void QskControlPrivate::implicitHeightChanged() implicitSizeChanged(); } -inline void QskControlPrivate::setExplicitSizeHint( +void QskControlPrivate::setExplicitSizeHint( Qt::SizeHint whichHint, const QSizeF& size ) { - if ( explicitSizeData == nullptr ) - explicitSizeData = new ExplicitSizeData; + if ( explicitSizeHints == nullptr ) + { + 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 { - if ( explicitSizeData ) - return explicitSizeData->sizeHints[ whichHint ]; + if ( explicitSizeHints ) + return explicitSizeHints[ whichHint ]; - return qskDefaultSizeHints[ whichHint ]; + return QskLayoutConstraint::defaultSizeHints[ whichHint ]; } bool QskControlPrivate::maybeGesture( QQuickItem* child, QEvent* event ) @@ -1325,7 +1333,15 @@ void QskControl::setFixedHeight( qreal height ) void QskControl::resetExplicitSizeHint( Qt::SizeHint whichHint ) { 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 ) diff --git a/src/layouts/QskLayoutConstraint.h b/src/layouts/QskLayoutConstraint.h index 77a88c67..3d399884 100644 --- a/src/layouts/QskLayoutConstraint.h +++ b/src/layouts/QskLayoutConstraint.h @@ -62,6 +62,7 @@ namespace QskLayoutConstraint const QQuickItem*, Qt::Orientation, qreal constraint ); const qreal unlimited = std::numeric_limits< float >::max(); + const QSizeF defaultSizeHints[] = { { 0, 0 }, { -1, -1 }, { unlimited, unlimited } }; } #endif