diff options
author | Oliver Wolff <oliver.wolff@qt.io> | 2018-09-13 15:18:04 +0200 |
---|---|---|
committer | Oliver Wolff <oliver.wolff@qt.io> | 2018-09-26 05:41:07 +0000 |
commit | 7b00eab5933cb46061dd15334edd3a083fe446cc (patch) | |
tree | 1b0f17f12d5fd16a0bd98e74d1a7d60cf6582c4c /src/plugins/platforms | |
parent | fdcbf0b2a2684b3b8e35402287a607aaae5fa086 (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.cpp | 13 |
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; |