diff --git a/src/controls/QskSlider.cpp b/src/controls/QskSlider.cpp index fd6f13e2..912f2a26 100644 --- a/src/controls/QskSlider.cpp +++ b/src/controls/QskSlider.cpp @@ -56,8 +56,8 @@ QskSlider::QskSlider( Qt::Orientation orientation, QQuickItem* parent ) else initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Minimum ); - connect( this, &QskSlider::boundariesChanged, [ this ]() { updatePosition(); } ); - connect( this, &QskSlider::valueChanged, [ this ]() { updatePosition(); } ); + connect( this, &QskSlider::boundariesChanged, this, &QskSlider::moveHandle ); + connect( this, &QskSlider::valueChanged, this, &QskSlider::moveHandle ); } QskSlider::~QskSlider() @@ -186,7 +186,7 @@ void QskSlider::mouseMoveEvent( QMouseEvent* event ) } else { - updatePosition( newValue, QskAnimationHint() ); + moveHandleTo( newValue, QskAnimationHint() ); } } @@ -224,7 +224,7 @@ void QskSlider::mouseReleaseEvent( QMouseEvent* event ) { if ( !m_data->tracking ) { - const auto pos = metric( qskAspectPosition( this ) ); + const auto pos = handlePosition(); setValue( valueFromRatio( pos ) ); } } @@ -233,13 +233,18 @@ void QskSlider::mouseReleaseEvent( QMouseEvent* event ) Q_EMIT pressedChanged( false ); } -void QskSlider::updatePosition() +qreal QskSlider::handlePosition() const { - const auto hint = animation( qskAspectPosition( this ) | skinState() ); - updatePosition( value(), hint ); + return metric( qskAspectPosition( this ) ); } -void QskSlider::updatePosition( qreal value, const QskAnimationHint& hint ) +void QskSlider::moveHandle() +{ + const auto hint = animation( qskAspectPosition( this ) | skinState() ); + moveHandleTo( value(), hint ); +} + +void QskSlider::moveHandleTo( qreal value, const QskAnimationHint& hint ) { using namespace QskAspect; diff --git a/src/controls/QskSlider.h b/src/controls/QskSlider.h index 0ae39528..e54c1510 100644 --- a/src/controls/QskSlider.h +++ b/src/controls/QskSlider.h @@ -21,6 +21,7 @@ class QSK_EXPORT QskSlider : public QskBoundedValueInput WRITE setOrientation NOTIFY orientationChanged ) Q_PROPERTY( bool tracking READ isTracking WRITE setTracking NOTIFY trackingChanged ) + Q_PROPERTY( qreal handlePosition READ handlePosition ) using Inherited = QskBoundedValueInput; @@ -41,6 +42,8 @@ class QSK_EXPORT QskSlider : public QskBoundedValueInput void setTracking( bool ); bool isTracking() const; + qreal handlePosition() const; // [0,0, 1.0] + QskAspect::Placement effectivePlacement() const override; Q_SIGNALS: @@ -61,8 +64,8 @@ class QSK_EXPORT QskSlider : public QskBoundedValueInput void aboutToShow() override; private: - void updatePosition(); - void updatePosition( qreal value, const QskAnimationHint& ); + void moveHandle(); + void moveHandleTo( qreal value, const QskAnimationHint& ); class PrivateData; std::unique_ptr< PrivateData > m_data;