diff --git a/QtScrcpy/MainWindow.qml b/QtScrcpy/MainWindow.qml index b526d5c..cf73b0f 100644 --- a/QtScrcpy/MainWindow.qml +++ b/QtScrcpy/MainWindow.qml @@ -15,7 +15,7 @@ Window { property color backgroundColor: "#2E2F30" property color backgroundBorderColor: "#555656" - WindowFramelessHelperMac { + WindowFramelessHelper { target: root; } diff --git a/QtScrcpy/main.cpp b/QtScrcpy/main.cpp index 48018f1..929af13 100644 --- a/QtScrcpy/main.cpp +++ b/QtScrcpy/main.cpp @@ -11,8 +11,8 @@ #include "dialog.h" #include "mousetap/mousetap.h" #include "stream.h" +#include "windownativeeventfilter.h" #include "windowframelesshelper.h" -#include "windowframelesshelpermac.h" static Dialog *g_mainDlg = Q_NULLPTR; @@ -76,12 +76,12 @@ int main(int argc, char *argv[]) Stream::init(); QApplication app(argc, argv); - qmlRegisterType("barry.uibase", 1, 0, "WindowFramelessHelperMac"); + qmlRegisterType("barry.uibase", 1, 0, "WindowFramelessHelper"); QQmlApplicationEngine engine("qrc:/MainWindow.qml"); #ifdef Q_OS_WIN32 - WindowFramelessHelper::Instance()->Init(); + WindowNativeEventFilter::Instance()->Init(); #endif // windows下通过qmake VERSION变量或者rc设置版本号和应用名称后,这里可以直接拿到 diff --git a/QtScrcpy/uibase/uibase.pri b/QtScrcpy/uibase/uibase.pri index ec36fae..630d94b 100644 --- a/QtScrcpy/uibase/uibase.pri +++ b/QtScrcpy/uibase/uibase.pri @@ -4,11 +4,11 @@ HEADERS += \ $$PWD/keepratiowidget.h \ $$PWD/magneticwidget.h \ $$PWD/windowframelesshelper.h \ - $$PWD/windowframelesshelpermac.h + $$PWD/windownativeeventfilter.h SOURCES += \ $$PWD/keepratiowidget.cpp \ $$PWD/magneticwidget.cpp \ - $$PWD/windowframelesshelper.cpp \ - $$PWD/windowframelesshelpermac.mm + $$PWD/windowframelesshelper.mm \ + $$PWD/windownativeeventfilter.cpp diff --git a/QtScrcpy/uibase/windowframelesshelper.h b/QtScrcpy/uibase/windowframelesshelper.h index 0b93228..0ce961e 100644 --- a/QtScrcpy/uibase/windowframelesshelper.h +++ b/QtScrcpy/uibase/windowframelesshelper.h @@ -1,32 +1,24 @@ -#pragma once -#include +#ifndef WindowFramelessHelper_H +#define WindowFramelessHelper_H -#if defined(Q_OS_WIN) -#include -#include +#include -class WindowFramelessHelper : public QAbstractNativeEventFilter +class WindowFramelessHelper : public QObject { -protected: - WindowFramelessHelper(); - ~WindowFramelessHelper() override; + Q_OBJECT + Q_PROPERTY(QQuickWindow * target READ target WRITE setTarget NOTIFY targetChanged) public: - static WindowFramelessHelper *Instance(); + explicit WindowFramelessHelper(QObject *parent = nullptr); - void Init(); - bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override; + QQuickWindow *target() const; + void setTarget(QQuickWindow *target); + +signals: + void targetChanged(); private: - bool processNcHitTest(void *message, long *result); - bool processNcLButtonDown(void *message, long *result); - bool processSetCursor(void *message, long *result); - - QWindow *getWindow(WId wndId); - -private: - bool m_inited = false; - QMargins m_windowMargin = QMargins(0, 0, 0, 0); + QQuickWindow* m_target = nullptr; }; -#endif // Q_OS_WIN +#endif // WindowFramelessHelper_H diff --git a/QtScrcpy/uibase/windowframelesshelpermac.mm b/QtScrcpy/uibase/windowframelesshelper.mm similarity index 80% rename from QtScrcpy/uibase/windowframelesshelpermac.mm rename to QtScrcpy/uibase/windowframelesshelper.mm index 9c4a01a..a768def 100644 --- a/QtScrcpy/uibase/windowframelesshelpermac.mm +++ b/QtScrcpy/uibase/windowframelesshelper.mm @@ -1,19 +1,19 @@ -#include "windowframelesshelpermac.h" +#include "windowframelesshelper.h" #include #include -WindowFramelessHelperMac::WindowFramelessHelperMac(QObject *parent) : QObject(parent) +WindowFramelessHelper::WindowFramelessHelper(QObject *parent) : QObject(parent) { } -QQuickWindow *WindowFramelessHelperMac::target() const +QQuickWindow *WindowFramelessHelper::target() const { return m_target; } -void WindowFramelessHelperMac::setTarget(QQuickWindow *target) +void WindowFramelessHelper::setTarget(QQuickWindow *target) { if (target == m_target) { return; diff --git a/QtScrcpy/uibase/windowframelesshelpermac.h b/QtScrcpy/uibase/windowframelesshelpermac.h deleted file mode 100644 index 6320f48..0000000 --- a/QtScrcpy/uibase/windowframelesshelpermac.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef WINDOWFRAMELESSHELPERMAC_H -#define WINDOWFRAMELESSHELPERMAC_H - -#include - -class WindowFramelessHelperMac : public QObject -{ - Q_OBJECT - Q_PROPERTY(QQuickWindow * target READ target WRITE setTarget NOTIFY targetChanged) - -public: - explicit WindowFramelessHelperMac(QObject *parent = nullptr); - - QQuickWindow *target() const; - void setTarget(QQuickWindow *target); - -signals: - void targetChanged(); - -private: - QQuickWindow* m_target = nullptr; -}; - -#endif // WINDOWFRAMELESSHELPERMAC_H diff --git a/QtScrcpy/uibase/windowframelesshelper.cpp b/QtScrcpy/uibase/windownativeeventfilter.cpp similarity index 90% rename from QtScrcpy/uibase/windowframelesshelper.cpp rename to QtScrcpy/uibase/windownativeeventfilter.cpp index 70dfb6d..3adefe4 100644 --- a/QtScrcpy/uibase/windowframelesshelper.cpp +++ b/QtScrcpy/uibase/windownativeeventfilter.cpp @@ -1,4 +1,4 @@ -#include "windowframelesshelper.h" +#include "windownativeeventfilter.h" #if defined(Q_OS_WIN) #include @@ -7,20 +7,20 @@ #include #include -WindowFramelessHelper::WindowFramelessHelper() {} +WindowNativeEventFilter::WindowNativeEventFilter() {} -WindowFramelessHelper::~WindowFramelessHelper() +WindowNativeEventFilter::~WindowNativeEventFilter() { // do nothing, because this object is static instance } -WindowFramelessHelper *WindowFramelessHelper::Instance() +WindowNativeEventFilter *WindowNativeEventFilter::Instance() { - static WindowFramelessHelper g_windowNativeEventFilter; + static WindowNativeEventFilter g_windowNativeEventFilter; return &g_windowNativeEventFilter; } -void WindowFramelessHelper::Init() +void WindowNativeEventFilter::Init() { if (!m_inited) { m_inited = true; @@ -28,7 +28,7 @@ void WindowFramelessHelper::Init() } } -bool WindowFramelessHelper::nativeEventFilter(const QByteArray &eventType, void *message, long *result) +bool WindowNativeEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *result) { Q_UNUSED(eventType); @@ -60,7 +60,7 @@ bool WindowFramelessHelper::nativeEventFilter(const QByteArray &eventType, void return false; } -bool WindowFramelessHelper::processNcHitTest(void *message, long *result) +bool WindowNativeEventFilter::processNcHitTest(void *message, long *result) { MSG *param = static_cast(message); if (!param) { @@ -126,7 +126,7 @@ bool WindowFramelessHelper::processNcHitTest(void *message, long *result) return true; } -bool WindowFramelessHelper::processNcLButtonDown(void *message, long *result) +bool WindowNativeEventFilter::processNcLButtonDown(void *message, long *result) { Q_UNUSED(result); @@ -173,7 +173,7 @@ bool WindowFramelessHelper::processNcLButtonDown(void *message, long *result) return false; } -bool WindowFramelessHelper::processSetCursor(void *message, long *result) +bool WindowNativeEventFilter::processSetCursor(void *message, long *result) { Q_UNUSED(result); @@ -240,7 +240,7 @@ bool WindowFramelessHelper::processSetCursor(void *message, long *result) return true; } -QWindow *WindowFramelessHelper::getWindow(WId wndId) +QWindow *WindowNativeEventFilter::getWindow(WId wndId) { QWindowList windows = QGuiApplication::topLevelWindows(); for (int i = 0; i < windows.size(); ++i) { diff --git a/QtScrcpy/uibase/windownativeeventfilter.h b/QtScrcpy/uibase/windownativeeventfilter.h new file mode 100644 index 0000000..0fe1215 --- /dev/null +++ b/QtScrcpy/uibase/windownativeeventfilter.h @@ -0,0 +1,32 @@ +#pragma once +#include + +#if defined(Q_OS_WIN) +#include +#include + +class WindowNativeEventFilter : public QAbstractNativeEventFilter +{ +protected: + WindowNativeEventFilter(); + ~WindowNativeEventFilter() override; + +public: + static WindowNativeEventFilter *Instance(); + + void Init(); + bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override; + +private: + bool processNcHitTest(void *message, long *result); + bool processNcLButtonDown(void *message, long *result); + bool processSetCursor(void *message, long *result); + + QWindow *getWindow(WId wndId); + +private: + bool m_inited = false; + QMargins m_windowMargin = QMargins(0, 0, 0, 0); +}; + +#endif // Q_OS_WIN