From 25eb08722fb367f1abc421d57717cad0bcaa52c8 Mon Sep 17 00:00:00 2001 From: rankun Date: Tue, 13 Nov 2018 13:05:49 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BC=A0=E6=A0=87=E7=A7=BB=E5=8A=A8=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/inputcontrol/inputconvertgame.cpp | 29 +++++++++++++++------------ src/inputcontrol/inputconvertgame.h | 4 +++- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/inputcontrol/inputconvertgame.cpp b/src/inputcontrol/inputconvertgame.cpp index f8b3587..1b9516e 100644 --- a/src/inputcontrol/inputconvertgame.cpp +++ b/src/inputcontrol/inputconvertgame.cpp @@ -317,7 +317,7 @@ bool InputConvertGame::processMouseMove(const QMouseEvent *from) return false; } - mouseMoveStartTouch(); + mouseMoveStartTouch(from); startMouseMoveTimer(); // move @@ -327,23 +327,25 @@ bool InputConvertGame::processMouseMove(const QMouseEvent *from) pos.setX(pos.x() / m_showSize.width()); pos.setY(pos.y() / m_showSize.height()); sendTouchMoveEvent(getTouchID(Qt::ExtraButton24), pos); - + m_mouseMoveLastPos = pos; if (pos.x() < 0.1 || pos.x() > 0.9 || pos.y() < 0.1 || pos.y() > 0.9) { mouseMoveStopTouch(); - - QPoint localPos = QPoint(m_showSize.width()*m_mouseMoveStartPos.x(), m_showSize.height()*m_mouseMoveStartPos.y()); - QPoint posOffset = from->localPos().toPoint() - localPos; - QPoint globalPos = from->globalPos(); - - globalPos += posOffset; - QCursor::setPos(globalPos); - - mouseMoveStartTouch(); + mouseMoveStartTouch(from); } return true; } +void InputConvertGame::moveCursorToStart(const QMouseEvent *from) +{ + QPoint localPos = QPoint(m_showSize.width()*m_mouseMoveStartPos.x(), m_showSize.height()*m_mouseMoveStartPos.y()); + QPoint posOffset = from->localPos().toPoint() - localPos; + QPoint globalPos = from->globalPos(); + + globalPos -= posOffset; + QCursor::setPos(globalPos); +} + void InputConvertGame::startMouseMoveTimer() { stopMouseMoveTimer(); @@ -358,9 +360,10 @@ void InputConvertGame::stopMouseMoveTimer() } } -void InputConvertGame::mouseMoveStartTouch() +void InputConvertGame::mouseMoveStartTouch(const QMouseEvent* from) { if (!m_mouseMovePress) { + moveCursorToStart(from); int id = attachTouchID(Qt::ExtraButton24); sendTouchDownEvent(id, m_mouseMoveStartPos); m_mouseMovePress = true; @@ -370,7 +373,7 @@ void InputConvertGame::mouseMoveStartTouch() void InputConvertGame::mouseMoveStopTouch() { if (m_mouseMovePress) { - sendTouchUpEvent(getTouchID(Qt::ExtraButton24), m_mouseMoveStartPos); + sendTouchUpEvent(getTouchID(Qt::ExtraButton24), m_mouseMoveLastPos); detachTouchID(Qt::ExtraButton24); m_mouseMovePress = false; } diff --git a/src/inputcontrol/inputconvertgame.h b/src/inputcontrol/inputconvertgame.h index 76f4533..d245f71 100644 --- a/src/inputcontrol/inputconvertgame.h +++ b/src/inputcontrol/inputconvertgame.h @@ -41,9 +41,10 @@ protected: // mouse bool processMouseClick(const QMouseEvent* from); bool processMouseMove(const QMouseEvent* from); + void moveCursorToStart(const QMouseEvent* from); void startMouseMoveTimer(); void stopMouseMoveTimer(); - void mouseMoveStartTouch(); + void mouseMoveStartTouch(const QMouseEvent* from); void mouseMoveStopTouch(); protected: @@ -73,6 +74,7 @@ private: // mouse move QPointF m_mouseMoveStartPos = {0.57f, 0.26f}; + QPointF m_mouseMoveLastPos; bool m_mouseMovePress = false; int m_mouseMoveTimer = 0; };