diff --git a/src/common/QskIntervalF.cpp b/src/common/QskIntervalF.cpp index 7dbae1d1..42fa5b21 100644 --- a/src/common/QskIntervalF.cpp +++ b/src/common/QskIntervalF.cpp @@ -159,6 +159,26 @@ bool QskIntervalF::fuzzyContains( qreal value ) const return true; } +bool QskIntervalF::fuzzyContains( const QskIntervalF& interval ) const +{ + if ( !isValid() || !interval.isValid() ) + return false; + + if ( ( interval.m_lowerBound < m_lowerBound ) + && !qskFuzzyCompare( interval.m_lowerBound, m_lowerBound ) ) + { + return false; + } + + if ( ( interval.m_upperBound > m_upperBound ) + && !qskFuzzyCompare( interval.m_upperBound, m_upperBound ) ) + { + return false; + } + + return true; +} + #ifndef QT_NO_DEBUG_STREAM #include diff --git a/src/common/QskIntervalF.h b/src/common/QskIntervalF.h index 8bf3c8d3..f8c2074b 100644 --- a/src/common/QskIntervalF.h +++ b/src/common/QskIntervalF.h @@ -39,7 +39,10 @@ class QSK_EXPORT QskIntervalF void setWidth( qreal ) noexcept; constexpr bool contains( qreal value ) const noexcept; + constexpr bool contains( const QskIntervalF& ) const noexcept; + bool fuzzyContains( qreal value ) const; + bool fuzzyContains( const QskIntervalF& ) const; static constexpr QskIntervalF normalized( qreal value1, qreal value2 ) noexcept; @@ -150,6 +153,12 @@ inline constexpr bool QskIntervalF::contains( qreal value ) const noexcept return ( value >= m_lowerBound ) && ( value <= m_upperBound ); } +inline constexpr bool QskIntervalF::contains( const QskIntervalF& interval ) const noexcept +{ + return interval.isValid() && contains( interval.m_lowerBound ) + && contains( interval.m_upperBound ); +} + inline void QskIntervalF::translate( qreal offset ) noexcept { m_lowerBound += offset;