Port users of QMutableEventPoint::from() to new static setters

In QQuickItem, added an opportunistic std::move() as a drive-by.

Task-number: QTBUG-99615
Pick-to: 6.3
Change-Id: Ib9426ae7e749036541d5f97824800636b5ccfb5e
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This commit is contained in:
Marc Mutz 2022-01-06 17:36:51 +01:00
parent a1bba5cd3d
commit f988168432
6 changed files with 32 additions and 34 deletions

View File

@ -1472,11 +1472,10 @@ void QQuickFlickable::mouseReleaseEvent(QMouseEvent *event)
// Now send the release
if (auto grabber = qmlobject_cast<QQuickItem *>(event->exclusiveGrabber(event->point(0)))) {
// not copying or detaching anything, so make sure we return the original event unchanged
QMutableSinglePointEvent *localized = QMutableSinglePointEvent::from(event);
const auto oldPosition = localized->mutablePoint().position();
localized->mutablePoint().setPosition(grabber->mapFromScene(localized->scenePosition()));
QCoreApplication::sendEvent(window(), localized);
localized->mutablePoint().setPosition(oldPosition);
const auto oldPosition = event->point(0).position();
QMutableEventPoint::setPosition(event->point(0), grabber->mapFromScene(event->scenePosition()));
QCoreApplication::sendEvent(window(), event);
QMutableEventPoint::setPosition(event->point(0), oldPosition);
}
// And the event has been consumed
@ -1747,7 +1746,7 @@ void QQuickFlickablePrivate::replayDelayedPress()
qCDebug(lcReplay) << "replaying" << event.data();
// Put scenePosition into position, for the sake of QQuickWindowPrivate::translateTouchEvent()
// TODO remove this if we remove QQuickWindowPrivate::translateTouchEvent()
QMutableEventPoint::from(firstPoint).setPosition(firstPoint.scenePosition());
QMutableEventPoint::setPosition(firstPoint, firstPoint.scenePosition());
// Send it through like a fresh press event, and let QQuickWindow
// (more specifically, QQuickWindowPrivate::deliverPressOrReleaseEvent)
// find the item or handler that should receive it, as usual.

View File

@ -8917,12 +8917,11 @@ void QQuickItemPrivate::localizedTouchEvent(const QTouchEvent *event, bool isFil
if ((p.state() == QEventPoint::State::Pressed || p.state() == QEventPoint::State::Released) && isInside)
anyPressOrReleaseInside = true;
QEventPoint pCopy(p);
QMutableEventPoint mut = QMutableEventPoint::from(pCopy);
eventStates |= p.state();
if (p.state() == QEventPoint::State::Released)
mut.detach();
mut.setPosition(localPos);
touchPoints << mut;
QMutableEventPoint::detach(pCopy);
QMutableEventPoint::setPosition(pCopy, localPos);
touchPoints.append(std::move(pCopy));
}
// Now touchPoints will have only points which are inside the item.

View File

@ -1861,7 +1861,7 @@ bool QQuickPathView::childMouseEventFilter(QQuickItem *i, QEvent *e)
if ((stealThisEvent || contains(localPos)) && (!grabber || !grabber->keepMouseGrab() || grabberDisabled)) {
// Make a localized copy of the QMouseEvent.
QMutableSinglePointEvent localizedEvent(*static_cast<QMouseEvent *>(pe));
QMutableEventPoint::from(localizedEvent.point(0)).setPosition(localPos);
QMutableEventPoint::setPosition(localizedEvent.point(0), localPos);
localizedEvent.setAccepted(false);
switch (localizedEvent.type()) {

View File

@ -308,8 +308,8 @@ void QQuickDeliveryAgentPrivate::removeGrabber(QQuickItem *grabber, bool mouse,
void QQuickDeliveryAgentPrivate::translateTouchEvent(QTouchEvent *touchEvent)
{
for (qsizetype i = 0; i != touchEvent->pointCount(); ++i) {
auto &pt = QMutableEventPoint::from(touchEvent->point(i));
pt.setScenePosition(pt.position());
auto &pt = touchEvent->point(i);
QMutableEventPoint::setScenePosition(pt, pt.position());
}
}
@ -894,11 +894,11 @@ QQuickDeliveryAgentPrivate::~QQuickDeliveryAgentPrivate()
QPointerEvent *QQuickDeliveryAgentPrivate::clonePointerEvent(QPointerEvent *event, std::optional<QPointF> transformedLocalPos)
{
QPointerEvent *ret = event->clone();
QMutableEventPoint &point = QMutableEventPoint::from(ret->point(0));
point.detach();
point.setTimestamp(event->timestamp());
QEventPoint &point = ret->point(0);
QMutableEventPoint::detach(point);
QMutableEventPoint::setTimestamp(point, event->timestamp());
if (transformedLocalPos)
point.setPosition(*transformedLocalPos);
QMutableEventPoint::setPosition(point, *transformedLocalPos);
return ret;
}
@ -947,10 +947,10 @@ bool QQuickDeliveryAgentPrivate::sendHoverEvent(QEvent::Type type, QQuickItem *i
hoverEvent.setTimestamp(timestamp);
hoverEvent.setAccepted(true);
const QTransform transformToGlobal = itemPrivate->windowToGlobalTransform();
QMutableEventPoint &point = QMutableEventPoint::from(hoverEvent.point(0));
point.setScenePosition(scenePos);
point.setGlobalPosition(transformToGlobal.map(scenePos));
point.setGlobalLastPosition(transformToGlobal.map(lastScenePos));
QEventPoint &point = hoverEvent.point(0);
QMutableEventPoint::setScenePosition(point, scenePos);
QMutableEventPoint::setGlobalPosition(point, transformToGlobal.map(scenePos));
QMutableEventPoint::setGlobalLastPosition(point, transformToGlobal.map(lastScenePos));
hasFiltered.clear();
if (sendFilteredMouseEvent(&hoverEvent, item, item->parentItem()))
@ -1271,8 +1271,8 @@ bool QQuickDeliveryAgentPrivate::allUpdatedPointsAccepted(const QPointerEvent *e
void QQuickDeliveryAgentPrivate::localizePointerEvent(QPointerEvent *ev, const QQuickItem *dest)
{
for (int i = 0; i < ev->pointCount(); ++i) {
auto &point = QMutableEventPoint::from(ev->point(i));
QMutableEventPoint::from(point).setPosition(dest->mapFromScene(point.scenePosition()));
auto &point = ev->point(i);
QMutableEventPoint::setPosition(point, dest->mapFromScene(point.scenePosition()));
qCDebug(lcPtrLoc) << ev->type() << "@" << point.scenePosition() << "to"
<< dest << "@" << dest->mapToScene(QPointF()) << "->" << point;
}
@ -1401,7 +1401,7 @@ bool QQuickDeliveryAgentPrivate::compressTouchEvent(QTouchEvent *event)
}
if (tpDelayed.state() == QEventPoint::State::Updated && tp.state() == QEventPoint::State::Stationary)
QMutableEventPoint::from(tpts[i]).setState(QEventPoint::State::Updated);
QMutableEventPoint::setState(tpts[i], QEventPoint::State::Updated);
}
// matching touch event? then give delayedTouch a merged set of touchpoints
@ -1680,10 +1680,10 @@ void QQuickDeliveryAgentPrivate::deliverPointerEvent(QPointerEvent *event)
if (sceneTransform) {
originalScenePositions.resize(event->pointCount());
for (int i = 0; i < event->pointCount(); ++i) {
auto &mut = QMutableEventPoint::from(event->point(i));
originalScenePositions[i] = mut.scenePosition();
mut.setScenePosition(sceneTransform->map(mut.scenePosition()));
qCDebug(lcPtrLoc) << q << event->type() << mut.id() << "transformed scene pos" << mut.scenePosition();
auto &pt = event->point(i);
originalScenePositions[i] = pt.scenePosition();
QMutableEventPoint::setScenePosition(pt, sceneTransform->map(pt.scenePosition()));
qCDebug(lcPtrLoc) << q << event->type() << pt.id() << "transformed scene pos" << pt.scenePosition();
}
} else if (isSubsceneAgent) {
qCDebug(lcPtrLoc) << q << event->type() << "no scene transform set";
@ -1715,7 +1715,7 @@ void QQuickDeliveryAgentPrivate::deliverPointerEvent(QPointerEvent *event)
eventsInDelivery.pop();
if (sceneTransform) {
for (int i = 0; i < event->pointCount(); ++i)
QMutableEventPoint::from(event->point(i)).setScenePosition(originalScenePositions.at(i));
QMutableEventPoint::setScenePosition(event->point(i), originalScenePositions.at(i));
}
--pointerEventRecursionGuard;
lastUngrabbed = nullptr;

View File

@ -94,9 +94,9 @@ protected:
originalScenePositions[pointIndex] = pe->point(pointIndex).scenePosition();
for (int pointIndex = 0; pointIndex < pe->pointCount(); ++pointIndex) {
QMutableEventPoint &mut = QMutableEventPoint::from(pe->point(pointIndex));
mut.setScenePosition(vxh->map(mut.scenePosition()));
mut.setPosition(mut.position());
QEventPoint &p = pe->point(pointIndex);
QMutableEventPoint::setScenePosition(p, vxh->map(p.scenePosition()));
QMutableEventPoint::setPosition(p, p.position());
}
qCDebug(lcTests) << "forwarding to subscene DA" << pe;
@ -108,7 +108,7 @@ protected:
// restore original scene positions
for (int pointIndex = 0; pointIndex < pe->pointCount(); ++pointIndex)
QMutableEventPoint::from(pe->point(pointIndex)).setScenePosition(originalScenePositions.at(pointIndex));
QMutableEventPoint::setScenePosition(pe->point(pointIndex), originalScenePositions.at(pointIndex));
pe->setAccepted(false); // reject implicit grab and let it keep propagating
qCDebug(lcTests) << e << "returning" << ret;

View File

@ -87,7 +87,7 @@ static TouchEventData makeTouchData(QEvent::Type type, QWindow *w, QEventPoint::
{
TouchEventData d = { type, nullptr, w, states, touchPoints };
for (auto &pt : d.touchPoints)
QMutableEventPoint::from(pt).detach();
QMutableEventPoint::detach(pt);
return d;
}
static TouchEventData makeTouchData(QEvent::Type type, QWindow *w, QEventPoint::States states,