update:mousetap重构

This commit is contained in:
rankun 2019-02-18 13:27:54 +08:00
parent a53fe2ad04
commit 7165c60cb3
13 changed files with 137 additions and 57 deletions

View file

@ -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

View file

@ -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;
}

Binary file not shown.

View file

@ -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

View file

@ -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) {

View 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;
}

View 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

View 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
}

View 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);
}
}

View 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

View file

@ -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)

View file

@ -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){

View file

@ -1,13 +1,12 @@
// TODO mac: Qt::FramelessWindowHit full screen is abnormal
限制鼠标移动抽象跨平台接口
linux下限制鼠标移动
Mac游戏时向右移动不流畅问题。
工具栏扩展(模拟点击指定次数等)
模拟点击改用手指(注意:辅助按键就都没了)
中文输入
中文输入server需要改为apk作为一个输入法暂不实现
最后更新 7764a836f1ee02a4540cfc4118c20729018daaac
最后更新scrcpy 7764a836f1ee02a4540cfc4118c20729018daaac
mark: