diff options
author | Johan Klokkhammer Helsing <johan.helsing@qt.io> | 2016-04-27 17:14:18 +0200 |
---|---|---|
committer | Johan Helsing <johan.helsing@qt.io> | 2016-04-29 14:50:15 +0000 |
commit | 0f1a02920eb58dd16b085e60a2b36d822f104437 (patch) | |
tree | 27a8064c65d880fecf6ef92bc48a31c9661e7c5d /src/compositor/compositor_api/qwaylandquickitem.cpp | |
parent | 0a85fba9fa9302deb364e2a0c7a3ab2c941ca562 (diff) |
QML compositor: Adjust for scale factor when handling mouse events
Problem: We expose a scaleFactor property on QWaylandOutput, but it's
not taken into account when handling mouse events. Resulting in wrong
position for clicks, incorrect resizing etc.
Solution: Divide by scale factor where appropriate.
Change-Id: I21f54b7d2d212a320098fea5c9ae9751e79a0141
Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
Diffstat (limited to 'src/compositor/compositor_api/qwaylandquickitem.cpp')
-rw-r--r-- | src/compositor/compositor_api/qwaylandquickitem.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/compositor/compositor_api/qwaylandquickitem.cpp b/src/compositor/compositor_api/qwaylandquickitem.cpp index d6879dc07..e6844f4c8 100644 --- a/src/compositor/compositor_api/qwaylandquickitem.cpp +++ b/src/compositor/compositor_api/qwaylandquickitem.cpp @@ -283,7 +283,7 @@ void QWaylandQuickItem::mousePressEvent(QMouseEvent *event) if (d->focusOnClick) takeFocus(inputDevice); - inputDevice->sendMouseMoveEvent(d->view.data(), event->localPos(), event->windowPos()); + inputDevice->sendMouseMoveEvent(d->view.data(), event->localPos() / d->scaleFactor(), event->windowPos()); inputDevice->sendMousePressEvent(event->button()); } @@ -295,7 +295,7 @@ void QWaylandQuickItem::mouseMoveEvent(QMouseEvent *event) Q_D(QWaylandQuickItem); if (d->shouldSendInputEvents()) { QWaylandInputDevice *inputDevice = compositor()->inputDeviceFor(event); - inputDevice->sendMouseMoveEvent(d->view.data(), event->localPos(), event->windowPos()); + inputDevice->sendMouseMoveEvent(d->view.data(), event->localPos() / d->scaleFactor(), event->windowPos()); } else { emit mouseMove(event->windowPos()); event->ignore(); @@ -349,7 +349,7 @@ void QWaylandQuickItem::hoverMoveEvent(QHoverEvent *event) } if (d->shouldSendInputEvents()) { QWaylandInputDevice *inputDevice = compositor()->inputDeviceFor(event); - inputDevice->sendMouseMoveEvent(d->view.data(), event->pos(), mapToScene(event->pos())); + inputDevice->sendMouseMoveEvent(d->view.data(), event->pos() / d->scaleFactor(), mapToScene(event->pos())); } else { event->ignore(); } @@ -683,8 +683,9 @@ void QWaylandQuickItem::setFocusOnClick(bool focus) */ bool QWaylandQuickItem::inputRegionContains(const QPointF &localPosition) { + Q_D(QWaylandQuickItem); if (QWaylandSurface *s = surface()) - return s->inputRegionContains(localPosition.toPoint()); + return s->inputRegionContains(localPosition.toPoint() / d->scaleFactor()); return false; } |