QtCanpool 3.3.0
载入中...
搜索中...
未找到
windowagentwidget_mac.cpp
浏览该文件的文档.
1
6#include <QtGui/QtEvents>
7
9
10static inline QRect getWidgetSceneRect(QWidget *widget)
11{
12 return {widget->mapTo(widget->window(), QPoint()), widget->size()};
13}
14
15class SystemButtonAreaWidgetEventFilter : public QObject
16{
17public:
18 SystemButtonAreaWidgetEventFilter(QWidget *widget, WindowContext *ctx, QObject *parent = nullptr)
19 : QObject(parent)
20 , widget(widget)
21 , ctx(ctx)
22 {
23 widget->installEventFilter(this);
24 ctx->setSystemButtonAreaCallback([widget](const QSize &) {
25 return getWidgetSceneRect(widget); //
26 });
27 }
28 ~SystemButtonAreaWidgetEventFilter() override = default;
29protected:
30 bool eventFilter(QObject *obj, QEvent *event) override
31 {
32 Q_UNUSED(obj)
33 switch (event->type()) {
34 case QEvent::Move:
35 case QEvent::Resize: {
36 ctx->virtual_hook(WindowContext::SystemButtonAreaChangedHook, nullptr);
37 break;
38 }
39
40 default:
41 break;
42 }
43 return false;
44 }
45protected:
46 QWidget *widget;
47 WindowContext *ctx;
48};
49
53QWidget *WindowAgentWidget::systemButtonArea() const
54{
55 Q_D(const WindowAgentWidget);
56 return d->m_systemButtonAreaWidget;
57}
58
65void WindowAgentWidget::setSystemButtonArea(QWidget *widget)
66{
68 if (d->m_systemButtonAreaWidget == widget)
69 return;
70
71 auto ctx = d->m_context.get();
72 d->m_systemButtonAreaWidget = widget;
73 if (!widget) {
74 d->m_context->setSystemButtonAreaCallback({});
75 d->m_systemButtonAreaWidgetEventFilter.reset();
76 return;
77 }
78 d->m_systemButtonAreaWidgetEventFilter = std::make_unique<SystemButtonAreaWidgetEventFilter>(widget, ctx);
79}
80
84ScreenRectCallback WindowAgentWidget::systemButtonAreaCallback() const
85{
86 Q_D(const WindowAgentWidget);
87 return d->m_systemButtonAreaWidget ? nullptr : d->m_context->systemButtonAreaCallback();
88}
89
96void WindowAgentWidget::setSystemButtonAreaCallback(const ScreenRectCallback &callback)
97{
99 setSystemButtonArea(nullptr);
100 d->m_context->setSystemButtonAreaCallback(callback);
101}
102
WindowAgentBase is the window agent for QtWidgets.
std::function< QRect(const QSize &)> ScreenRectCallback
#define QX_WINDOW_END_NAMESPACE
#define QX_WINDOW_BEGIN_NAMESPACE
WindowContext * ctx