diff --git a/QtScrcpy/device/controller/controller.cpp b/QtScrcpy/device/controller/controller.cpp index 992b5bd..aee1ab4 100644 --- a/QtScrcpy/device/controller/controller.cpp +++ b/QtScrcpy/device/controller/controller.cpp @@ -7,12 +7,12 @@ #include "receiver.h" #include "inputconvertgame.h" -Controller::Controller(bool supportGame, QObject* parent) : QObject(parent) +Controller::Controller(QString gameScript, QObject* parent) : QObject(parent) { m_receiver = new Receiver(this); Q_ASSERT(m_receiver); - if (supportGame) { + if (!gameScript.isEmpty()) { m_inputConvert = new InputConvertGame(this); } else { m_inputConvert = new InputConvertNormal(this); diff --git a/QtScrcpy/device/controller/controller.h b/QtScrcpy/device/controller/controller.h index 9f6b962..6380b1e 100644 --- a/QtScrcpy/device/controller/controller.h +++ b/QtScrcpy/device/controller/controller.h @@ -13,7 +13,7 @@ class Controller : public QObject { Q_OBJECT public: - Controller(bool supportGame = false, QObject* parent = Q_NULLPTR); + Controller(QString gameScript = "", QObject* parent = Q_NULLPTR); virtual ~Controller(); void setControlSocket(QTcpSocket* controlSocket); diff --git a/QtScrcpy/device/controller/inputconvert/inputconvertgame.cpp b/QtScrcpy/device/controller/inputconvert/inputconvertgame.cpp index 78a59bc..aa5f329 100644 --- a/QtScrcpy/device/controller/inputconvert/inputconvertgame.cpp +++ b/QtScrcpy/device/controller/inputconvert/inputconvertgame.cpp @@ -9,10 +9,7 @@ InputConvertGame::InputConvertGame(Controller* controller) : InputConvertNormal(controller) { - m_keyMap.loadKeyMap(""); - if (m_keyMap.enableMouseMoveMap()) { - m_mouseMoveLastConverPos = m_keyMap.getMouseMoveMap().startPos; - } + } InputConvertGame::~InputConvertGame() @@ -102,6 +99,14 @@ void InputConvertGame::keyEvent(const QKeyEvent *from, const QSize& frameSize, c } } +void InputConvertGame::loadKeyMap(const QString &json) +{ + m_keyMap.loadKeyMap(json); + if (m_keyMap.enableMouseMoveMap()) { + m_mouseMoveLastConverPos = m_keyMap.getMouseMoveMap().startPos; + } +} + void InputConvertGame::updateSize(const QSize &frameSize, const QSize &showSize) { m_frameSize = frameSize; diff --git a/QtScrcpy/device/controller/inputconvert/inputconvertgame.h b/QtScrcpy/device/controller/inputconvert/inputconvertgame.h index 0fc1c6d..0869d05 100644 --- a/QtScrcpy/device/controller/inputconvert/inputconvertgame.h +++ b/QtScrcpy/device/controller/inputconvert/inputconvertgame.h @@ -18,6 +18,8 @@ public: virtual void wheelEvent(const QWheelEvent* from, const QSize& frameSize, const QSize& showSize); virtual void keyEvent(const QKeyEvent* from, const QSize& frameSize, const QSize& showSize); + void loadKeyMap(const QString& json); + protected: void updateSize(const QSize& frameSize, const QSize& showSize); void sendTouchDownEvent(int id, QPointF pos); diff --git a/QtScrcpy/device/controller/inputconvert/keymap/keymap.cpp b/QtScrcpy/device/controller/inputconvert/keymap/keymap.cpp index 678cb96..fd7f482 100644 --- a/QtScrcpy/device/controller/inputconvert/keymap/keymap.cpp +++ b/QtScrcpy/device/controller/inputconvert/keymap/keymap.cpp @@ -46,17 +46,6 @@ void KeyMap::loadKeyMap(const QString &json) QMetaEnum metaEnumMouseButtons = QMetaEnum::fromType(); QMetaEnum metaEnumKeyMapType = QMetaEnum::fromType(); - QFile loadFile(getKeyMapPath() + "/gameforpeace.json"); - if(!loadFile.open(QIODevice::ReadOnly)) - { - errorString = "json error: open file failed"; - goto parseError; - } - - allData = loadFile.readAll(); - loadFile.close(); - - jsonDoc = QJsonDocument::fromJson(allData, &jsonError); if(jsonError.error != QJsonParseError::NoError) diff --git a/QtScrcpy/device/controller/inputconvert/keymap/keymap.h b/QtScrcpy/device/controller/inputconvert/keymap/keymap.h index fdc7181..da01d44 100644 --- a/QtScrcpy/device/controller/inputconvert/keymap/keymap.h +++ b/QtScrcpy/device/controller/inputconvert/keymap/keymap.h @@ -79,8 +79,7 @@ public: MouseMoveMap getMouseMoveMap(); bool enableMouseMoveMap(); -protected: - const QString& getKeyMapPath(); + static const QString& getKeyMapPath(); private: QVector m_keyMapNodes; diff --git a/QtScrcpy/device/device.cpp b/QtScrcpy/device/device.cpp index 20283fe..87ffe34 100644 --- a/QtScrcpy/device/device.cpp +++ b/QtScrcpy/device/device.cpp @@ -26,7 +26,7 @@ Device::Device(DeviceParams params, QObject *parent) m_vb->init(); m_decoder = new Decoder(m_vb, this); m_fileHandler = new FileHandler(this); - m_controller = new Controller(params.supportGame, this); + m_controller = new Controller(params.gameScript, this); m_videoForm = new VideoForm(); m_videoForm->setSerial(m_params.serial); if (m_controller) { diff --git a/QtScrcpy/device/device.h b/QtScrcpy/device/device.h index 1a0731f..4fff0d0 100644 --- a/QtScrcpy/device/device.h +++ b/QtScrcpy/device/device.h @@ -25,7 +25,7 @@ public: bool closeScreen = false; // 启动时自动息屏 bool useReverse = true; // true:先使用adb reverse,失败后自动使用adb forward;false:直接使用adb forward bool display = true; // 是否显示画面(或者仅仅后台录制) - bool supportGame = false; // 是否支持游戏映射 + QString gameScript = ""; // 游戏映射脚本 }; explicit Device(DeviceParams params, QObject *parent = nullptr); virtual ~Device(); diff --git a/QtScrcpy/dialog.cpp b/QtScrcpy/dialog.cpp index 2c53559..b8ae97b 100644 --- a/QtScrcpy/dialog.cpp +++ b/QtScrcpy/dialog.cpp @@ -8,6 +8,7 @@ #include "ui_dialog.h" #include "device.h" #include "videoform.h" +#include "keymap.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), @@ -89,7 +90,7 @@ void Dialog::initUI() #ifndef Q_OS_WIN32 // game only windows - ui->gameForPeaceCheck->setEnabled(false); + ui->gameCheck->setEnabled(false); #endif } @@ -103,6 +104,20 @@ void Dialog::execAdbCmd() m_adb.execute("", cmd.split(" ", QString::SkipEmptyParts)); } +QString Dialog::getGameScript(const QString& fileName) +{ + QFile loadFile(KeyMap::getKeyMapPath() + "/" + fileName); + if(!loadFile.open(QIODevice::ReadOnly)) + { + outLog("open file failed:" + fileName, true); + return ""; + } + + QString ret = loadFile.readAll(); + loadFile.close(); + return ret; +} + void Dialog::on_updateDevice_clicked() { if (checkAdbRun()) { @@ -138,7 +153,13 @@ void Dialog::on_startServerBtn_clicked() params.closeScreen = ui->closeScreenCheck->isChecked(); params.useReverse = ui->useReverseCheck->isChecked(); params.display = !ui->notDisplayCheck->isChecked(); - params.supportGame = ui->gameForPeaceCheck->isChecked(); + if (ui->gameCheck->isChecked()) { + if (ui->gameBox->currentText().isEmpty()) { + outLog("no keymap script selected", true); + } else { + params.gameScript = getGameScript(ui->gameBox->currentText()); + } + } m_deviceManage.connectDevice(params); /* @@ -284,3 +305,28 @@ void Dialog::on_stopAllServerBtn_clicked() { m_deviceManage.disconnectAllDevice(); } + +void Dialog::on_updateGameScriptBtn_clicked() +{ + ui->gameBox->clear(); + QDir dir(KeyMap::getKeyMapPath()); + if (!dir.exists()) { + outLog("keymap directory not find", true); + return; + } + dir.setFilter(QDir::Files | QDir::NoSymLinks); + QFileInfoList list = dir.entryInfoList(); + QFileInfo fileInfo; + int size = list.size(); + for (int i = 0; i < size; ++i) { + fileInfo = list.at(i); + ui->gameBox->addItem(fileInfo.fileName()); + } +} + +void Dialog::on_gameCheck_clicked(bool checked) +{ + if (checked) { + on_updateGameScriptBtn_clicked(); + } +} diff --git a/QtScrcpy/dialog.h b/QtScrcpy/dialog.h index 536223c..23a471b 100644 --- a/QtScrcpy/dialog.h +++ b/QtScrcpy/dialog.h @@ -49,10 +49,14 @@ private slots: void on_stopAllServerBtn_clicked(); + void on_updateGameScriptBtn_clicked(); + void on_gameCheck_clicked(bool checked); + private: bool checkAdbRun(); void initUI(); void execAdbCmd(); + QString getGameScript(const QString& fileName); private: Ui::Dialog *ui; diff --git a/QtScrcpy/dialog.ui b/QtScrcpy/dialog.ui index f794425..c767e19 100644 --- a/QtScrcpy/dialog.ui +++ b/QtScrcpy/dialog.ui @@ -6,8 +6,8 @@ 0 0 - 533 - 608 + 600 + 637 @@ -21,214 +21,6 @@ - - - Wireless - - - - - - - 5 - 0 - - - - - 5 - 16777215 - - - - : - - - - - - - - - - 5555 - - - - - - - - - - 192.168.0.1 - - - - - - - wireless connect - - - false - - - - - - - wireless disconnect - - - false - - - - - - - - - - - 0 - 240 - - - - Qt::ClickFocus - - - - - - true - - - - - - - Start Config - - - - - - use reverse - - - true - - - - - - - - - - - - - - select path - - - false - - - - - - - record format: - - - - - - - video size: - - - - - - - - - - close screen - - - - - - - bit rate: - - - - - - - record save path: - - - recordPathEdt - - - - - - - - - - - - - - - - - true - - - - - - - Game for Peace - - - - - - - always top - - - false - - - - - - - not display - - - false - - - - - - - USB line @@ -305,6 +97,93 @@ + + + Wireless + + + + + + + 5 + 0 + + + + + 5 + 16777215 + + + + : + + + + + + + + + + 5555 + + + + + + + + + + 192.168.0.1 + + + + + + + wireless connect + + + false + + + + + + + wireless disconnect + + + false + + + + + + + + + + + 0 + 240 + + + + Qt::ClickFocus + + + + + + true + + + + adb @@ -351,6 +230,150 @@ + + + + Start Config + + + + + + bit rate: + + + + + + + not display + + + false + + + + + + + + + + + + + + + + + always top + + + false + + + + + + + use reverse + + + true + + + + + + + + + + record save path: + + + recordPathEdt + + + + + + + video size: + + + + + + + close screen + + + + + + + true + + + + + + + + + + + + + + select path + + + false + + + + + + + record format: + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + update script + + + + + + + Game for Peace + + + + + + @@ -364,8 +387,6 @@ wirelessDisConnectBtn adbCommandEdt adbCommandBtn - bitRateBox - videoSizeBox formatBox recordPathEdt selectRecordPathBtn