From ba823301b972f300f20a575976a02daa194fa0ee Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Tue, 4 Jun 2019 08:00:00 +0200 Subject: [PATCH] QskLayoutHint added --- src/layouts/QskLayoutHint.cpp | 77 +++++++++++++++++++++++++++++++++ src/layouts/QskLayoutHint.h | 81 +++++++++++++++++++++++++++++++++++ src/src.pro | 2 + 3 files changed, 160 insertions(+) create mode 100644 src/layouts/QskLayoutHint.cpp create mode 100644 src/layouts/QskLayoutHint.h diff --git a/src/layouts/QskLayoutHint.cpp b/src/layouts/QskLayoutHint.cpp new file mode 100644 index 00000000..1ab5c5f2 --- /dev/null +++ b/src/layouts/QskLayoutHint.cpp @@ -0,0 +1,77 @@ +#include "QskLayoutHint.h" +#include "QskLayoutConstraint.h" +#include + +QskLayoutHint::QskLayoutHint() + : QskLayoutHint( 0.0, 0.0, QskLayoutConstraint::unlimited ) +{ +} + +QskLayoutHint::QskLayoutHint( qreal minimum, qreal preferred, qreal maximum ) + : m_minimum( minimum ) + , m_preferred( preferred ) + , m_maximum( maximum ) +{ +} + +qreal QskLayoutHint::size( int which ) const +{ + switch( which ) + { + case Qt::MinimumSize: + return m_minimum; + + case Qt::PreferredSize: + return m_preferred; + + case Qt::MaximumSize: + return m_maximum; + + default: + return 0.0; + } +} + +void QskLayoutHint::setSize( int which, qreal size ) +{ + switch (which) + { + case Qt::MinimumSize: + m_minimum = size; + break; + + case Qt::PreferredSize: + m_preferred = size; + break; + + case Qt::MaximumSize: + m_maximum = size; + break; + + default: + break; + } +} + +void QskLayoutHint::intersect( const QskLayoutHint& other ) +{ + m_minimum = qMax( m_minimum, other.m_minimum ); + m_preferred = qMax( m_preferred, other.m_preferred ); + + if ( other.m_maximum != QskLayoutConstraint::unlimited ) + { + if ( m_maximum == QskLayoutConstraint::unlimited ) + m_maximum = other.m_maximum; + else + m_maximum = qMax( m_maximum, other.m_maximum ); + } + + normalize(); +} + +void QskLayoutHint::normalize() +{ + m_minimum = qMax( m_minimum, qreal( 0.0 ) ); + m_maximum = qMax( m_minimum, m_maximum ); + m_preferred = qBound( m_minimum, m_preferred, m_maximum ); +} diff --git a/src/layouts/QskLayoutHint.h b/src/layouts/QskLayoutHint.h new file mode 100644 index 00000000..da5a1dfb --- /dev/null +++ b/src/layouts/QskLayoutHint.h @@ -0,0 +1,81 @@ +#ifndef QSK_LAYOUT_HINT_H +#define QSK_LAYOUT_HINT_H + +#include "QskGlobal.h" +#include + +class QSK_EXPORT QskLayoutHint +{ + public: + QskLayoutHint(); + QskLayoutHint( qreal minimum, qreal preferred, qreal maximum ); + + void intersect( const QskLayoutHint& ); + void normalize(); + + qreal size( int which ) const; + void setSize( int which, qreal size ); + + bool operator==( const QskLayoutHint& ) const; + bool operator!=( const QskLayoutHint& ) const; + + void setMinimum( qreal value ); + qreal minimum() const; + + void setPreferred( qreal value ); + qreal preferred() const; + + void setMaximum( qreal value ); + qreal maximum() const; + + private: + qreal m_minimum; + qreal m_preferred; + qreal m_maximum; +}; + +inline qreal QskLayoutHint::minimum() const +{ + return m_minimum; +} + +inline void QskLayoutHint::setMinimum( qreal value ) +{ + m_minimum = value; +} + +inline qreal QskLayoutHint::preferred() const +{ + return m_preferred; +} + +inline void QskLayoutHint::setPreferred( qreal value ) +{ + m_preferred = value; +} + +inline qreal QskLayoutHint::maximum() const +{ + return m_maximum; +} + +inline void QskLayoutHint::setMaximum( qreal value ) +{ + m_maximum = value; +} + +inline bool QskLayoutHint::operator==( const QskLayoutHint& other ) const +{ + return ( m_preferred == other.m_preferred ) + && ( m_minimum == other.m_minimum ) + && ( m_maximum == other.m_maximum ); +} + +inline bool QskLayoutHint::operator!=( const QskLayoutHint& other ) const +{ + return !( *this == other ); +} + +Q_DECLARE_TYPEINFO( QskLayoutHint, Q_MOVABLE_TYPE ); + +#endif diff --git a/src/src.pro b/src/src.pro index fcb4762d..dc0cd5a5 100644 --- a/src/src.pro +++ b/src/src.pro @@ -237,6 +237,7 @@ HEADERS += \ layouts/QskLayoutEngine.h \ layouts/QskLayoutBox.h \ layouts/QskLayoutConstraint.h \ + layouts/QskLayoutHint.h \ layouts/QskLayoutItem.h \ layouts/QskLinearBox.h \ layouts/QskStackBoxAnimator.h \ @@ -247,6 +248,7 @@ SOURCES += \ layouts/QskIndexedLayoutBox.cpp \ layouts/QskLayoutBox.cpp \ layouts/QskLayoutConstraint.cpp \ + layouts/QskLayoutHint.cpp \ layouts/QskLayoutEngine.cpp \ layouts/QskLayoutItem.cpp \ layouts/QskLinearBox.cpp \