diff --git a/QtScrcpy/QtScrcpy.pro b/QtScrcpy/QtScrcpy.pro index db01ddf..39b697c 100644 --- a/QtScrcpy/QtScrcpy.pro +++ b/QtScrcpy/QtScrcpy.pro @@ -94,8 +94,7 @@ win32 { -L$$PWD/../third_party/ffmpeg/lib -lavformat \ -L$$PWD/../third_party/ffmpeg/lib -lavcodec \ -L$$PWD/../third_party/ffmpeg/lib -lavutil \ - -L$$PWD/../third_party/ffmpeg/lib -lswscale \ - -lUser32 + -L$$PWD/../third_party/ffmpeg/lib -lswscale # windows rc file RC_FILE = $$PWD/res/QtScrcpy.rc diff --git a/QtScrcpy/main.cpp b/QtScrcpy/main.cpp index 5f780d7..e0628d6 100644 --- a/QtScrcpy/main.cpp +++ b/QtScrcpy/main.cpp @@ -6,9 +6,7 @@ #include "dialog.h" #include "decoder.h" -#ifdef Q_OS_OSX -#include "cocoamousetap.h" -#endif +#include "mousetap/mousetap.h" Dialog* g_mainDlg = Q_NULLPTR; @@ -28,9 +26,7 @@ int main(int argc, char *argv[]) installTranslator(); -#ifdef Q_OS_OSX - CocoaMouseTap::getInstance()->initMouseEventTap(); -#endif + MouseTap::getInstance()->initMouseEventTap(); #ifdef Q_OS_WIN32 qputenv("QTSCRCPY_ADB_PATH", "../../../third_party/adb/win/adb.exe"); @@ -57,9 +53,7 @@ int main(int argc, char *argv[]) int ret = a.exec(); -#ifdef Q_OS_OSX - CocoaMouseTap::getInstance()->quitMouseEventTap(); -#endif + MouseTap::getInstance()->quitMouseEventTap(); Decoder::deInit(); return ret; } diff --git a/QtScrcpy/util/.DS_Store b/QtScrcpy/util/.DS_Store deleted file mode 100644 index 5008ddf..0000000 Binary files a/QtScrcpy/util/.DS_Store and /dev/null differ diff --git a/QtScrcpy/util/cocoamousetap.h b/QtScrcpy/util/mousetap/cocoamousetap.h similarity index 58% rename from QtScrcpy/util/cocoamousetap.h rename to QtScrcpy/util/mousetap/cocoamousetap.h index da92cb9..2346a2e 100644 --- a/QtScrcpy/util/cocoamousetap.h +++ b/QtScrcpy/util/mousetap/cocoamousetap.h @@ -3,19 +3,20 @@ #include #include +#include "mousetap.h" + struct MouseEventTapData; class QWidget; -class CocoaMouseTap : public QThread +class CocoaMouseTap : public MouseTap, public QThread { private: CocoaMouseTap(QObject *parent = Q_NULLPTR); - ~CocoaMouseTap(); + virtual ~CocoaMouseTap(); public: - static CocoaMouseTap* getInstance(); - void initMouseEventTap(); - void quitMouseEventTap(); - void enableMouseEventTap(QWidget* widget, bool enabled); + void initMouseEventTap() override; + void quitMouseEventTap() override; + void enableMouseEventTap(QWidget* widget, bool enabled) override; protected: void run() override; @@ -23,7 +24,6 @@ protected: private: MouseEventTapData *m_tapData = Q_NULLPTR; QSemaphore m_runloopStartedSemaphore; - static CocoaMouseTap *s_instance; }; #endif // COCOAMOUSETAP_H diff --git a/QtScrcpy/util/cocoamousetap.mm b/QtScrcpy/util/mousetap/cocoamousetap.mm similarity index 97% rename from QtScrcpy/util/cocoamousetap.mm rename to QtScrcpy/util/mousetap/cocoamousetap.mm index 3d4d5f8..fdcd129 100644 --- a/QtScrcpy/util/cocoamousetap.mm +++ b/QtScrcpy/util/mousetap/cocoamousetap.mm @@ -111,8 +111,6 @@ static void SemaphorePostCallback(CFRunLoopTimerRef timer, void *info) } } -CocoaMouseTap * CocoaMouseTap::s_instance = Q_NULLPTR; - CocoaMouseTap::CocoaMouseTap(QObject *parent) : QThread(parent) { @@ -127,14 +125,6 @@ CocoaMouseTap::~CocoaMouseTap() } } -CocoaMouseTap *CocoaMouseTap::getInstance() -{ - if (s_instance == Q_NULLPTR) { - s_instance = new CocoaMouseTap(); - } - return s_instance; -} - void CocoaMouseTap::initMouseEventTap() { if (!m_tapData) { diff --git a/QtScrcpy/util/mousetap/mousetap.cpp b/QtScrcpy/util/mousetap/mousetap.cpp new file mode 100644 index 0000000..da1bc13 --- /dev/null +++ b/QtScrcpy/util/mousetap/mousetap.cpp @@ -0,0 +1,26 @@ +#include + +#include "mousetap.h" +#ifdef Q_OS_WIN32 +#include "winmousetap.h" +#endif +#ifdef Q_OS_OSX +#include "cocoamousetap.h" +#endif + +MouseTap *MouseTap::s_instance = Q_NULLPTR; +MouseTap *MouseTap::getInstance() +{ + if (s_instance == Q_NULLPTR) { +#ifdef Q_OS_WIN32 + s_instance = new WinMouseTap(); +#endif +#ifdef Q_OS_OSX + s_instance = new CocoaMouseTap(); +#endif +#ifdef Q_OS_LINUX + Q_ASSERT(false); +#endif + } + return s_instance; +} diff --git a/QtScrcpy/util/mousetap/mousetap.h b/QtScrcpy/util/mousetap/mousetap.h new file mode 100644 index 0000000..eab1389 --- /dev/null +++ b/QtScrcpy/util/mousetap/mousetap.h @@ -0,0 +1,14 @@ +#ifndef MOUSETAP_H +#define MOUSETAP_H +class QWidget; +class MouseTap { +public: + static MouseTap* getInstance(); + virtual void initMouseEventTap() = 0; + virtual void quitMouseEventTap() = 0; + virtual void enableMouseEventTap(QWidget* widget, bool enabled) = 0; + +private: + static MouseTap *s_instance; +}; +#endif // MOUSETAP_H diff --git a/QtScrcpy/util/mousetap/mousetap.pri b/QtScrcpy/util/mousetap/mousetap.pri new file mode 100644 index 0000000..e2d7d09 --- /dev/null +++ b/QtScrcpy/util/mousetap/mousetap.pri @@ -0,0 +1,18 @@ +HEADERS += \ + $$PWD/mousetap.h + +SOURCES += \ + $$PWD/mousetap.cpp + +win32 { + HEADERS += $$PWD/winmousetap.h + SOURCES += $$PWD/winmousetap.cpp + LIBS += -lUser32 +} + +mac { + HEADERS += $$PWD/cocoamousetap.h + OBJECTIVE_SOURCES += $$PWD/cocoamousetap.mm + LIBS += -framework Appkit + QMAKE_CFLAGS += -mmacosx-version-min=10.6 +} diff --git a/QtScrcpy/util/mousetap/winmousetap.cpp b/QtScrcpy/util/mousetap/winmousetap.cpp new file mode 100644 index 0000000..7467b89 --- /dev/null +++ b/QtScrcpy/util/mousetap/winmousetap.cpp @@ -0,0 +1,43 @@ +#include +#include + +#include "winmousetap.h" + +WinMouseTap::WinMouseTap() +{ + +} + +WinMouseTap::~WinMouseTap() +{ + +} + +void WinMouseTap::initMouseEventTap() +{ + +} + +void WinMouseTap::quitMouseEventTap() +{ + +} + +void WinMouseTap::enableMouseEventTap(QWidget *widget, bool enabled) +{ + if (!widget) { + return; + } + if(enabled) { + QRect rc(widget->mapToGlobal(widget->pos()) + , widget->size()); + RECT mainRect; + mainRect.left = (LONG)rc.left(); + mainRect.right = (LONG)rc.right(); + mainRect.top = (LONG)rc.top(); + mainRect.bottom = (LONG)rc.bottom(); + ClipCursor(&mainRect); + } else { + ClipCursor(Q_NULLPTR); + } +} diff --git a/QtScrcpy/util/mousetap/winmousetap.h b/QtScrcpy/util/mousetap/winmousetap.h new file mode 100644 index 0000000..9b23f68 --- /dev/null +++ b/QtScrcpy/util/mousetap/winmousetap.h @@ -0,0 +1,17 @@ +#ifndef WINMOUSETAP_H +#define WINMOUSETAP_H + +#include "mousetap.h" + +class WinMouseTap : public MouseTap +{ +public: + WinMouseTap(); + virtual ~WinMouseTap(); + + void initMouseEventTap() override; + void quitMouseEventTap() override; + void enableMouseEventTap(QWidget* widget, bool enabled) override; +}; + +#endif // WINMOUSETAP_H diff --git a/QtScrcpy/util/util.pri b/QtScrcpy/util/util.pri index b489d3f..8756e35 100644 --- a/QtScrcpy/util/util.pri +++ b/QtScrcpy/util/util.pri @@ -1,6 +1 @@ -mac { - HEADERS += $$PWD/cocoamousetap.h - OBJECTIVE_SOURCES += $$PWD/cocoamousetap.mm - LIBS += -framework Appkit - QMAKE_CFLAGS += -mmacosx-version-min=10.6 -} +include ($$PWD/mousetap/mousetap.pri) diff --git a/QtScrcpy/videoform.cpp b/QtScrcpy/videoform.cpp index 9fe3682..14416e1 100644 --- a/QtScrcpy/videoform.cpp +++ b/QtScrcpy/videoform.cpp @@ -4,9 +4,6 @@ #include #include #include -#ifdef Q_OS_WIN32 -#include -#endif #ifdef USE_QTQUICK #include #endif @@ -21,9 +18,7 @@ #include "toolform.h" #include "controlevent.h" #include "recorder.h" -#ifdef Q_OS_OSX -#include "cocoamousetap.h" -#endif +#include "mousetap/mousetap.h" VideoForm::VideoForm(const QString& serial, quint16 maxSize, quint32 bitRate, const QString& fileName, QWidget *parent) : QWidget(parent), @@ -141,22 +136,12 @@ void VideoForm::initSignals() } }); connect(&m_inputConvert, &InputConvertGame::grabCursor, this, [this](bool grab){ + #ifdef Q_OS_WIN32 - if(grab) { - QRect rc(mapToGlobal(ui->videoWidget->pos()) - , ui->videoWidget->size()); - RECT mainRect; - mainRect.left = (LONG)rc.left(); - mainRect.right = (LONG)rc.right(); - mainRect.top = (LONG)rc.top(); - mainRect.bottom = (LONG)rc.bottom(); - ClipCursor(&mainRect); - } else { - ClipCursor(Q_NULLPTR); - } + MouseTap::getInstance()->enableMouseEventTap(ui->videoWidget, grab); #endif #ifdef Q_OS_OSX - CocoaMouseTap::getInstance()->enableMouseEventTap(ui->videoWidget, grab); + MouseTap::getInstance()->enableMouseEventTap(ui->videoWidget, grab); #endif }); connect(m_server, &Server::serverStartResult, this, [this](bool success){ diff --git a/TODO.txt b/TODO.txt index 8bd218e..159bbb2 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,13 +1,12 @@ // TODO mac: Qt::FramelessWindowHit full screen is abnormal -限制鼠标移动抽象跨平台接口 +linux下限制鼠标移动 Mac游戏时向右移动不流畅问题。 工具栏扩展(模拟点击指定次数等) 模拟点击改用手指(注意:辅助按键就都没了) -中文输入 +中文输入(server需要改为apk,作为一个输入法,暂不实现) - -最后更新 7764a836f1ee02a4540cfc4118c20729018daaac +最后更新scrcpy 7764a836f1ee02a4540cfc4118c20729018daaac mark: