diff --git a/src/common/QskMargins.h b/src/common/QskMargins.h index ab2d05a5..e90c9338 100644 --- a/src/common/QskMargins.h +++ b/src/common/QskMargins.h @@ -41,7 +41,12 @@ class QSK_EXPORT QskMargins : public QMarginsF constexpr QskMargins rotated() const noexcept; constexpr QskMargins translated( qreal dx, qreal dy ) const noexcept; - constexpr QskMargins expanded( qreal dx, qreal dy ) const noexcept; + + constexpr QskMargins grownBy( qreal dx, qreal dy ) const noexcept; + constexpr QskMargins shrunkBy( qreal dx, qreal dy ) const noexcept; + + constexpr QskMargins expandedTo( const QskMargins& ) const noexcept; + constexpr QskMargins boundedTo( const QskMargins& ) const noexcept; void setMargins( qreal margin ) noexcept; void setMargins( qreal horizontal, qreal vertical ) noexcept; @@ -132,11 +137,35 @@ constexpr inline QskMargins QskMargins::translated( qreal dx, qreal dy ) const n return QskMargins( left() + dx, top() + dy, right() - dx, bottom() - dy ); } -constexpr inline QskMargins QskMargins::expanded( qreal dx, qreal dy ) const noexcept +constexpr inline QskMargins QskMargins::grownBy( qreal dx, qreal dy ) const noexcept { return QskMargins( left() + dx, top() + dy, right() + dx, bottom() + dy ); } +constexpr inline QskMargins QskMargins::shrunkBy( qreal dx, qreal dy ) const noexcept +{ + return QskMargins( left() - dx, top() - dy, right() - dx, bottom() - dy ); +} + +constexpr inline QskMargins QskMargins::expandedTo( const QskMargins& other ) const noexcept +{ + return QskMargins( + qMax( left(), other.left() ), + qMax( top(), other.top() ), + qMax( right(), other.right() ), + qMax( bottom(), other.bottom() ) + ); +} + +constexpr inline QskMargins QskMargins::boundedTo( const QskMargins& other ) const noexcept +{ + return QskMargins( + qMin( left(), other.left() ), + qMin( top(), other.top() ), + qMin( right(), other.right() ), + qMin( bottom(), other.bottom() ) + ); +} constexpr inline qreal QskMargins::extent( Qt::Orientation orientation ) const noexcept { return ( orientation == Qt::Horizontal ) ? width() : height(); diff --git a/src/controls/QskBox.cpp b/src/controls/QskBox.cpp index 37d6c01c..8aa93605 100644 --- a/src/controls/QskBox.cpp +++ b/src/controls/QskBox.cpp @@ -42,16 +42,12 @@ bool QskBox::hasPanel() const void QskBox::setPadding( qreal padding ) { - setPadding( QMarginsF( padding, padding, padding, padding ) ); + setPadding( QskMargins( padding ) ); } void QskBox::setPadding( const QMarginsF& padding ) { - const QMarginsF pd( - qMax( qreal( padding.left() ), qreal( 0.0 ) ), - qMax( qreal( padding.top() ), qreal( 0.0 ) ), - qMax( qreal( padding.right() ), qreal( 0.0 ) ), - qMax( qreal( padding.bottom() ), qreal( 0.0 ) ) ); + const auto pd = QskMargins().expandedTo( padding ); if ( pd != paddingHint( Panel ) ) { @@ -74,7 +70,7 @@ void QskBox::resetPadding() if ( polishOnResize() || autoLayoutChildren() ) polish(); - Q_EMIT paddingChanged( padding() ); + Q_EMIT paddingChanged( paddingHint( Panel ) ); } } diff --git a/src/controls/QskControl.cpp b/src/controls/QskControl.cpp index 856a377d..d68101fe 100644 --- a/src/controls/QskControl.cpp +++ b/src/controls/QskControl.cpp @@ -172,16 +172,12 @@ QskGradient QskControl::background() const void QskControl::setMargins( qreal margin ) { - setMargins( QMarginsF( margin, margin, margin, margin ) ); + setMargins( QskMargins( margin ) ); } void QskControl::setMargins( const QMarginsF& margins ) { - const QMarginsF m( - qMax( qreal( margins.left() ), qreal( 0.0 ) ), - qMax( qreal( margins.top() ), qreal( 0.0 ) ), - qMax( qreal( margins.right() ), qreal( 0.0 ) ), - qMax( qreal( margins.bottom() ), qreal( 0.0 ) ) ); + const auto m = QskMargins().expandedTo( margins ); if ( m != this->margins() ) {