#ifndef ABSTRACTWINDOWCONTEXT_P_H #define ABSTRACTWINDOWCONTEXT_P_H // // W A R N I N G !!! // ----------------- // // This file is not part of the QWindowKit API. It is used purely as an // implementation detail. This header file may change from version to // version without notice, or may even be removed. // #include #include #include #include #include #include #include #include #include #include namespace QWK { class QWK_CORE_EXPORT AbstractWindowContext : public QObject, public NativeEventDispatcher, public SharedEventDispatcher { Q_OBJECT public: AbstractWindowContext(); ~AbstractWindowContext() override; public: void setup(QObject *host, WindowItemDelegate *delegate); inline QObject *host() const; inline QWindow *window() const; inline WindowItemDelegate *delegate() const; inline QVariant windowAttribute(const QString &key) const; bool setWindowAttribute(const QString &key, const QVariant &attribute); inline bool isHitTestVisible(const QObject *obj) const; bool setHitTestVisible(const QObject *obj, bool visible); inline QObject *systemButton(WindowAgentBase::SystemButton button) const; bool setSystemButton(WindowAgentBase::SystemButton button, QObject *obj); inline QObject *titleBar() const; bool setTitleBar(QObject *obj); #ifdef Q_OS_MAC inline QRect systemButtonArea() const; void setSystemButtonArea(const QRect &rect); #endif bool isInSystemButtons(const QPoint &pos, WindowAgentBase::SystemButton *button) const; bool isInTitleBarDraggableArea(const QPoint &pos) const; virtual QString key() const; enum WindowContextHook { CentralizeHook = 1, RaiseWindowHook, ShowSystemMenuHook, DefaultColorsHook, DrawWindows10BorderHook, // Only works on Windows 10, emulated workaround DrawWindows10BorderHook2, // Only works on Windows 10, native workaround SystemButtonAreaChangedHook, // Only works on Mac }; virtual void virtual_hook(int id, void *data); void showSystemMenu(const QPoint &pos); void notifyWinIdChange(); protected: virtual void winIdChanged() = 0; virtual bool windowAttributeChanged(const QString &key, const QVariant &attribute, const QVariant &oldAttribute); protected: QObject *m_host{}; std::unique_ptr m_delegate; QWindow *m_windowHandle{}; QSet m_hitTestVisibleItems; #ifdef Q_OS_MAC QRect m_systemButtonArea; #endif QObject *m_titleBar{}; std::array m_systemButtons{}; QVariantHash m_windowAttributes; std::unique_ptr m_windowEventFilter; std::unique_ptr m_winIdChangeEventFilter; }; inline QObject *AbstractWindowContext::host() const { return m_host; } inline QWindow *AbstractWindowContext::window() const { return m_windowHandle; } inline WindowItemDelegate *AbstractWindowContext::delegate() const { return m_delegate.get(); } inline QVariant AbstractWindowContext::windowAttribute(const QString &key) const { return m_windowAttributes.value(key); } inline bool AbstractWindowContext::isHitTestVisible(const QObject *obj) const { return m_hitTestVisibleItems.contains(obj); } inline QObject * AbstractWindowContext::systemButton(WindowAgentBase::SystemButton button) const { return m_systemButtons[button]; } inline QObject *AbstractWindowContext::titleBar() const { return m_titleBar; } #ifdef Q_OS_MAC inline QRect AbstractWindowContext::systemButtonArea() const { return m_systemButtonArea; } #endif } #endif // ABSTRACTWINDOWCONTEXT_P_H