377void QQuickWheelHandler::handleEventPoint(QPointerEvent *ev, QEventPoint &point)
379 Q_D(QQuickWheelHandler);
380 QQuickSinglePointHandler::handleEventPoint(ev, point);
382 if (ev->type() != QEvent::Wheel)
384 const QWheelEvent *event =
static_cast<
const QWheelEvent *>(ev);
388 qreal inversion = !d->invertible && event->isInverted() ? -1 : 1;
389 qreal angleDelta = inversion * qreal(orientation() == Qt::Horizontal ? event->angleDelta().x() :
390 event->angleDelta().y()) / 8;
391 d->rotation += angleDelta;
392 emit rotationChanged();
394 d->wheelEvent.reset(event);
395 emit wheel(&d->wheelEvent);
396 if (!d->propertyName.isEmpty() && target()) {
397 QQuickItem *t = target();
399 if (d->propertyName == QLatin1String(
"scale")) {
400 qreal multiplier = qPow(d->targetScaleMultiplier, angleDelta * d->rotationScale / 15);
401 const QPointF centroidParentPos = t->parentItem()->mapFromScene(point.scenePosition());
402 const QPointF positionWas = t->position();
403 const qreal scaleWas = t->scale();
404 const qreal activePropertyValue = scaleWas * multiplier;
405 qCDebug(lcWheelHandler) << objectName() <<
"angle delta" << event->angleDelta() <<
"pixel delta" << event->pixelDelta()
406 <<
"@" << point.position() <<
"in parent" << centroidParentPos
407 <<
"in scene" << point.scenePosition()
408 <<
"multiplier" << multiplier <<
"scale" << scaleWas
409 <<
"->" << activePropertyValue;
410 d->targetMetaProperty().write(t, activePropertyValue);
411 if (d->targetTransformAroundCursor) {
413 multiplier = t->scale() / scaleWas;
414 const QPointF adjPos = QQuickItemPrivate::get(t)->adjustedPosForTransform(
415 centroidParentPos, positionWas, QVector2D(), scaleWas, multiplier, t->rotation(), 0);
416 qCDebug(lcWheelHandler) <<
"adjusting item pos" << adjPos <<
"in scene" << t->parentItem()->mapToScene(adjPos);
417 t->setPosition(adjPos);
419 }
else if (d->propertyName == QLatin1String(
"rotation")) {
420 const QPointF positionWas = t->position();
421 const qreal rotationWas = t->rotation();
422 const qreal activePropertyValue = rotationWas + angleDelta * d->rotationScale;
423 const QPointF centroidParentPos = t->parentItem()->mapFromScene(point.scenePosition());
424 qCDebug(lcWheelHandler) << objectName() <<
"angle delta" << event->angleDelta() <<
"pixel delta" << event->pixelDelta()
425 <<
"@" << point.position() <<
"in parent" << centroidParentPos
426 <<
"in scene" << point.scenePosition() <<
"rotation" << t->rotation()
427 <<
"->" << activePropertyValue;
428 d->targetMetaProperty().write(t, activePropertyValue);
429 if (d->targetTransformAroundCursor) {
431 const QPointF adjPos = QQuickItemPrivate::get(t)->adjustedPosForTransform(
432 centroidParentPos, positionWas, QVector2D(),
433 t->scale(), 1, rotationWas, t->rotation() - rotationWas);
434 qCDebug(lcWheelHandler) <<
"adjusting item pos" << adjPos <<
"in scene" << t->parentItem()->mapToScene(adjPos);
435 t->setPosition(adjPos);
438 qCDebug(lcWheelHandler) << objectName() <<
"angle delta" << event->angleDelta() <<
"scaled" << angleDelta
439 <<
"total" << d->rotation <<
"pixel delta" << event->pixelDelta()
440 <<
"@" << point.position() <<
"in scene" << point.scenePosition() <<
"rotation" << t->rotation();
442 if (event->hasPixelDelta()) {
443 delta = inversion * d->rotationScale * qreal(orientation() == Qt::Horizontal ? event->pixelDelta().x() : event->pixelDelta().y());
444 qCDebug(lcWheelHandler) <<
"changing target" << d->propertyName <<
"by pixel delta" << delta <<
"from" << event;
446 delta = angleDelta * d->rotationScale;
447 qCDebug(lcWheelHandler) <<
"changing target" << d->propertyName <<
"by scaled angle delta" << delta <<
"from" << event;
450 qreal value = d->targetMetaProperty().read(t).toReal(&ok);
452 d->targetMetaProperty().write(t, value + qreal(delta));
454 qWarning() <<
"failed to read property" << d->propertyName <<
"of" << t;
457 switch (event->phase()) {
459 qCDebug(lcWheelHandler) << objectName() <<
"deactivating due to ScrollEnd phase";
462 case Qt::NoScrollPhase:
463 d->deactivationTimer.start(qRound(d->activeTimeout * 1000),
this);
465 case Qt::ScrollBegin:
466 case Qt::ScrollUpdate:
467 case Qt::ScrollMomentum: