aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickrangeslider.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quicktemplates2/qquickrangeslider.cpp')
-rw-r--r--src/quicktemplates2/qquickrangeslider.cpp63
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);