diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-04-21 08:00:01 +0300 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-04-21 08:00:01 +0300 |
commit | 284057d12fea9339744ddc646aa53cfe6c3c95a1 (patch) | |
tree | 61bb12637c56a282830d683e346057b00d332b7a /src/quicktemplates2 | |
parent | 91b2721fdc2aba28d3c45111779fed70f7c4f87d (diff) | |
parent | c8e9b5f25fb12c3b7983658d738165181b4d6672 (diff) |
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts:
src/imports/controls/RoundButton.qml
src/imports/controls/universal/RadioDelegate.qml
Change-Id: I4cb14c19bd5f6e19b70b03fb394c76712e6dda08
Diffstat (limited to 'src/quicktemplates2')
24 files changed, 317 insertions, 529 deletions
diff --git a/src/quicktemplates2/qquickabstractbutton.cpp b/src/quicktemplates2/qquickabstractbutton.cpp index 7551ead0..a308834c 100644 --- a/src/quicktemplates2/qquickabstractbutton.cpp +++ b/src/quicktemplates2/qquickabstractbutton.cpp @@ -155,11 +155,10 @@ QQuickAbstractButtonPrivate::QQuickAbstractButtonPrivate() autoExclusive(false), autoRepeat(false), wasHeld(false), - touchId(-1), holdTimer(0), delayTimer(0), repeatTimer(0), - repeatButton(Qt::NoButton), + pressButtons(Qt::NoButton), indicator(nullptr), group(nullptr), icon(nullptr), @@ -168,27 +167,27 @@ QQuickAbstractButtonPrivate::QQuickAbstractButtonPrivate() { } -void QQuickAbstractButtonPrivate::handlePress(const QPointF &point, Qt::MouseButton button, Qt::MouseButtons buttons) +void QQuickAbstractButtonPrivate::handlePress(const QPointF &point) { Q_Q(QQuickAbstractButton); + QQuickControlPrivate::handlePress(point); pressPoint = point; q->setPressed(true); emit q->pressed(); - if (autoRepeat) { + if (autoRepeat) startRepeatDelay(); - repeatButton = button; - } else if (Qt::LeftButton == (buttons & Qt::LeftButton)) { + else if (touchId != -1 || Qt::LeftButton == (pressButtons & Qt::LeftButton)) startPressAndHold(); - } else { + else stopPressAndHold(); - } } void QQuickAbstractButtonPrivate::handleMove(const QPointF &point) { Q_Q(QQuickAbstractButton); + QQuickControlPrivate::handleMove(point); q->setPressed(keepPressed || q->contains(point)); if (!pressed && autoRepeat) @@ -200,9 +199,10 @@ void QQuickAbstractButtonPrivate::handleMove(const QPointF &point) void QQuickAbstractButtonPrivate::handleRelease(const QPointF &point) { Q_Q(QQuickAbstractButton); + QQuickControlPrivate::handleRelease(point); bool wasPressed = pressed; q->setPressed(false); - touchId = -1; + pressButtons = Qt::NoButton; if (!wasHeld && (keepPressed || q->contains(point))) q->nextCheckState(); @@ -221,14 +221,15 @@ void QQuickAbstractButtonPrivate::handleRelease(const QPointF &point) stopPressAndHold(); } -void QQuickAbstractButtonPrivate::handleCancel() +void QQuickAbstractButtonPrivate::handleUngrab() { Q_Q(QQuickAbstractButton); + QQuickControlPrivate::handleUngrab(); + pressButtons = Qt::NoButton; if (!pressed) return; q->setPressed(false); - touchId = -1; stopPressRepeat(); stopPressAndHold(); emit q->canceled(); @@ -779,7 +780,8 @@ void QQuickAbstractButton::focusOutEvent(QFocusEvent *event) { Q_D(QQuickAbstractButton); QQuickControl::focusOutEvent(event); - d->handleCancel(); + if (d->touchId == -1) // don't ungrab on multi-touch if another control gets focused + d->handleUngrab(); } void QQuickAbstractButton::keyPressEvent(QKeyEvent *event) @@ -790,10 +792,8 @@ void QQuickAbstractButton::keyPressEvent(QKeyEvent *event) d->pressPoint = QPoint(qRound(width() / 2), qRound(height() / 2)); setPressed(true); - if (d->autoRepeat) { + if (d->autoRepeat) d->startRepeatDelay(); - d->repeatButton = Qt::NoButton; - } emit pressed(); event->accept(); @@ -820,22 +820,8 @@ void QQuickAbstractButton::keyReleaseEvent(QKeyEvent *event) void QQuickAbstractButton::mousePressEvent(QMouseEvent *event) { Q_D(QQuickAbstractButton); + d->pressButtons = event->buttons(); QQuickControl::mousePressEvent(event); - d->handlePress(event->localPos(), event->button(), event->buttons()); -} - -void QQuickAbstractButton::mouseMoveEvent(QMouseEvent *event) -{ - Q_D(QQuickAbstractButton); - QQuickControl::mouseMoveEvent(event); - d->handleMove(event->localPos()); -} - -void QQuickAbstractButton::mouseReleaseEvent(QMouseEvent *event) -{ - Q_D(QQuickAbstractButton); - QQuickControl::mouseReleaseEvent(event); - d->handleRelease(event->localPos()); } void QQuickAbstractButton::mouseDoubleClickEvent(QMouseEvent *event) @@ -844,13 +830,6 @@ void QQuickAbstractButton::mouseDoubleClickEvent(QMouseEvent *event) emit doubleClicked(); } -void QQuickAbstractButton::mouseUngrabEvent() -{ - Q_D(QQuickAbstractButton); - QQuickControl::mouseUngrabEvent(); - d->handleCancel(); -} - void QQuickAbstractButton::timerEvent(QTimerEvent *event) { Q_D(QQuickAbstractButton); @@ -868,63 +847,6 @@ void QQuickAbstractButton::timerEvent(QTimerEvent *event) } } -void QQuickAbstractButton::touchEvent(QTouchEvent *event) -{ - Q_D(QQuickAbstractButton); - switch (event->type()) { - case QEvent::TouchBegin: - if (d->touchId == -1) { - const QTouchEvent::TouchPoint point = event->touchPoints().first(); - d->touchId = point.id(); - d->handlePress(point.pos()); - } - break; - - case QEvent::TouchUpdate: - for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (point.id() != d->touchId) - continue; - - switch (point.state()) { - case Qt::TouchPointPressed: - d->handlePress(point.pos()); - break; - case Qt::TouchPointMoved: - d->handleMove(point.pos()); - break; - case Qt::TouchPointReleased: - d->handleRelease(point.pos()); - break; - default: - break; - } - } - break; - - case QEvent::TouchEnd: - for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (point.id() == d->touchId) - d->handleRelease(point.pos()); - } - break; - - case QEvent::TouchCancel: - d->handleCancel(); - break; - - default: - QQuickControl::touchEvent(event); - break; - } -} - -void QQuickAbstractButton::touchUngrabEvent() -{ - Q_D(QQuickAbstractButton); - QQuickControl::touchUngrabEvent(); - d->handleCancel(); -} - void QQuickAbstractButton::buttonChange(ButtonChange change) { Q_D(QQuickAbstractButton); diff --git a/src/quicktemplates2/qquickabstractbutton_p.h b/src/quicktemplates2/qquickabstractbutton_p.h index daa34735..c6a50665 100644 --- a/src/quicktemplates2/qquickabstractbutton_p.h +++ b/src/quicktemplates2/qquickabstractbutton_p.h @@ -143,13 +143,8 @@ protected: void keyPressEvent(QKeyEvent *event) override; void keyReleaseEvent(QKeyEvent *event) override; void mousePressEvent(QMouseEvent *event) override; - void mouseMoveEvent(QMouseEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; - void mouseUngrabEvent() override; void timerEvent(QTimerEvent *event) override; - void touchEvent(QTouchEvent *event) override; - void touchUngrabEvent() override; enum ButtonChange { ButtonAutoRepeatChange, diff --git a/src/quicktemplates2/qquickabstractbutton_p_p.h b/src/quicktemplates2/qquickabstractbutton_p_p.h index 41eb72c1..61a546d1 100644 --- a/src/quicktemplates2/qquickabstractbutton_p_p.h +++ b/src/quicktemplates2/qquickabstractbutton_p_p.h @@ -69,10 +69,10 @@ public: return button->d_func(); } - virtual void handlePress(const QPointF &point, Qt::MouseButton button = Qt::LeftButton, Qt::MouseButtons buttons = Qt::LeftButton); - virtual void handleMove(const QPointF &point); - virtual void handleRelease(const QPointF &point); - virtual void handleCancel(); + void handlePress(const QPointF &point) override; + void handleMove(const QPointF &point) override; + void handleRelease(const QPointF &point) override; + void handleUngrab() override; bool isPressAndHoldConnected(); void startPressAndHold(); @@ -99,12 +99,11 @@ public: bool autoExclusive; bool autoRepeat; bool wasHeld; - int touchId; int holdTimer; int delayTimer; int repeatTimer; QPointF pressPoint; - Qt::MouseButton repeatButton; + Qt::MouseButtons pressButtons; QQuickItem *indicator; QQuickButtonGroup *group; QQuickIcon *icon; diff --git a/src/quicktemplates2/qquickcombobox.cpp b/src/quicktemplates2/qquickcombobox.cpp index 85c577b4..c2fc3aff 100644 --- a/src/quicktemplates2/qquickcombobox.cpp +++ b/src/quicktemplates2/qquickcombobox.cpp @@ -243,6 +243,11 @@ public: void createDelegateModel(); + void handlePress(const QPointF &point) override; + void handleMove(const QPointF &point) override; + void handleRelease(const QPointF &point) override; + void handleUngrab() override; + bool flat; bool down; bool hasDown; @@ -622,6 +627,37 @@ void QQuickComboBoxPrivate::createDelegateModel() delete oldModel; } +void QQuickComboBoxPrivate::handlePress(const QPointF &point) +{ + Q_Q(QQuickComboBox); + QQuickControlPrivate::handlePress(point); + q->setPressed(true); +} + +void QQuickComboBoxPrivate::handleMove(const QPointF &point) +{ + Q_Q(QQuickComboBox); + QQuickControlPrivate::handleMove(point); + q->setPressed(q->contains(point)); +} + +void QQuickComboBoxPrivate::handleRelease(const QPointF &point) +{ + Q_Q(QQuickComboBox); + QQuickControlPrivate::handleRelease(point); + if (pressed) { + q->setPressed(false); + togglePopup(false); + } +} + +void QQuickComboBoxPrivate::handleUngrab() +{ + Q_Q(QQuickComboBox); + QQuickControlPrivate::handleUngrab(); + q->setPressed(false); +} + QQuickComboBox::QQuickComboBox(QQuickItem *parent) : QQuickControl(*(new QQuickComboBoxPrivate), parent) { @@ -1471,34 +1507,6 @@ void QQuickComboBox::keyReleaseEvent(QKeyEvent *event) } } -void QQuickComboBox::mousePressEvent(QMouseEvent *event) -{ - QQuickControl::mousePressEvent(event); - setPressed(true); -} - -void QQuickComboBox::mouseMoveEvent(QMouseEvent* event) -{ - QQuickControl::mouseMoveEvent(event); - setPressed(contains(event->pos())); -} - -void QQuickComboBox::mouseReleaseEvent(QMouseEvent *event) -{ - Q_D(QQuickComboBox); - QQuickControl::mouseReleaseEvent(event); - if (d->pressed) { - setPressed(false); - d->togglePopup(false); - } -} - -void QQuickComboBox::mouseUngrabEvent() -{ - QQuickControl::mouseUngrabEvent(); - setPressed(false); -} - #if QT_CONFIG(wheelevent) void QQuickComboBox::wheelEvent(QWheelEvent *event) { diff --git a/src/quicktemplates2/qquickcombobox_p.h b/src/quicktemplates2/qquickcombobox_p.h index 76dce2d5..851392aa 100644 --- a/src/quicktemplates2/qquickcombobox_p.h +++ b/src/quicktemplates2/qquickcombobox_p.h @@ -183,10 +183,6 @@ protected: #endif void keyPressEvent(QKeyEvent *event) override; void keyReleaseEvent(QKeyEvent *event) override; - void mousePressEvent(QMouseEvent *event) override; - void mouseMoveEvent(QMouseEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; - void mouseUngrabEvent() override; #if QT_CONFIG(wheelevent) void wheelEvent(QWheelEvent *event) override; #endif diff --git a/src/quicktemplates2/qquickcontrol.cpp b/src/quicktemplates2/qquickcontrol.cpp index 95686360..d57c3260 100644 --- a/src/quicktemplates2/qquickcontrol.cpp +++ b/src/quicktemplates2/qquickcontrol.cpp @@ -120,6 +120,7 @@ QQuickControlPrivate::QQuickControlPrivate() hovered(false), explicitHoverEnabled(false), #endif + touchId(-1), padding(0), topPadding(0), leftPadding(0), @@ -144,6 +145,49 @@ QQuickControlPrivate::~QQuickControlPrivate() #endif } +bool QQuickControlPrivate::acceptTouch(const QTouchEvent::TouchPoint &point) +{ + if (point.id() == touchId) + return true; + + if (touchId == -1 && point.state() == Qt::TouchPointPressed) { + touchId = point.id(); + return true; + } + + return false; +} + +void QQuickControlPrivate::handlePress(const QPointF &) +{ + Q_Q(QQuickControl); + if ((focusPolicy & Qt::ClickFocus) == Qt::ClickFocus && !QGuiApplication::styleHints()->setFocusOnTouchRelease()) + q->forceActiveFocus(Qt::MouseFocusReason); +} + +void QQuickControlPrivate::handleMove(const QPointF &point) +{ +#if QT_CONFIG(quicktemplates2_hover) + Q_Q(QQuickControl); + q->setHovered(hoverEnabled && q->contains(point)); +#else + Q_UNUSED(point); +#endif +} + +void QQuickControlPrivate::handleRelease(const QPointF &) +{ + Q_Q(QQuickControl); + if ((focusPolicy & Qt::ClickFocus) == Qt::ClickFocus && QGuiApplication::styleHints()->setFocusOnTouchRelease()) + q->forceActiveFocus(Qt::MouseFocusReason); + touchId = -1; +} + +void QQuickControlPrivate::handleUngrab() +{ + touchId = -1; +} + void QQuickControlPrivate::mirrorChange() { Q_Q(QQuickControl); @@ -1220,30 +1264,85 @@ void QQuickControl::hoverLeaveEvent(QHoverEvent *event) void QQuickControl::mousePressEvent(QMouseEvent *event) { Q_D(QQuickControl); - if ((d->focusPolicy & Qt::ClickFocus) == Qt::ClickFocus && !QGuiApplication::styleHints()->setFocusOnTouchRelease()) - forceActiveFocus(Qt::MouseFocusReason); - + d->handlePress(event->localPos()); event->accept(); } void QQuickControl::mouseMoveEvent(QMouseEvent *event) { -#if QT_CONFIG(quicktemplates2_hover) Q_D(QQuickControl); - setHovered(d->hoverEnabled && contains(event->pos())); -#endif + d->handleMove(event->localPos()); event->accept(); } void QQuickControl::mouseReleaseEvent(QMouseEvent *event) { Q_D(QQuickControl); - if ((d->focusPolicy & Qt::ClickFocus) == Qt::ClickFocus && QGuiApplication::styleHints()->setFocusOnTouchRelease()) - forceActiveFocus(Qt::MouseFocusReason); - + d->handleRelease(event->localPos()); event->accept(); } +void QQuickControl::mouseUngrabEvent() +{ + Q_D(QQuickControl); + d->handleUngrab(); +} + +void QQuickControl::touchEvent(QTouchEvent *event) +{ + Q_D(QQuickControl); + switch (event->type()) { + case QEvent::TouchBegin: + for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { + if (d->acceptTouch(point)) + d->handlePress(point.pos()); + } + break; + + case QEvent::TouchUpdate: + for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { + if (!d->acceptTouch(point)) + continue; + + switch (point.state()) { + case Qt::TouchPointPressed: + d->handlePress(point.pos()); + break; + case Qt::TouchPointMoved: + d->handleMove(point.pos()); + break; + case Qt::TouchPointReleased: + d->handleRelease(point.pos()); + break; + default: + break; + } + } + break; + + case QEvent::TouchEnd: + for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { + if (d->acceptTouch(point)) + d->handleRelease(point.pos()); + } + break; + + case QEvent::TouchCancel: + d->handleUngrab(); + break; + + default: + QQuickItem::touchEvent(event); + break; + } +} + +void QQuickControl::touchUngrabEvent() +{ + Q_D(QQuickControl); + d->handleUngrab(); +} + #if QT_CONFIG(wheelevent) void QQuickControl::wheelEvent(QWheelEvent *event) { diff --git a/src/quicktemplates2/qquickcontrol_p.h b/src/quicktemplates2/qquickcontrol_p.h index ab92d6ab..feb6646e 100644 --- a/src/quicktemplates2/qquickcontrol_p.h +++ b/src/quicktemplates2/qquickcontrol_p.h @@ -184,6 +184,9 @@ protected: void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; + void mouseUngrabEvent() override; + void touchEvent(QTouchEvent *event) override; + void touchUngrabEvent() override; #if QT_CONFIG(wheelevent) void wheelEvent(QWheelEvent *event) override; #endif diff --git a/src/quicktemplates2/qquickcontrol_p_p.h b/src/quicktemplates2/qquickcontrol_p_p.h index 113110de..a6825640 100644 --- a/src/quicktemplates2/qquickcontrol_p_p.h +++ b/src/quicktemplates2/qquickcontrol_p_p.h @@ -78,6 +78,12 @@ public: return control->d_func(); } + virtual bool acceptTouch(const QTouchEvent::TouchPoint &point); + virtual void handlePress(const QPointF &point); + virtual void handleMove(const QPointF &point); + virtual void handleRelease(const QPointF &point); + virtual void handleUngrab(); + void mirrorChange() override; void setTopPadding(qreal value, bool reset = false); @@ -136,6 +142,7 @@ public: bool hovered; bool explicitHoverEnabled; #endif + int touchId; qreal padding; qreal topPadding; qreal leftPadding; diff --git a/src/quicktemplates2/qquickdial.cpp b/src/quicktemplates2/qquickdial.cpp index 5b98992b..98ca8186 100644 --- a/src/quicktemplates2/qquickdial.cpp +++ b/src/quicktemplates2/qquickdial.cpp @@ -96,8 +96,7 @@ class QQuickDialPrivate : public QQuickControlPrivate public: QQuickDialPrivate() - : touchId(-1), - from(0), + : from(0), to(1), value(0), position(0), @@ -118,12 +117,11 @@ public: void updatePosition(); bool isLargeChange(const QPointF &eventPos, qreal proposedPosition) const; - void handlePress(const QPointF &point); - void handleMove(const QPointF &point); - void handleRelease(const QPointF &point); - void handleUngrab(); + void handlePress(const QPointF &point) override; + void handleMove(const QPointF &point) override; + void handleRelease(const QPointF &point) override; + void handleUngrab() override; - int touchId; qreal from; qreal to; qreal value; @@ -200,6 +198,7 @@ bool QQuickDialPrivate::isLargeChange(const QPointF &eventPos, qreal proposedPos void QQuickDialPrivate::handlePress(const QPointF &point) { Q_Q(QQuickDial); + QQuickControlPrivate::handlePress(point); pressPoint = point; q->setPressed(true); } @@ -207,6 +206,7 @@ void QQuickDialPrivate::handlePress(const QPointF &point) void QQuickDialPrivate::handleMove(const QPointF &point) { Q_Q(QQuickDial); + QQuickControlPrivate::handleMove(point); const qreal oldPos = position; qreal pos = positionAt(point); if (snapMode == QQuickDial::SnapAlways) @@ -225,6 +225,7 @@ void QQuickDialPrivate::handleMove(const QPointF &point) void QQuickDialPrivate::handleRelease(const QPointF &point) { Q_Q(QQuickDial); + QQuickControlPrivate::handleRelease(point); if (q->keepMouseGrab() || q->keepTouchGrab()) { const qreal oldPos = position; qreal pos = positionAt(point); @@ -242,14 +243,13 @@ void QQuickDialPrivate::handleRelease(const QPointF &point) q->setPressed(false); pressPoint = QPointF(); - touchId = -1; } void QQuickDialPrivate::handleUngrab() { Q_Q(QQuickDial); + QQuickControlPrivate::handleUngrab(); pressPoint = QPointF(); - touchId = -1; q->setPressed(false); } @@ -648,14 +648,12 @@ void QQuickDial::mousePressEvent(QMouseEvent *event) { Q_D(QQuickDial); QQuickControl::mousePressEvent(event); - d->handlePress(event->localPos()); d->handleMove(event->localPos()); } void QQuickDial::mouseMoveEvent(QMouseEvent *event) { Q_D(QQuickDial); - QQuickControl::mouseMoveEvent(event); if (!keepMouseGrab()) { bool overXDragThreshold = QQuickWindowPrivate::dragOverThreshold(event->localPos().x() - d->pressPoint.x(), Qt::XAxis, event); setKeepMouseGrab(overXDragThreshold); @@ -665,82 +663,46 @@ void QQuickDial::mouseMoveEvent(QMouseEvent *event) setKeepMouseGrab(overYDragThreshold); } } - d->handleMove(event->localPos()); -} - -void QQuickDial::mouseReleaseEvent(QMouseEvent *event) -{ - Q_D(QQuickDial); - QQuickControl::mouseReleaseEvent(event); - d->handleRelease(event->localPos()); -} - -void QQuickDial::mouseUngrabEvent() -{ - Q_D(QQuickDial); - QQuickControl::mouseUngrabEvent(); - d->handleUngrab(); + QQuickControl::mouseMoveEvent(event); } void QQuickDial::touchEvent(QTouchEvent *event) { Q_D(QQuickDial); switch (event->type()) { - case QEvent::TouchBegin: - if (d->touchId == -1) { - const QTouchEvent::TouchPoint point = event->touchPoints().first(); - d->touchId = point.id(); - d->handlePress(point.pos()); - } else { - event->ignore(); - } - break; - case QEvent::TouchUpdate: for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (point.id() != d->touchId) + if (!d->acceptTouch(point)) continue; - if (!keepTouchGrab()) { - bool overXDragThreshold = QQuickWindowPrivate::dragOverThreshold(point.pos().x() - d->pressPoint.x(), Qt::XAxis, &point); - setKeepTouchGrab(overXDragThreshold); + switch (point.state()) { + case Qt::TouchPointMoved: + if (!keepTouchGrab()) { + bool overXDragThreshold = QQuickWindowPrivate::dragOverThreshold(point.pos().x() - d->pressPoint.x(), Qt::XAxis, &point); + setKeepTouchGrab(overXDragThreshold); - if (!overXDragThreshold) { - bool overYDragThreshold = QQuickWindowPrivate::dragOverThreshold(point.pos().y() - d->pressPoint.y(), Qt::YAxis, &point); - setKeepTouchGrab(overYDragThreshold); + if (!overXDragThreshold) { + bool overYDragThreshold = QQuickWindowPrivate::dragOverThreshold(point.pos().y() - d->pressPoint.y(), Qt::YAxis, &point); + setKeepTouchGrab(overYDragThreshold); + } } - } - if (keepTouchGrab()) - d->handleMove(point.pos()); - } - break; + if (keepTouchGrab()) + d->handleMove(point.pos()); + break; - case QEvent::TouchEnd: - for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (point.id() != d->touchId) - continue; - - d->handleRelease(point.pos()); + default: + QQuickControl::touchEvent(event); + break; + } } break; - case QEvent::TouchCancel: - d->handleUngrab(); - break; - default: QQuickControl::touchEvent(event); break; } } -void QQuickDial::touchUngrabEvent() -{ - Q_D(QQuickDial); - QQuickControl::touchUngrabEvent(); - d->handleUngrab(); -} - #if QT_CONFIG(wheelevent) void QQuickDial::wheelEvent(QWheelEvent *event) { diff --git a/src/quicktemplates2/qquickdial_p.h b/src/quicktemplates2/qquickdial_p.h index e402922d..1a6d70fd 100644 --- a/src/quicktemplates2/qquickdial_p.h +++ b/src/quicktemplates2/qquickdial_p.h @@ -136,10 +136,7 @@ protected: void keyReleaseEvent(QKeyEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; - void mouseUngrabEvent() override; void touchEvent(QTouchEvent *event) override; - void touchUngrabEvent() override; #if QT_CONFIG(wheelevent) void wheelEvent(QWheelEvent *event) override; #endif diff --git a/src/quicktemplates2/qquickdialogbuttonbox.cpp b/src/quicktemplates2/qquickdialogbuttonbox.cpp index 386577da..3c422268 100644 --- a/src/quicktemplates2/qquickdialogbuttonbox.cpp +++ b/src/quicktemplates2/qquickdialogbuttonbox.cpp @@ -258,7 +258,12 @@ void QQuickDialogButtonBoxPrivate::updateLayout() return firstRole != QPlatformDialogHelper::InvalidRole; } - const int *m_layout = QPlatformDialogHelper::buttonLayout(); + static const int *themeButtonLayout() + { + const int hint = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::DialogButtonBoxLayout).toInt(); + return QPlatformDialogHelper::buttonLayout(Qt::Horizontal, static_cast<QPlatformDialogHelper::ButtonLayout>(hint)); + } + const int *m_layout = themeButtonLayout(); }; std::sort(buttons.begin(), buttons.end(), ButtonLayout()); diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index 8c37ea84..e0c5c653 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -1853,6 +1853,16 @@ bool QQuickPopup::overlayEvent(QQuickItem *item, QEvent *event) } } +void QQuickPopup::touchEvent(QTouchEvent *event) +{ + // TODO: QQuickPopup and QQuickDrawer still rely on synthesized mouse events + event->ignore(); +} + +void QQuickPopup::touchUngrabEvent() +{ +} + #if QT_CONFIG(wheelevent) void QQuickPopup::wheelEvent(QWheelEvent *event) { diff --git a/src/quicktemplates2/qquickpopup_p.h b/src/quicktemplates2/qquickpopup_p.h index d1b0dfac..8d311e4a 100644 --- a/src/quicktemplates2/qquickpopup_p.h +++ b/src/quicktemplates2/qquickpopup_p.h @@ -351,6 +351,8 @@ protected: virtual void mouseDoubleClickEvent(QMouseEvent *event); virtual void mouseUngrabEvent(); virtual bool overlayEvent(QQuickItem *item, QEvent *event); + virtual void touchEvent(QTouchEvent *event); + virtual void touchUngrabEvent(); #if QT_CONFIG(wheelevent) virtual void wheelEvent(QWheelEvent *event); #endif diff --git a/src/quicktemplates2/qquickpopupitem.cpp b/src/quicktemplates2/qquickpopupitem.cpp index 94bd7dec..abcb86aa 100644 --- a/src/quicktemplates2/qquickpopupitem.cpp +++ b/src/quicktemplates2/qquickpopupitem.cpp @@ -229,6 +229,18 @@ void QQuickPopupItem::mouseUngrabEvent() d->popup->mouseUngrabEvent(); } +void QQuickPopupItem::touchEvent(QTouchEvent *event) +{ + Q_D(QQuickPopupItem); + d->popup->touchEvent(event); +} + +void QQuickPopupItem::touchUngrabEvent() +{ + Q_D(QQuickPopupItem); + d->popup->touchUngrabEvent(); +} + #if QT_CONFIG(wheelevent) void QQuickPopupItem::wheelEvent(QWheelEvent *event) { diff --git a/src/quicktemplates2/qquickpopupitem_p_p.h b/src/quicktemplates2/qquickpopupitem_p_p.h index 9ceb8389..9b3c76df 100644 --- a/src/quicktemplates2/qquickpopupitem_p_p.h +++ b/src/quicktemplates2/qquickpopupitem_p_p.h @@ -79,6 +79,8 @@ protected: void mouseReleaseEvent(QMouseEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; void mouseUngrabEvent() override; + void touchEvent(QTouchEvent *event) override; + void touchUngrabEvent() override; #if QT_CONFIG(wheelevent) void wheelEvent(QWheelEvent *event) override; #endif diff --git a/src/quicktemplates2/qquickrangeslider.cpp b/src/quicktemplates2/qquickrangeslider.cpp index 9996d041..1468d358 100644 --- a/src/quicktemplates2/qquickrangeslider.cpp +++ b/src/quicktemplates2/qquickrangeslider.cpp @@ -327,10 +327,12 @@ public: } QQuickRangeSliderNode *pressedNode(int touchId = -1) const; - void handlePress(const QPointF &point, int touchId = -1); - void handleMove(const QPointF &point, int touchId = -1); - void handleRelease(const QPointF &point, int touchId = -1); - void handleUngrab(); + + bool acceptTouch(const QTouchEvent::TouchPoint &point) override; + void handlePress(const QPointF &point) override; + void handleMove(const QPointF &point) override; + void handleRelease(const QPointF &point) override; + void handleUngrab() override; void updateHover(const QPointF &pos); @@ -395,9 +397,23 @@ QQuickRangeSliderNode *QQuickRangeSliderPrivate::pressedNode(int touchId) const return nullptr; } -void QQuickRangeSliderPrivate::handlePress(const QPointF &point, int touchId) +bool QQuickRangeSliderPrivate::acceptTouch(const QTouchEvent::TouchPoint &point) +{ + int firstId = QQuickRangeSliderNodePrivate::get(first)->touchId; + int secondId = QQuickRangeSliderNodePrivate::get(second)->touchId; + + if (((firstId == -1 || secondId == -1) && point.state() == Qt::TouchPointPressed) || point.id() == firstId || point.id() == secondId) { + touchId = point.id(); + return true; + } + + return false; +} + +void QQuickRangeSliderPrivate::handlePress(const QPointF &point) { Q_Q(QQuickRangeSlider); + QQuickControlPrivate::handlePress(point); pressPoint = point; QQuickItem *firstHandle = first->handle(); @@ -453,9 +469,10 @@ void QQuickRangeSliderPrivate::handlePress(const QPointF &point, int touchId) otherNode->handle()->setZ(0); } -void QQuickRangeSliderPrivate::handleMove(const QPointF &point, int touchId) +void QQuickRangeSliderPrivate::handleMove(const QPointF &point) { Q_Q(QQuickRangeSlider); + QQuickControlPrivate::handleMove(point); QQuickRangeSliderNode *pressedNode = QQuickRangeSliderPrivate::pressedNode(touchId); if (pressedNode) { qreal pos = positionAt(q, pressedNode->handle(), point); @@ -468,9 +485,10 @@ void QQuickRangeSliderPrivate::handleMove(const QPointF &point, int touchId) } } -void QQuickRangeSliderPrivate::handleRelease(const QPointF &point, int touchId) +void QQuickRangeSliderPrivate::handleRelease(const QPointF &point) { Q_Q(QQuickRangeSlider); + QQuickControlPrivate::handleRelease(point); pressPoint = QPointF(); QQuickRangeSliderNode *pressedNode = QQuickRangeSliderPrivate::pressedNode(touchId); @@ -496,6 +514,7 @@ void QQuickRangeSliderPrivate::handleRelease(const QPointF &point, int touchId) void QQuickRangeSliderPrivate::handleUngrab() { + QQuickControlPrivate::handleUngrab(); pressPoint = QPointF(); first->setPressed(false); second->setPressed(false); @@ -982,57 +1001,33 @@ void QQuickRangeSlider::mousePressEvent(QMouseEvent *event) { Q_D(QQuickRangeSlider); QQuickControl::mousePressEvent(event); - d->handlePress(event->localPos()); d->handleMove(event->localPos()); } void QQuickRangeSlider::mouseMoveEvent(QMouseEvent *event) { Q_D(QQuickRangeSlider); - QQuickControl::mouseMoveEvent(event); if (!keepMouseGrab()) { if (d->orientation == Qt::Horizontal) setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->localPos().x() - d->pressPoint.x(), Qt::XAxis, event)); else setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->localPos().y() - d->pressPoint.y(), Qt::YAxis, event)); } - if (keepMouseGrab()) - d->handleMove(event->localPos()); -} - -void QQuickRangeSlider::mouseReleaseEvent(QMouseEvent *event) -{ - Q_D(QQuickRangeSlider); - QQuickControl::mouseReleaseEvent(event); - d->handleRelease(event->localPos()); -} - -void QQuickRangeSlider::mouseUngrabEvent() -{ - Q_D(QQuickRangeSlider); - QQuickControl::mouseUngrabEvent(); - d->handleUngrab(); + QQuickControl::mouseMoveEvent(event); } void QQuickRangeSlider::touchEvent(QTouchEvent *event) { Q_D(QQuickRangeSlider); switch (event->type()) { - case QEvent::TouchBegin: - if (!d->first->isPressed() || !d->second->isPressed()) { - const QTouchEvent::TouchPoint point = event->touchPoints().first(); - d->handlePress(point.pos(), point.id()); - } else { - event->ignore(); - } - break; - case QEvent::TouchUpdate: for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { + if (!d->acceptTouch(point)) + continue; + switch (point.state()) { case Qt::TouchPointPressed: - if (!d->first->isPressed() || !d->second->isPressed()) - d->handlePress(point.pos(), point.id()); + d->handlePress(point.pos()); break; case Qt::TouchPointMoved: if (!keepTouchGrab()) { @@ -1041,14 +1036,11 @@ void QQuickRangeSlider::touchEvent(QTouchEvent *event) else setKeepTouchGrab(QQuickWindowPrivate::dragOverThreshold(point.pos().y() - point.startPos().y(), Qt::YAxis, &point)); } - if (point.id() == QQuickRangeSliderNodePrivate::get(d->first)->touchId - || point.id() == QQuickRangeSliderNodePrivate::get(d->second)->touchId) - d->handleMove(point.pos(), point.id()); + if (keepTouchGrab()) + d->handleMove(point.pos()); break; case Qt::TouchPointReleased: - if (point.id() == QQuickRangeSliderNodePrivate::get(d->first)->touchId - || point.id() == QQuickRangeSliderNodePrivate::get(d->second)->touchId) - d->handleRelease(point.pos(), point.id()); + d->handleRelease(point.pos()); break; default: break; @@ -1056,31 +1048,12 @@ void QQuickRangeSlider::touchEvent(QTouchEvent *event) } break; - case QEvent::TouchEnd: - for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (point.id() == QQuickRangeSliderNodePrivate::get(d->first)->touchId - || point.id() == QQuickRangeSliderNodePrivate::get(d->second)->touchId) - d->handleRelease(point.pos(), point.id()); - } - break; - - case QEvent::TouchCancel: - d->handleUngrab(); - break; - default: QQuickControl::touchEvent(event); break; } } -void QQuickRangeSlider::touchUngrabEvent() -{ - Q_D(QQuickRangeSlider); - QQuickControl::touchUngrabEvent(); - d->handleUngrab(); -} - void QQuickRangeSlider::mirrorChange() { Q_D(QQuickRangeSlider); diff --git a/src/quicktemplates2/qquickrangeslider_p.h b/src/quicktemplates2/qquickrangeslider_p.h index affb734a..b4553501 100644 --- a/src/quicktemplates2/qquickrangeslider_p.h +++ b/src/quicktemplates2/qquickrangeslider_p.h @@ -122,10 +122,7 @@ protected: void keyReleaseEvent(QKeyEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; - void mouseUngrabEvent() override; void touchEvent(QTouchEvent *event) override; - void touchUngrabEvent() override; void mirrorChange() override; void componentComplete() override; diff --git a/src/quicktemplates2/qquickscrollbar.cpp b/src/quicktemplates2/qquickscrollbar.cpp index 240f6601..128bca6f 100644 --- a/src/quicktemplates2/qquickscrollbar.cpp +++ b/src/quicktemplates2/qquickscrollbar.cpp @@ -165,7 +165,6 @@ QQuickScrollBarPrivate::QQuickScrollBarPrivate() moving(false), interactive(true), explicitInteractive(false), - touchId(-1), orientation(Qt::Vertical), snapMode(QQuickScrollBar::NoSnap), policy(QQuickScrollBar::AsNeeded) @@ -246,6 +245,7 @@ void QQuickScrollBarPrivate::resizeContent() void QQuickScrollBarPrivate::handlePress(const QPointF &point) { Q_Q(QQuickScrollBar); + QQuickControlPrivate::handlePress(point); offset = positionAt(point) - position; if (offset < 0 || offset > size) offset = size / 2; @@ -255,6 +255,7 @@ void QQuickScrollBarPrivate::handlePress(const QPointF &point) void QQuickScrollBarPrivate::handleMove(const QPointF &point) { Q_Q(QQuickScrollBar); + QQuickControlPrivate::handleMove(point); qreal pos = qBound<qreal>(0.0, positionAt(point) - offset, 1.0 - size); if (snapMode == QQuickScrollBar::SnapAlways) pos = snapPosition(pos); @@ -264,20 +265,20 @@ void QQuickScrollBarPrivate::handleMove(const QPointF &point) void QQuickScrollBarPrivate::handleRelease(const QPointF &point) { Q_Q(QQuickScrollBar); + QQuickControlPrivate::handleRelease(point); qreal pos = qBound<qreal>(0.0, positionAt(point) - offset, 1.0 - size); if (snapMode != QQuickScrollBar::NoSnap) pos = snapPosition(pos); q->setPosition(pos); offset = 0.0; - touchId = -1; q->setPressed(false); } void QQuickScrollBarPrivate::handleUngrab() { Q_Q(QQuickScrollBar); + QQuickControlPrivate::handleUngrab(); offset = 0.0; - touchId = -1; q->setPressed(false); } @@ -627,80 +628,9 @@ void QQuickScrollBar::mousePressEvent(QMouseEvent *event) { Q_D(QQuickScrollBar); QQuickControl::mousePressEvent(event); - d->handlePress(event->localPos()); d->handleMove(event->localPos()); } -void QQuickScrollBar::mouseMoveEvent(QMouseEvent *event) -{ - Q_D(QQuickScrollBar); - QQuickControl::mouseMoveEvent(event); - d->handleMove(event->localPos()); -} - -void QQuickScrollBar::mouseReleaseEvent(QMouseEvent *event) -{ - Q_D(QQuickScrollBar); - QQuickControl::mouseReleaseEvent(event); - d->handleRelease(event->localPos()); -} - -void QQuickScrollBar::mouseUngrabEvent() -{ - Q_D(QQuickScrollBar); - QQuickControl::mouseUngrabEvent(); - d->handleUngrab(); -} - -void QQuickScrollBar::touchEvent(QTouchEvent *event) -{ - Q_D(QQuickScrollBar); - switch (event->type()) { - case QEvent::TouchBegin: - if (d->touchId == -1) { - const QTouchEvent::TouchPoint point = event->touchPoints().first(); - d->touchId = point.id(); - d->handlePress(point.pos()); - } else { - event->ignore(); - } - break; - - case QEvent::TouchUpdate: - for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (point.id() != d->touchId) - continue; - - d->handleMove(point.pos()); - } - break; - - case QEvent::TouchEnd: - for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (point.id() != d->touchId) - continue; - - d->handleRelease(point.pos()); - } - break; - - case QEvent::TouchCancel: - d->handleUngrab(); - break; - - default: - QQuickControl::touchEvent(event); - break; - } -} - -void QQuickScrollBar::touchUngrabEvent() -{ - Q_D(QQuickScrollBar); - QQuickControl::touchUngrabEvent(); - d->handleUngrab(); -} - #if QT_CONFIG(quicktemplates2_hover) void QQuickScrollBar::hoverChange() { diff --git a/src/quicktemplates2/qquickscrollbar_p.h b/src/quicktemplates2/qquickscrollbar_p.h index d7457876..9b417a2b 100644 --- a/src/quicktemplates2/qquickscrollbar_p.h +++ b/src/quicktemplates2/qquickscrollbar_p.h @@ -136,11 +136,6 @@ Q_SIGNALS: protected: void mousePressEvent(QMouseEvent *event) override; - void mouseMoveEvent(QMouseEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; - void mouseUngrabEvent() override; - void touchEvent(QTouchEvent *event) override; - void touchUngrabEvent() override; #if QT_CONFIG(quicktemplates2_hover) void hoverChange() override; diff --git a/src/quicktemplates2/qquickscrollbar_p_p.h b/src/quicktemplates2/qquickscrollbar_p_p.h index 409b952b..431bb383 100644 --- a/src/quicktemplates2/qquickscrollbar_p_p.h +++ b/src/quicktemplates2/qquickscrollbar_p_p.h @@ -74,10 +74,10 @@ public: void updateActive(); void resizeContent() override; - void handlePress(const QPointF &point); - void handleMove(const QPointF &point); - void handleRelease(const QPointF &point); - void handleUngrab(); + void handlePress(const QPointF &point) override; + void handleMove(const QPointF &point) override; + void handleRelease(const QPointF &point) override; + void handleUngrab() override; qreal size; qreal position; @@ -88,7 +88,6 @@ public: bool moving; bool interactive; bool explicitInteractive; - int touchId; Qt::Orientation orientation; QQuickScrollBar::SnapMode snapMode; QQuickScrollBar::Policy policy; diff --git a/src/quicktemplates2/qquickslider.cpp b/src/quicktemplates2/qquickslider.cpp index 7c64957b..2e337c3a 100644 --- a/src/quicktemplates2/qquickslider.cpp +++ b/src/quicktemplates2/qquickslider.cpp @@ -96,7 +96,6 @@ public: stepSize(0), live(true), pressed(false), - touchId(-1), orientation(Qt::Horizontal), snapMode(QQuickSlider::NoSnap), handle(nullptr) @@ -108,10 +107,10 @@ public: void setPosition(qreal position); void updatePosition(); - void handlePress(const QPointF &point); - void handleMove(const QPointF &point); - void handleRelease(const QPointF &point); - void handleUngrab(); + void handlePress(const QPointF &point) override; + void handleMove(const QPointF &point) override; + void handleRelease(const QPointF &point) override; + void handleUngrab() override; qreal from; qreal to; @@ -120,7 +119,6 @@ public: qreal stepSize; bool live; bool pressed; - int touchId; QPointF pressPoint; Qt::Orientation orientation; QQuickSlider::SnapMode snapMode; @@ -187,6 +185,7 @@ void QQuickSliderPrivate::updatePosition() void QQuickSliderPrivate::handlePress(const QPointF &point) { Q_Q(QQuickSlider); + QQuickControlPrivate::handlePress(point); pressPoint = point; q->setPressed(true); } @@ -194,6 +193,7 @@ void QQuickSliderPrivate::handlePress(const QPointF &point) void QQuickSliderPrivate::handleMove(const QPointF &point) { Q_Q(QQuickSlider); + QQuickControlPrivate::handleMove(point); const qreal oldPos = position; qreal pos = positionAt(point); if (snapMode == QQuickSlider::SnapAlways) @@ -209,7 +209,7 @@ void QQuickSliderPrivate::handleMove(const QPointF &point) void QQuickSliderPrivate::handleRelease(const QPointF &point) { Q_Q(QQuickSlider); - touchId = -1; + QQuickControlPrivate::handleRelease(point); pressPoint = QPointF(); const qreal oldPos = position; qreal pos = positionAt(point); @@ -230,7 +230,7 @@ void QQuickSliderPrivate::handleRelease(const QPointF &point) void QQuickSliderPrivate::handleUngrab() { Q_Q(QQuickSlider); - touchId = -1; + QQuickControlPrivate::handleUngrab(); pressPoint = QPointF(); q->setPressed(false); } @@ -650,93 +650,59 @@ void QQuickSlider::mousePressEvent(QMouseEvent *event) { Q_D(QQuickSlider); QQuickControl::mousePressEvent(event); - d->handlePress(event->localPos()); d->handleMove(event->localPos()); } void QQuickSlider::mouseMoveEvent(QMouseEvent *event) { Q_D(QQuickSlider); - QQuickControl::mouseMoveEvent(event); if (!keepMouseGrab()) { if (d->orientation == Qt::Horizontal) setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->localPos().x() - d->pressPoint.x(), Qt::XAxis, event)); else setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->localPos().y() - d->pressPoint.y(), Qt::YAxis, event)); } - d->handleMove(event->localPos()); -} - -void QQuickSlider::mouseReleaseEvent(QMouseEvent *event) -{ - Q_D(QQuickSlider); - QQuickControl::mouseReleaseEvent(event); - d->handleRelease(event->localPos()); -} - -void QQuickSlider::mouseUngrabEvent() -{ - Q_D(QQuickSlider); - QQuickControl::mouseUngrabEvent(); - d->handleUngrab(); + QQuickControl::mouseMoveEvent(event); } void QQuickSlider::touchEvent(QTouchEvent *event) { Q_D(QQuickSlider); switch (event->type()) { - case QEvent::TouchBegin: - if (d->touchId == -1) { - const QTouchEvent::TouchPoint point = event->touchPoints().first(); - d->touchId = point.id(); - d->handlePress(point.pos()); - } else { - event->ignore(); - } - break; - case QEvent::TouchUpdate: for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (point.id() != d->touchId) + if (!d->acceptTouch(point)) continue; - if (!keepTouchGrab()) { - if (d->orientation == Qt::Horizontal) - setKeepTouchGrab(QQuickWindowPrivate::dragOverThreshold(point.pos().x() - d->pressPoint.x(), Qt::XAxis, &point)); - else - setKeepTouchGrab(QQuickWindowPrivate::dragOverThreshold(point.pos().y() - d->pressPoint.y(), Qt::YAxis, &point)); + switch (point.state()) { + case Qt::TouchPointPressed: + d->handlePress(point.pos()); + break; + case Qt::TouchPointMoved: + if (!keepTouchGrab()) { + if (d->orientation == Qt::Horizontal) + setKeepTouchGrab(QQuickWindowPrivate::dragOverThreshold(point.pos().x() - d->pressPoint.x(), Qt::XAxis, &point)); + else + setKeepTouchGrab(QQuickWindowPrivate::dragOverThreshold(point.pos().y() - d->pressPoint.y(), Qt::YAxis, &point)); + } + if (keepTouchGrab()) + d->handleMove(point.pos()); + break; + case Qt::TouchPointReleased: + d->handleRelease(point.pos()); + break; + default: + break; } - if (keepTouchGrab()) - d->handleMove(point.pos()); - } - break; - - case QEvent::TouchEnd: - for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (point.id() != d->touchId) - continue; - - d->handleRelease(point.pos()); } break; - case QEvent::TouchCancel: - d->handleUngrab(); - break; - default: QQuickControl::touchEvent(event); break; } } -void QQuickSlider::touchUngrabEvent() -{ - Q_D(QQuickSlider); - QQuickControl::touchUngrabEvent(); - d->handleUngrab(); -} - #if QT_CONFIG(wheelevent) void QQuickSlider::wheelEvent(QWheelEvent *event) { diff --git a/src/quicktemplates2/qquickslider_p.h b/src/quicktemplates2/qquickslider_p.h index f2a13217..cb441ddd 100644 --- a/src/quicktemplates2/qquickslider_p.h +++ b/src/quicktemplates2/qquickslider_p.h @@ -139,10 +139,7 @@ protected: void keyReleaseEvent(QKeyEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; - void mouseUngrabEvent() override; void touchEvent(QTouchEvent *event) override; - void touchUngrabEvent() override; #if QT_CONFIG(wheelevent) void wheelEvent(QWheelEvent *event) override; #endif diff --git a/src/quicktemplates2/qquickspinbox.cpp b/src/quicktemplates2/qquickspinbox.cpp index b70366ea..b6e99609 100644 --- a/src/quicktemplates2/qquickspinbox.cpp +++ b/src/quicktemplates2/qquickspinbox.cpp @@ -114,7 +114,6 @@ public: stepSize(1), delayTimer(0), repeatTimer(0), - touchId(-1), up(nullptr), down(nullptr), validator(nullptr), @@ -138,10 +137,10 @@ public: void startPressRepeat(); void stopPressRepeat(); - bool handlePress(const QPointF &point); - bool handleMove(const QPointF &point); - bool handleRelease(const QPointF &point); - bool handleUngrab(); + void handlePress(const QPointF &point) override; + void handleMove(const QPointF &point) override; + void handleRelease(const QPointF &point) override; + void handleUngrab() override; bool editable; int from; @@ -150,7 +149,6 @@ public: int stepSize; int delayTimer; int repeatTimer; - int touchId; QQuickSpinButton *up; QQuickSpinButton *down; QValidator *validator; @@ -273,9 +271,10 @@ void QQuickSpinBoxPrivate::stopPressRepeat() } } -bool QQuickSpinBoxPrivate::handlePress(const QPointF &point) +void QQuickSpinBoxPrivate::handlePress(const QPointF &point) { Q_Q(QQuickSpinBox); + QQuickControlPrivate::handlePress(point); QQuickItem *ui = up->indicator(); QQuickItem *di = down->indicator(); up->setPressed(ui && ui->isEnabled() && ui->contains(ui->mapFromItem(q, point))); @@ -285,12 +284,12 @@ bool QQuickSpinBoxPrivate::handlePress(const QPointF &point) q->setAccessibleProperty("pressed", pressed); if (pressed) startRepeatDelay(); - return pressed; } -bool QQuickSpinBoxPrivate::handleMove(const QPointF &point) +void QQuickSpinBoxPrivate::handleMove(const QPointF &point) { Q_Q(QQuickSpinBox); + QQuickControlPrivate::handleMove(point); QQuickItem *ui = up->indicator(); QQuickItem *di = down->indicator(); up->setPressed(ui && ui->isEnabled() && ui->contains(ui->mapFromItem(q, point))); @@ -300,17 +299,16 @@ bool QQuickSpinBoxPrivate::handleMove(const QPointF &point) q->setAccessibleProperty("pressed", pressed); if (!pressed) stopPressRepeat(); - return pressed; } -bool QQuickSpinBoxPrivate::handleRelease(const QPointF &point) +void QQuickSpinBoxPrivate::handleRelease(const QPointF &point) { Q_Q(QQuickSpinBox); + QQuickControlPrivate::handleRelease(point); QQuickItem *ui = up->indicator(); QQuickItem *di = down->indicator(); int oldValue = value; - bool wasPressed = up->isPressed() || down->isPressed(); if (up->isPressed()) { up->setPressed(false); if (repeatTimer <= 0 && ui && ui->contains(ui->mapFromItem(q, point))) @@ -323,22 +321,19 @@ bool QQuickSpinBoxPrivate::handleRelease(const QPointF &point) if (value != oldValue) emit q->valueModified(); - touchId = -1; q->setAccessibleProperty("pressed", false); stopPressRepeat(); - return wasPressed; } -bool QQuickSpinBoxPrivate::handleUngrab() +void QQuickSpinBoxPrivate::handleUngrab() { Q_Q(QQuickSpinBox); + QQuickControlPrivate::handleUngrab(); up->setPressed(false); down->setPressed(false); - touchId = -1; q->setAccessibleProperty("pressed", false); stopPressRepeat(); - return false; } QQuickSpinBox::QQuickSpinBox(QQuickItem *parent) @@ -791,34 +786,6 @@ void QQuickSpinBox::keyReleaseEvent(QKeyEvent *event) setAccessibleProperty("pressed", false); } -void QQuickSpinBox::mousePressEvent(QMouseEvent *event) -{ - Q_D(QQuickSpinBox); - QQuickControl::mousePressEvent(event); - d->handlePress(event->localPos()); -} - -void QQuickSpinBox::mouseMoveEvent(QMouseEvent *event) -{ - Q_D(QQuickSpinBox); - QQuickControl::mouseMoveEvent(event); - d->handleMove(event->localPos()); -} - -void QQuickSpinBox::mouseReleaseEvent(QMouseEvent *event) -{ - Q_D(QQuickSpinBox); - QQuickControl::mouseReleaseEvent(event); - d->handleRelease(event->localPos()); -} - -void QQuickSpinBox::mouseUngrabEvent() -{ - Q_D(QQuickSpinBox); - QQuickControl::mouseUngrabEvent(); - d->handleUngrab(); -} - void QQuickSpinBox::timerEvent(QTimerEvent *event) { Q_D(QQuickSpinBox); @@ -833,55 +800,6 @@ void QQuickSpinBox::timerEvent(QTimerEvent *event) } } -void QQuickSpinBox::touchEvent(QTouchEvent *event) -{ - Q_D(QQuickSpinBox); - switch (event->type()) { - case QEvent::TouchBegin: - if (d->touchId == -1) { - const QTouchEvent::TouchPoint point = event->touchPoints().first(); - d->touchId = point.id(); - d->handlePress(point.pos()); - } else { - event->ignore(); - } - break; - - case QEvent::TouchUpdate: - for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (point.id() != d->touchId) - continue; - - d->handleMove(point.pos()); - } - break; - - case QEvent::TouchEnd: - for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (point.id() != d->touchId) - continue; - - d->handleRelease(point.pos()); - } - break; - - case QEvent::TouchCancel: - d->handleUngrab(); - break; - - default: - QQuickControl::touchEvent(event); - break; - } -} - -void QQuickSpinBox::touchUngrabEvent() -{ - Q_D(QQuickSpinBox); - QQuickControl::touchUngrabEvent(); - d->handleUngrab(); -} - #if QT_CONFIG(wheelevent) void QQuickSpinBox::wheelEvent(QWheelEvent *event) { diff --git a/src/quicktemplates2/qquickspinbox_p.h b/src/quicktemplates2/qquickspinbox_p.h index 3d554870..d51a2ccb 100644 --- a/src/quicktemplates2/qquickspinbox_p.h +++ b/src/quicktemplates2/qquickspinbox_p.h @@ -132,13 +132,7 @@ protected: void hoverLeaveEvent(QHoverEvent *event) override; void keyPressEvent(QKeyEvent *event) override; void keyReleaseEvent(QKeyEvent *event) override; - void mousePressEvent(QMouseEvent *event) override; - void mouseMoveEvent(QMouseEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; - void mouseUngrabEvent() override; void timerEvent(QTimerEvent *event) override; - void touchEvent(QTouchEvent *event) override; - void touchUngrabEvent() override; #if QT_CONFIG(wheelevent) void wheelEvent(QWheelEvent *event) override; #endif |