From f963da1b4099d1bcadae6f8d8669937c3a9ad0f1 Mon Sep 17 00:00:00 2001 From: Sine Striker <trueful@163.com> Date: 周五, 29 12月 2023 09:14:59 +0800 Subject: [PATCH] Add object helper --- src/quick/quickwindowagent.h | 4 ++-- src/widgets/widgetwindowagent_win.cpp | 17 +++-------------- src/core/qwkglobal_p.h | 15 +++++++++++++-- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/core/qwkglobal_p.h b/src/core/qwkglobal_p.h index bc0d393..e311ee8 100644 --- a/src/core/qwkglobal_p.h +++ b/src/core/qwkglobal_p.h @@ -10,6 +10,7 @@ // version without notice, or may even be removed. // +#include <QtCore/QObject> #include <QtCore/QLoggingCategory> #include <QtGui/QMouseEvent> @@ -42,6 +43,17 @@ namespace QWK { + namespace Private { + + class ObjectHelper : public QObject { + public: + static inline bool sendEvent(QObject *obj, QEvent *event) { + return static_cast<ObjectHelper *>(obj)->event(event); + } + }; + + } + inline QPoint getMouseEventScenePos(const QMouseEvent *event) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) return event->scenePosition().toPoint(); @@ -49,7 +61,7 @@ return event->windowPos().toPoint(); #endif } - + inline QPoint getMouseEventGlobalPos(const QMouseEvent *event) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) return event->globalPosition().toPoint(); @@ -57,7 +69,6 @@ return event->screenPos().toPoint(); #endif } - } #endif // QWKGLOBAL_P_H diff --git a/src/quick/quickwindowagent.h b/src/quick/quickwindowagent.h index 58703a8..b3ebc2b 100644 --- a/src/quick/quickwindowagent.h +++ b/src/quick/quickwindowagent.h @@ -31,8 +31,8 @@ Q_INVOKABLE void setHitTestVisible(const QQuickItem *item, bool visible = true); #ifdef Q_OS_MAC - QQuickItem *systemButtonArea() const; - void setSystemButtonArea(QQuickItem *item); + Q_INVOKABLE QQuickItem *systemButtonArea() const; + Q_INVOKABLE void setSystemButtonArea(QQuickItem *item); #endif Q_SIGNALS: diff --git a/src/widgets/widgetwindowagent_win.cpp b/src/widgets/widgetwindowagent_win.cpp index 72d0057..0f4637d 100644 --- a/src/widgets/widgetwindowagent_win.cpp +++ b/src/widgets/widgetwindowagent_win.cpp @@ -5,6 +5,7 @@ #include <QtGui/QPainter> #include <QWKCore/qwindowkit_windows.h> +#include <QWKCore/private/qwkglobal_p.h> namespace QWK { @@ -68,14 +69,8 @@ } inline void resumeWidgetEventAndDraw(QWidget *w, QEvent *event) { - // Friend class helping to call `event` - class HackedWidget : public QWidget { - public: - friend class QWK::WidgetBorderHandler; - }; - // Let the widget paint first - static_cast<HackedWidget *>(w)->event(event); + Private::ObjectHelper::sendEvent(w, event); // Due to the timer or user action, Qt will repaint some regions spontaneously, // even if there is no WM_PAINT message, we must wait for it to finish painting @@ -84,14 +79,8 @@ } inline void resumeWindowEventAndDraw(QWindow *window, QEvent *event) { - // Friend class helping to call `event` - class HackedWindow : public QWindow { - public: - friend class QWK::WidgetBorderHandler; - }; - // Let Qt paint first - static_cast<HackedWindow *>(window)->event(event); + Private::ObjectHelper::sendEvent(window, event); // Upon receiving the WM_PAINT message, Qt will repaint the entire view, and we // must wait for it to finish painting before drawing this top border area. -- Gitblit v1.9.1