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