diff --git a/src/controls/QskVariantAnimator.cpp b/src/controls/QskVariantAnimator.cpp index dc196772..e0a68271 100644 --- a/src/controls/QskVariantAnimator.cpp +++ b/src/controls/QskVariantAnimator.cpp @@ -10,6 +10,7 @@ #include "QskBoxShapeMetrics.h" #include "QskShadowMetrics.h" #include "QskStippleMetrics.h" +#include "QskTickmarksMetrics.h" #include "QskColorFilter.h" #include "QskGradient.h" #include "QskMargins.h" @@ -49,6 +50,7 @@ static void qskRegisterInterpolator() qRegisterAnimationInterpolator< QskShadowMetrics >( QskShadowMetrics::interpolate ); qRegisterAnimationInterpolator< QskStippleMetrics >( QskStippleMetrics::interpolate ); qRegisterAnimationInterpolator< QskArcMetrics >( QskArcMetrics::interpolate ); + qRegisterAnimationInterpolator< QskTickmarksMetrics >( QskTickmarksMetrics::interpolate ); } Q_CONSTRUCTOR_FUNCTION( qskRegisterInterpolator ) diff --git a/src/nodes/QskTickmarksMetrics.cpp b/src/nodes/QskTickmarksMetrics.cpp index 866d2367..4763d572 100644 --- a/src/nodes/QskTickmarksMetrics.cpp +++ b/src/nodes/QskTickmarksMetrics.cpp @@ -1,6 +1,6 @@ #include "QskTickmarksMetrics.h" -#include +#include static void qskRegisterTickmarksMetrics() { @@ -13,6 +13,33 @@ static void qskRegisterTickmarksMetrics() Q_CONSTRUCTOR_FUNCTION( qskRegisterTickmarksMetrics ) +static inline qreal qskInterpolated( qreal from, qreal to, qreal ratio ) +{ + return from + ( to - from ) * ratio; +} + +QskTickmarksMetrics QskTickmarksMetrics::interpolated( + const QskTickmarksMetrics& to, const qreal ratio ) const noexcept +{ + if ( ( *this == to ) ) // TODO QskTickmarksMetrics::sizeMode + { + return to; + } + + return + { + qskInterpolated(m_minorRatio, to.m_minorRatio, ratio), + qskInterpolated(m_mediumRatio, to.m_mediumRatio, ratio), + qskInterpolated(m_majorRatio, to.m_majorRatio, ratio) + }; +} + +QVariant QskTickmarksMetrics::interpolate( + const QskTickmarksMetrics& from, const QskTickmarksMetrics& to, const qreal progress ) +{ + return QVariant::fromValue( from.interpolated( to, progress ) ); +} + #ifndef QT_NO_DEBUG_STREAM #include diff --git a/src/nodes/QskTickmarksMetrics.h b/src/nodes/QskTickmarksMetrics.h index 27fea3a2..14516f65 100644 --- a/src/nodes/QskTickmarksMetrics.h +++ b/src/nodes/QskTickmarksMetrics.h @@ -40,6 +40,11 @@ class QSK_EXPORT QskTickmarksMetrics Q_REQUIRED_RESULT constexpr qreal ratio( int index ) const noexcept; constexpr void setRatio(int index, qreal ratio) noexcept; + Q_REQUIRED_RESULT QskTickmarksMetrics interpolated( const QskTickmarksMetrics&, + qreal progress ) const noexcept; + Q_REQUIRED_RESULT static QVariant interpolate( + const QskTickmarksMetrics& , const QskTickmarksMetrics& , qreal progress ); + Q_REQUIRED_RESULT QskHashValue hash( QskHashValue seed = 0 ) const noexcept; private: