Use new angleDelta() rather than deprecated event data.
Change-Id: I28d0a1ff1bc99b35e1ce3d553e5cb9bdc9362f4c
Reviewed-by: Martin Jones <martin.jones@nokia.com>
, clearBeforeRendering(true)
, persistentGLContext(false)
, persistentSceneGraph(false)
+ , lastWheelEventAccepted(false)
, renderTarget(0)
, renderTargetId(0)
, incubationController(0)
{
Q_D(QQuickCanvas);
#ifdef MOUSE_DEBUG
- qWarning() << "QQuickCanvas::wheelEvent()" << event->pos() << event->delta() << event->orientation();
+ qWarning() << "QQuickCanvas::wheelEvent()" << event->pos() << event->pixelDelta() << event->angleDelta();
#endif
+
+ //if the actual wheel event was accepted, accept the compatability wheel event and return early
+ if (d->lastWheelEventAccepted && event->angleDelta().isNull())
+ return;
+
event->ignore();
d->deliverWheelEvent(d->rootItem, event);
+ d->lastWheelEventAccepted = event->isAccepted();
}
#endif // QT_NO_WHEELEVENT
uint persistentGLContext : 1;
uint persistentSceneGraph : 1;
+ uint lastWheelEventAccepted : 1;
+
QOpenGLFramebufferObject *renderTarget;
uint renderTargetId;
QSize renderTargetSize;
Q_D(QQuickFlickable);
if (!d->interactive) {
QQuickItem::wheelEvent(event);
- } else if (yflick() && event->orientation() == Qt::Vertical) {
+ return;
+ }
+
+ int yDelta = event->angleDelta().y();
+ int xDelta = event->angleDelta().x();
+ if (yflick() && yDelta != 0) {
bool valid = false;
- if (event->delta() > 0 && contentY() > -minYExtent()) {
- d->vData.velocity = qMax(event->delta()*2 - d->vData.smoothVelocity.value(), qreal(d->maxVelocity/4));
+ if (yDelta > 0 && contentY() > -minYExtent()) {
+ d->vData.velocity = qMax(yDelta*2 - d->vData.smoothVelocity.value(), qreal(d->maxVelocity/4));
valid = true;
- } else if (event->delta() < 0 && contentY() < -maxYExtent()) {
- d->vData.velocity = qMin(event->delta()*2 - d->vData.smoothVelocity.value(), qreal(-d->maxVelocity/4));
+ } else if (yDelta < 0 && contentY() < -maxYExtent()) {
+ d->vData.velocity = qMin(yDelta*2 - d->vData.smoothVelocity.value(), qreal(-d->maxVelocity/4));
valid = true;
}
if (valid) {
}
event->accept();
}
- } else if (xflick() && event->orientation() == Qt::Horizontal) {
+ }
+ if (xflick() && xDelta != 0) {
bool valid = false;
- if (event->delta() > 0 && contentX() > -minXExtent()) {
- d->hData.velocity = qMax(event->delta()*2 - d->hData.smoothVelocity.value(), qreal(d->maxVelocity/4));
+ if (xDelta > 0 && contentX() > -minXExtent()) {
+ d->hData.velocity = qMax(xDelta*2 - d->hData.smoothVelocity.value(), qreal(d->maxVelocity/4));
valid = true;
- } else if (event->delta() < 0 && contentX() < -maxXExtent()) {
- d->hData.velocity = qMin(event->delta()*2 - d->hData.smoothVelocity.value(), qreal(-d->maxVelocity/4));
+ } else if (xDelta < 0 && contentX() < -maxXExtent()) {
+ d->hData.velocity = qMin(xDelta*2 - d->hData.smoothVelocity.value(), qreal(-d->maxVelocity/4));
valid = true;
}
if (valid) {
}
event->accept();
}
- } else {
- QQuickItem::wheelEvent(event);
}
+
+ if (!event->isAccepted())
+ QQuickItem::wheelEvent(event);
}
bool QQuickFlickablePrivate::isOutermostPressDelay() const
QVERIFY(flick != 0);
{
- QWheelEvent event(QPoint(200, 200), -120, Qt::NoButton, Qt::NoModifier, Qt::Vertical);
+ QPoint pos(200, 200);
+ QWheelEvent event(pos, canvas->mapToGlobal(pos), QPoint(), QPoint(0,-120), -120, Qt::Vertical, Qt::NoButton, Qt::NoModifier);
event.setAccepted(false);
QGuiApplication::sendEvent(canvas, &event);
}
QVERIFY(flick->contentY() == 0);
{
- QWheelEvent event(QPoint(200, 200), -120, Qt::NoButton, Qt::NoModifier, Qt::Horizontal);
+ QPoint pos(200, 200);
+ QWheelEvent event(pos, canvas->mapToGlobal(pos), QPoint(), QPoint(-120,0), -120, Qt::Horizontal, Qt::NoButton, Qt::NoModifier);
+
event.setAccepted(false);
QGuiApplication::sendEvent(canvas, &event);
}