diff options
Diffstat (limited to 'src/quicktemplates2/qquickrangeslider.cpp')
-rw-r--r-- | src/quicktemplates2/qquickrangeslider.cpp | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/src/quicktemplates2/qquickrangeslider.cpp b/src/quicktemplates2/qquickrangeslider.cpp index 26a5b010..2f2b621c 100644 --- a/src/quicktemplates2/qquickrangeslider.cpp +++ b/src/quicktemplates2/qquickrangeslider.cpp @@ -91,7 +91,8 @@ public: position(0), handle(nullptr), slider(slider), - pressed(false) + pressed(false), + hovered(false) { } @@ -112,6 +113,7 @@ private: QQuickItem *handle; QQuickRangeSlider *slider; bool pressed; + bool hovered; }; bool QQuickRangeSliderNodePrivate::isFirst() const @@ -275,6 +277,22 @@ void QQuickRangeSliderNode::setPressed(bool pressed) emit pressedChanged(); } +bool QQuickRangeSliderNode::isHovered() const +{ + Q_D(const QQuickRangeSliderNode); + return d->hovered; +} + +void QQuickRangeSliderNode::setHovered(bool hovered) +{ + Q_D(QQuickRangeSliderNode); + if (d->hovered == hovered) + return; + + d->hovered = hovered; + emit hoveredChanged(); +} + void QQuickRangeSliderNode::increase() { Q_D(QQuickRangeSliderNode); @@ -308,6 +326,8 @@ public: { } + void updateHover(const QPointF &pos); + qreal from; qreal to; qreal stepSize; @@ -318,6 +338,15 @@ public: QQuickRangeSlider::SnapMode snapMode; }; +void QQuickRangeSliderPrivate::updateHover(const QPointF &pos) +{ + Q_Q(QQuickRangeSlider); + QQuickItem *firstHandle = first->handle(); + QQuickItem *secondHandle = second->handle(); + first->setHovered(firstHandle && firstHandle->isEnabled() && firstHandle->contains(q->mapToItem(firstHandle, pos))); + second->setHovered(secondHandle && secondHandle->isEnabled() && secondHandle->contains(q->mapToItem(secondHandle, pos))); +} + static qreal valueAt(const QQuickRangeSlider *slider, qreal position) { return slider->from() + (slider->to() - slider->from()) * position; @@ -431,6 +460,7 @@ void QQuickRangeSlider::setTo(qreal to) \qmlproperty real QtQuick.Controls::RangeSlider::first.visualPosition \qmlproperty Item QtQuick.Controls::RangeSlider::first.handle \qmlproperty bool QtQuick.Controls::RangeSlider::first.pressed + \qmlproperty bool QtQuick.Controls::RangeSlider::first.hovered \table \header @@ -471,6 +501,10 @@ void QQuickRangeSlider::setTo(qreal to) \row \li pressed \li This property holds whether the first handle is pressed. + \row + \li hovered + \li This property holds whether the first handle is hovered. + This property was introduced in QtQuick.Controls 2.1. \endtable \sa first.increase(), first.decrease() @@ -488,6 +522,7 @@ QQuickRangeSliderNode *QQuickRangeSlider::first() const \qmlproperty real QtQuick.Controls::RangeSlider::second.visualPosition \qmlproperty Item QtQuick.Controls::RangeSlider::second.handle \qmlproperty bool QtQuick.Controls::RangeSlider::second.pressed + \qmlproperty bool QtQuick.Controls::RangeSlider::second.hovered \table \header @@ -528,6 +563,10 @@ QQuickRangeSliderNode *QQuickRangeSlider::first() const \row \li pressed \li This property holds whether the second handle is pressed. + \row + \li hovered + \li This property holds whether the second handle is hovered. + This property was introduced in QtQuick.Controls 2.1. \endtable \sa second.increase(), second.decrease() @@ -731,6 +770,28 @@ void QQuickRangeSlider::keyPressEvent(QKeyEvent *event) } } +void QQuickRangeSlider::hoverEnterEvent(QHoverEvent *event) +{ + Q_D(QQuickRangeSlider); + QQuickControl::hoverEnterEvent(event); + d->updateHover(event->posF()); +} + +void QQuickRangeSlider::hoverMoveEvent(QHoverEvent *event) +{ + Q_D(QQuickRangeSlider); + QQuickControl::hoverMoveEvent(event); + d->updateHover(event->posF()); +} + +void QQuickRangeSlider::hoverLeaveEvent(QHoverEvent *event) +{ + Q_D(QQuickRangeSlider); + QQuickControl::hoverLeaveEvent(event); + d->first->setHovered(false); + d->second->setHovered(false); +} + void QQuickRangeSlider::keyReleaseEvent(QKeyEvent *event) { Q_D(QQuickRangeSlider); |