mirror of
https://github.com/barry-ran/QtScrcpy.git
synced 2025-08-02 21:58:42 +00:00
update:mousetap重构
This commit is contained in:
parent
a53fe2ad04
commit
7165c60cb3
13 changed files with 137 additions and 57 deletions
|
@ -94,8 +94,7 @@ win32 {
|
||||||
-L$$PWD/../third_party/ffmpeg/lib -lavformat \
|
-L$$PWD/../third_party/ffmpeg/lib -lavformat \
|
||||||
-L$$PWD/../third_party/ffmpeg/lib -lavcodec \
|
-L$$PWD/../third_party/ffmpeg/lib -lavcodec \
|
||||||
-L$$PWD/../third_party/ffmpeg/lib -lavutil \
|
-L$$PWD/../third_party/ffmpeg/lib -lavutil \
|
||||||
-L$$PWD/../third_party/ffmpeg/lib -lswscale \
|
-L$$PWD/../third_party/ffmpeg/lib -lswscale
|
||||||
-lUser32
|
|
||||||
|
|
||||||
# windows rc file
|
# windows rc file
|
||||||
RC_FILE = $$PWD/res/QtScrcpy.rc
|
RC_FILE = $$PWD/res/QtScrcpy.rc
|
||||||
|
|
|
@ -6,9 +6,7 @@
|
||||||
|
|
||||||
#include "dialog.h"
|
#include "dialog.h"
|
||||||
#include "decoder.h"
|
#include "decoder.h"
|
||||||
#ifdef Q_OS_OSX
|
#include "mousetap/mousetap.h"
|
||||||
#include "cocoamousetap.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Dialog* g_mainDlg = Q_NULLPTR;
|
Dialog* g_mainDlg = Q_NULLPTR;
|
||||||
|
|
||||||
|
@ -28,9 +26,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
installTranslator();
|
installTranslator();
|
||||||
|
|
||||||
#ifdef Q_OS_OSX
|
MouseTap::getInstance()->initMouseEventTap();
|
||||||
CocoaMouseTap::getInstance()->initMouseEventTap();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef Q_OS_WIN32
|
#ifdef Q_OS_WIN32
|
||||||
qputenv("QTSCRCPY_ADB_PATH", "../../../third_party/adb/win/adb.exe");
|
qputenv("QTSCRCPY_ADB_PATH", "../../../third_party/adb/win/adb.exe");
|
||||||
|
@ -57,9 +53,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
int ret = a.exec();
|
int ret = a.exec();
|
||||||
|
|
||||||
#ifdef Q_OS_OSX
|
MouseTap::getInstance()->quitMouseEventTap();
|
||||||
CocoaMouseTap::getInstance()->quitMouseEventTap();
|
|
||||||
#endif
|
|
||||||
Decoder::deInit();
|
Decoder::deInit();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
BIN
QtScrcpy/util/.DS_Store
vendored
BIN
QtScrcpy/util/.DS_Store
vendored
Binary file not shown.
|
@ -3,19 +3,20 @@
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <QSemaphore>
|
#include <QSemaphore>
|
||||||
|
|
||||||
|
#include "mousetap.h"
|
||||||
|
|
||||||
struct MouseEventTapData;
|
struct MouseEventTapData;
|
||||||
class QWidget;
|
class QWidget;
|
||||||
class CocoaMouseTap : public QThread
|
class CocoaMouseTap : public MouseTap, public QThread
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
CocoaMouseTap(QObject *parent = Q_NULLPTR);
|
CocoaMouseTap(QObject *parent = Q_NULLPTR);
|
||||||
~CocoaMouseTap();
|
virtual ~CocoaMouseTap();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static CocoaMouseTap* getInstance();
|
void initMouseEventTap() override;
|
||||||
void initMouseEventTap();
|
void quitMouseEventTap() override;
|
||||||
void quitMouseEventTap();
|
void enableMouseEventTap(QWidget* widget, bool enabled) override;
|
||||||
void enableMouseEventTap(QWidget* widget, bool enabled);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void run() override;
|
void run() override;
|
||||||
|
@ -23,7 +24,6 @@ protected:
|
||||||
private:
|
private:
|
||||||
MouseEventTapData *m_tapData = Q_NULLPTR;
|
MouseEventTapData *m_tapData = Q_NULLPTR;
|
||||||
QSemaphore m_runloopStartedSemaphore;
|
QSemaphore m_runloopStartedSemaphore;
|
||||||
static CocoaMouseTap *s_instance;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // COCOAMOUSETAP_H
|
#endif // COCOAMOUSETAP_H
|
|
@ -111,8 +111,6 @@ static void SemaphorePostCallback(CFRunLoopTimerRef timer, void *info)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CocoaMouseTap * CocoaMouseTap::s_instance = Q_NULLPTR;
|
|
||||||
|
|
||||||
CocoaMouseTap::CocoaMouseTap(QObject *parent)
|
CocoaMouseTap::CocoaMouseTap(QObject *parent)
|
||||||
: QThread(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()
|
void CocoaMouseTap::initMouseEventTap()
|
||||||
{
|
{
|
||||||
if (!m_tapData) {
|
if (!m_tapData) {
|
26
QtScrcpy/util/mousetap/mousetap.cpp
Normal file
26
QtScrcpy/util/mousetap/mousetap.cpp
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
#include <QtGlobal>
|
||||||
|
|
||||||
|
#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;
|
||||||
|
}
|
14
QtScrcpy/util/mousetap/mousetap.h
Normal file
14
QtScrcpy/util/mousetap/mousetap.h
Normal file
|
@ -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
|
18
QtScrcpy/util/mousetap/mousetap.pri
Normal file
18
QtScrcpy/util/mousetap/mousetap.pri
Normal file
|
@ -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
|
||||||
|
}
|
43
QtScrcpy/util/mousetap/winmousetap.cpp
Normal file
43
QtScrcpy/util/mousetap/winmousetap.cpp
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
#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);
|
||||||
|
}
|
||||||
|
}
|
17
QtScrcpy/util/mousetap/winmousetap.h
Normal file
17
QtScrcpy/util/mousetap/winmousetap.h
Normal file
|
@ -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
|
|
@ -1,6 +1 @@
|
||||||
mac {
|
include ($$PWD/mousetap/mousetap.pri)
|
||||||
HEADERS += $$PWD/cocoamousetap.h
|
|
||||||
OBJECTIVE_SOURCES += $$PWD/cocoamousetap.mm
|
|
||||||
LIBS += -framework Appkit
|
|
||||||
QMAKE_CFLAGS += -mmacosx-version-min=10.6
|
|
||||||
}
|
|
||||||
|
|
|
@ -4,9 +4,6 @@
|
||||||
#include <QStyle>
|
#include <QStyle>
|
||||||
#include <QStyleOption>
|
#include <QStyleOption>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#ifdef Q_OS_WIN32
|
|
||||||
#include <Windows.h>
|
|
||||||
#endif
|
|
||||||
#ifdef USE_QTQUICK
|
#ifdef USE_QTQUICK
|
||||||
#include <QQuickWidget>
|
#include <QQuickWidget>
|
||||||
#endif
|
#endif
|
||||||
|
@ -21,9 +18,7 @@
|
||||||
#include "toolform.h"
|
#include "toolform.h"
|
||||||
#include "controlevent.h"
|
#include "controlevent.h"
|
||||||
#include "recorder.h"
|
#include "recorder.h"
|
||||||
#ifdef Q_OS_OSX
|
#include "mousetap/mousetap.h"
|
||||||
#include "cocoamousetap.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
VideoForm::VideoForm(const QString& serial, quint16 maxSize, quint32 bitRate, const QString& fileName, QWidget *parent) :
|
VideoForm::VideoForm(const QString& serial, quint16 maxSize, quint32 bitRate, const QString& fileName, QWidget *parent) :
|
||||||
QWidget(parent),
|
QWidget(parent),
|
||||||
|
@ -141,22 +136,12 @@ void VideoForm::initSignals()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
connect(&m_inputConvert, &InputConvertGame::grabCursor, this, [this](bool grab){
|
connect(&m_inputConvert, &InputConvertGame::grabCursor, this, [this](bool grab){
|
||||||
|
|
||||||
#ifdef Q_OS_WIN32
|
#ifdef Q_OS_WIN32
|
||||||
if(grab) {
|
MouseTap::getInstance()->enableMouseEventTap(ui->videoWidget, 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);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef Q_OS_OSX
|
#ifdef Q_OS_OSX
|
||||||
CocoaMouseTap::getInstance()->enableMouseEventTap(ui->videoWidget, grab);
|
MouseTap::getInstance()->enableMouseEventTap(ui->videoWidget, grab);
|
||||||
#endif
|
#endif
|
||||||
});
|
});
|
||||||
connect(m_server, &Server::serverStartResult, this, [this](bool success){
|
connect(m_server, &Server::serverStartResult, this, [this](bool success){
|
||||||
|
|
7
TODO.txt
7
TODO.txt
|
@ -1,13 +1,12 @@
|
||||||
// TODO mac: Qt::FramelessWindowHit full screen is abnormal
|
// TODO mac: Qt::FramelessWindowHit full screen is abnormal
|
||||||
限制鼠标移动抽象跨平台接口
|
linux下限制鼠标移动
|
||||||
Mac游戏时向右移动不流畅问题。
|
Mac游戏时向右移动不流畅问题。
|
||||||
工具栏扩展(模拟点击指定次数等)
|
工具栏扩展(模拟点击指定次数等)
|
||||||
|
|
||||||
模拟点击改用手指(注意:辅助按键就都没了)
|
模拟点击改用手指(注意:辅助按键就都没了)
|
||||||
中文输入
|
中文输入(server需要改为apk,作为一个输入法,暂不实现)
|
||||||
|
|
||||||
|
最后更新scrcpy 7764a836f1ee02a4540cfc4118c20729018daaac
|
||||||
最后更新 7764a836f1ee02a4540cfc4118c20729018daaac
|
|
||||||
|
|
||||||
|
|
||||||
mark:
|
mark:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue