mirror of
https://github.com/barry-ran/QtScrcpy.git
synced 2025-08-03 06:08:39 +00:00
feat: add drag delay
This commit is contained in:
parent
29c03c2285
commit
1373b0b84f
2 changed files with 63 additions and 6 deletions
|
@ -422,18 +422,65 @@ void InputConvertGame::processKeyClickMulti(const KeyMap::DelayClickNode *nodes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InputConvertGame::onDragTimer() {
|
||||||
|
if(m_dragDelayData.queuePos.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int id = getTouchID(m_dragDelayData.pressKey);
|
||||||
|
m_dragDelayData.currentPos = m_dragDelayData.queuePos.dequeue();
|
||||||
|
sendTouchMoveEvent(id, m_dragDelayData.currentPos);
|
||||||
|
|
||||||
|
if(m_dragDelayData.queuePos.empty()) {
|
||||||
|
delete m_dragDelayData.timer;
|
||||||
|
m_dragDelayData.timer = nullptr;
|
||||||
|
|
||||||
|
sendTouchUpEvent(id, m_dragDelayData.currentPos);
|
||||||
|
detachTouchID(m_dragDelayData.pressKey);
|
||||||
|
|
||||||
|
m_dragDelayData.currentPos = QPointF();
|
||||||
|
m_dragDelayData.pressKey = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!m_dragDelayData.queuePos.empty()) {
|
||||||
|
m_dragDelayData.timer->start(m_dragDelayData.queueTimer.dequeue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void InputConvertGame::processKeyDrag(const QPointF &startPos, QPointF endPos, const QKeyEvent *from)
|
void InputConvertGame::processKeyDrag(const QPointF &startPos, QPointF endPos, const QKeyEvent *from)
|
||||||
{
|
{
|
||||||
if (QEvent::KeyPress == from->type()) {
|
if (QEvent::KeyPress == from->type()) {
|
||||||
|
// stop last
|
||||||
|
if (m_dragDelayData.timer && m_dragDelayData.timer->isActive()) {
|
||||||
|
m_dragDelayData.timer->stop();
|
||||||
|
delete m_dragDelayData.timer;
|
||||||
|
m_dragDelayData.timer = nullptr;
|
||||||
|
m_dragDelayData.queuePos.clear();
|
||||||
|
m_dragDelayData.queueTimer.clear();
|
||||||
|
|
||||||
|
sendTouchUpEvent(getTouchID(m_dragDelayData.pressKey), m_dragDelayData.currentPos);
|
||||||
|
detachTouchID(m_dragDelayData.pressKey);
|
||||||
|
|
||||||
|
m_dragDelayData.currentPos = QPointF();
|
||||||
|
m_dragDelayData.pressKey = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// start this
|
||||||
int id = attachTouchID(from->key());
|
int id = attachTouchID(from->key());
|
||||||
sendTouchDownEvent(id, startPos);
|
sendTouchDownEvent(id, startPos);
|
||||||
sendTouchMoveEvent(id, endPos);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (QEvent::KeyRelease == from->type()) {
|
m_dragDelayData.timer = new QTimer(this);
|
||||||
int id = getTouchID(from->key());
|
m_dragDelayData.timer->setSingleShot(true);
|
||||||
sendTouchUpEvent(id, endPos);
|
connect(m_dragDelayData.timer, &QTimer::timeout, this, &InputConvertGame::onDragTimer);
|
||||||
detachTouchID(from->key());
|
m_dragDelayData.pressKey = from->key();
|
||||||
|
m_dragDelayData.currentPos = startPos;
|
||||||
|
m_dragDelayData.queuePos.clear();
|
||||||
|
m_dragDelayData.queueTimer.clear();
|
||||||
|
getDelayQueue(startPos, endPos,
|
||||||
|
0.01f, 0.002f, 2.0f,
|
||||||
|
m_dragDelayData.queuePos,
|
||||||
|
m_dragDelayData.queueTimer);
|
||||||
|
m_dragDelayData.timer->start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,7 @@ protected:
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onSteerWheelTimer();
|
void onSteerWheelTimer();
|
||||||
|
void onDragTimer();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QSize m_frameSize;
|
QSize m_frameSize;
|
||||||
|
@ -110,6 +111,15 @@ private:
|
||||||
int timer = 0;
|
int timer = 0;
|
||||||
bool smallEyes = false;
|
bool smallEyes = false;
|
||||||
} m_ctrlMouseMove;
|
} m_ctrlMouseMove;
|
||||||
|
|
||||||
|
// for drag delay
|
||||||
|
struct {
|
||||||
|
QPointF currentPos;
|
||||||
|
QTimer* timer = nullptr;
|
||||||
|
QQueue<QPointF> queuePos;
|
||||||
|
QQueue<double> queueTimer;
|
||||||
|
int pressKey = 0;
|
||||||
|
} m_dragDelayData;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // INPUTCONVERTGAME_H
|
#endif // INPUTCONVERTGAME_H
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue