From ae49252dbcc21de1dccee03c54a8e0986c5a0acc Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 6 Jan 2022 13:53:17 +0100 Subject: QMutableEventPoint: add static overloads of setters These overloads don't require a cast from QEventPoint to QMutableEventPoint, thus avoiding undefined behavior. Port easy users of QMutableEventPosition::(const)from() to the new API. Pick-to: 6.3 Task-number: QTBUG-99615 Change-Id: I4e9228322134ef7c712ca478ee8286466efc3585 Reviewed-by: Qt CI Bot Reviewed-by: Volker Hilsheimer --- src/widgets/graphicsview/qgraphicsscene.cpp | 4 ++-- src/widgets/graphicsview/qgraphicsview.cpp | 2 +- src/widgets/kernel/qapplication.cpp | 18 +++++++++--------- src/widgets/kernel/qtestsupport_widgets.cpp | 22 +++++++++++----------- 4 files changed, 23 insertions(+), 23 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp index 0eceaeacb2..5e30f114eb 100644 --- a/src/widgets/graphicsview/qgraphicsscene.cpp +++ b/src/widgets/graphicsview/qgraphicsscene.cpp @@ -5840,8 +5840,8 @@ void QGraphicsScenePrivate::updateTouchPointsForItem(QGraphicsItem *item, QTouch item->d_ptr->genericMapFromSceneTransform(static_cast(touchEvent->target())); for (int i = 0; i < touchEvent->pointCount(); ++i) { - auto &pt = QMutableEventPoint::from(touchEvent->point(i)); - QMutableEventPoint::from(pt).setPosition(mapFromScene.map(pt.scenePosition())); + auto &pt = touchEvent->point(i); + QMutableEventPoint::setPosition(pt, mapFromScene.map(pt.scenePosition())); } } diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp index f4b9228e51..1a147e5e40 100644 --- a/src/widgets/graphicsview/qgraphicsview.cpp +++ b/src/widgets/graphicsview/qgraphicsview.cpp @@ -314,7 +314,7 @@ void QGraphicsViewPrivate::translateTouchEvent(QGraphicsViewPrivate *d, QTouchEv auto &pt = touchEvent->point(i); // the scene will set the item local pos, startPos, lastPos, and rect before delivering to // an item, but for now those functions are returning the view's local coordinates - QMutableEventPoint::from(pt).setScenePosition(d->mapToScene(pt.position())); + QMutableEventPoint::setScenePosition(pt, d->mapToScene(pt.position())); // screenPos, startScreenPos, and lastScreenPos are already set } } diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index fa381e796c..b1ec997e04 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -3152,8 +3152,8 @@ bool QApplication::notify(QObject *receiver, QEvent *e) w = w->parentWidget(); touchEvent->setTarget(w); for (int i = 0; i < touchEvent->pointCount(); ++i) { - auto &pt = QMutableEventPoint::from(touchEvent->point(i)); - pt.setPosition(pt.position() + offset); + auto &pt = touchEvent->point(i); + QMutableEventPoint::setPosition(pt, pt.position() + offset); } } @@ -3802,8 +3802,8 @@ bool QApplicationPrivate::updateTouchPointsForWidget(QWidget *widget, QTouchEven bool containsPress = false; for (int i = 0; i < touchEvent->pointCount(); ++i) { - auto &pt = QMutableEventPoint::from(touchEvent->point(i)); - pt.setPosition(widget->mapFromGlobal(pt.globalPosition())); + auto &pt = touchEvent->point(i); + QMutableEventPoint::setPosition(pt, widget->mapFromGlobal(pt.globalPosition())); if (pt.state() == QEventPoint::State::Pressed) containsPress = true; @@ -3862,9 +3862,9 @@ void QApplicationPrivate::activateImplicitTouchGrab(QWidget *widget, QTouchEvent // there might already be an implicit grabber. Don't override that. A widget that // has partially recognized a gesture needs to grab all points. for (int i = 0; i < touchEvent->pointCount(); ++i) { - auto &mep = QMutableEventPoint::from(touchEvent->point(i)); - if (!mep.target() && (mep.isAccepted() || grabMode == GrabAllPoints)) - mep.setTarget(widget); + auto &ep = touchEvent->point(i); + if (!QMutableEventPoint::target(ep) && (ep.isAccepted() || grabMode == GrabAllPoints)) + QMutableEventPoint::setTarget(ep, widget); } // TODO setExclusiveGrabber() to be consistent with Qt Quick? } @@ -3913,9 +3913,9 @@ bool QApplicationPrivate::translateRawTouchEvent(QWidget *window, const QTouchEv // on touch pads, implicitly grab all touch points // on touch screens, grab touch points that are redirected to the closest widget if (device->type() == QInputDevice::DeviceType::TouchPad || usingClosestWidget) - QMutableEventPoint::from(touchPoint).setTarget(target); + QMutableEventPoint::setTarget(touchPoint, target); } else { - target = QMutableEventPoint::from(touchPoint).target(); + target = QMutableEventPoint::target(touchPoint); if (!target) continue; } diff --git a/src/widgets/kernel/qtestsupport_widgets.cpp b/src/widgets/kernel/qtestsupport_widgets.cpp index c9116fcef6..9c5603fc5a 100644 --- a/src/widgets/kernel/qtestsupport_widgets.cpp +++ b/src/widgets/kernel/qtestsupport_widgets.cpp @@ -100,30 +100,30 @@ QTouchEventWidgetSequence::~QTouchEventWidgetSequence() QTouchEventWidgetSequence& QTouchEventWidgetSequence::press(int touchId, const QPoint &pt, QWidget *widget) { - auto &p = QMutableEventPoint::from(point(touchId)); - p.setGlobalPosition(mapToScreen(widget, pt)); - p.setState(QEventPoint::State::Pressed); + auto &p = point(touchId); + QMutableEventPoint::setGlobalPosition(p, mapToScreen(widget, pt)); + QMutableEventPoint::setState(p, QEventPoint::State::Pressed); return *this; } QTouchEventWidgetSequence& QTouchEventWidgetSequence::move(int touchId, const QPoint &pt, QWidget *widget) { - auto &p = QMutableEventPoint::from(point(touchId)); - p.setGlobalPosition(mapToScreen(widget, pt)); - p.setState(QEventPoint::State::Updated); + auto &p = point(touchId); + QMutableEventPoint::setGlobalPosition(p, mapToScreen(widget, pt)); + QMutableEventPoint::setState(p, QEventPoint::State::Updated); return *this; } QTouchEventWidgetSequence& QTouchEventWidgetSequence::release(int touchId, const QPoint &pt, QWidget *widget) { - auto &p = QMutableEventPoint::from(point(touchId)); - p.setGlobalPosition(mapToScreen(widget, pt)); - p.setState(QEventPoint::State::Released); + auto &p = point(touchId); + QMutableEventPoint::setGlobalPosition(p, mapToScreen(widget, pt)); + QMutableEventPoint::setState(p, QEventPoint::State::Released); return *this; } QTouchEventWidgetSequence& QTouchEventWidgetSequence::stationary(int touchId) { - auto &p = QMutableEventPoint::from(pointOrPreviousPoint(touchId)); - p.setState(QEventPoint::State::Stationary); + auto &p = pointOrPreviousPoint(touchId); + QMutableEventPoint::setState(p, QEventPoint::State::Stationary); return *this; } -- cgit v1.2.3