mirror of
https://github.com/barry-ran/QtScrcpy.git
synced 2025-04-20 03:25:02 +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 -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
BIN
QtScrcpy/util/.DS_Store
vendored
BIN
QtScrcpy/util/.DS_Store
vendored
Binary file not shown.
|
@ -3,19 +3,20 @@
|
|||
#include <QThread>
|
||||
#include <QSemaphore>
|
||||
|
||||
#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
|
|
@ -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) {
|
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 {
|
||||
HEADERS += $$PWD/cocoamousetap.h
|
||||
OBJECTIVE_SOURCES += $$PWD/cocoamousetap.mm
|
||||
LIBS += -framework Appkit
|
||||
QMAKE_CFLAGS += -mmacosx-version-min=10.6
|
||||
}
|
||||
include ($$PWD/mousetap/mousetap.pri)
|
||||
|
|
|
@ -4,9 +4,6 @@
|
|||
#include <QStyle>
|
||||
#include <QStyleOption>
|
||||
#include <QPainter>
|
||||
#ifdef Q_OS_WIN32
|
||||
#include <Windows.h>
|
||||
#endif
|
||||
#ifdef USE_QTQUICK
|
||||
#include <QQuickWidget>
|
||||
#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){
|
||||
|
|
7
TODO.txt
7
TODO.txt
|
@ -1,13 +1,12 @@
|
|||
// TODO mac: Qt::FramelessWindowHit full screen is abnormal
|
||||
限制鼠标移动抽象跨平台接口
|
||||
linux下限制鼠标移动
|
||||
Mac游戏时向右移动不流畅问题。
|
||||
工具栏扩展(模拟点击指定次数等)
|
||||
|
||||
模拟点击改用手指(注意:辅助按键就都没了)
|
||||
中文输入
|
||||
中文输入(server需要改为apk,作为一个输入法,暂不实现)
|
||||
|
||||
|
||||
最后更新 7764a836f1ee02a4540cfc4118c20729018daaac
|
||||
最后更新scrcpy 7764a836f1ee02a4540cfc4118c20729018daaac
|
||||
|
||||
|
||||
mark:
|
||||
|
|
Loading…
Add table
Reference in a new issue