summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms
diff options
context:
space:
mode:
authorOliver Wolff <oliver.wolff@qt.io>2018-09-13 15:18:04 +0200
committerOliver Wolff <oliver.wolff@qt.io>2018-09-26 05:41:07 +0000
commit7b00eab5933cb46061dd15334edd3a083fe446cc (patch)
tree1b0f17f12d5fd16a0bd98e74d1a7d60cf6582c4c /src/plugins/platforms
parentfdcbf0b2a2684b3b8e35402287a607aaae5fa086 (diff)
qwinrtcursor: Use QPointF as much as possible in pos/setPos
Using QPoint for calculations can lead to rounding errors which can result in a situation where "QCursor::setPos(somePos); QCOMPARE(pos, somePos)" fails. Change-Id: Iaba499f67abcf5ec66adfe93bfbd79ef0102e6d0 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r--src/plugins/platforms/winrt/qwinrtcursor.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/plugins/platforms/winrt/qwinrtcursor.cpp b/src/plugins/platforms/winrt/qwinrtcursor.cpp
index b73cd3f759..180905945b 100644
--- a/src/plugins/platforms/winrt/qwinrtcursor.cpp
+++ b/src/plugins/platforms/winrt/qwinrtcursor.cpp
@@ -179,14 +179,15 @@ QPoint QWinRTCursor::pos() const
return hr;
});
Q_ASSERT_SUCCEEDED(hr);
- QPoint position = QPoint(int(point.X), int(point.Y));
+ QPointF position(qreal(point.X), qreal(point.Y));
// If no cursor get_PointerPosition returns SHRT_MIN for x and y
- if ((position.x() == SHRT_MIN && position.y() == SHRT_MIN) || FAILED(hr))
+ if ((int(position.x()) == SHRT_MIN && int(position.y()) == SHRT_MIN)
+ || FAILED(hr))
return QPointF(Q_INFINITY, Q_INFINITY).toPoint();
- position.rx() -= bounds.X;
- position.ry() -= bounds.Y;
+ position.rx() -= qreal(bounds.X);
+ position.ry() -= qreal(bounds.Y);
position *= screen->scaleFactor();
- return position;
+ return position.toPoint();
}
void QWinRTCursor::setPos(const QPoint &pos)
@@ -195,7 +196,7 @@ void QWinRTCursor::setPos(const QPoint &pos)
Q_ASSERT(screen);
ComPtr<ICoreWindow> coreWindow = screen->coreWindow();
Q_ASSERT(coreWindow);
- const QPointF scaledPos = pos / screen->scaleFactor();
+ const QPointF scaledPos = QPointF(pos) / screen->scaleFactor();
QWinRTScreen::MousePositionTransition t;
HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([coreWindow, scaledPos, &t]() {
ComPtr<ICoreWindow2> coreWindow2;