| | |
| | | // Copyright (C) 2023-2024 Stdware Collections (https://www.github.com/stdware) |
| | | // Copyright (C) 2021-2023 wangwenx190 (Yuhang Zhao) |
| | | // SPDX-License-Identifier: Apache-2.0 |
| | | |
| | | #ifndef WIN32WINDOWCONTEXT_P_H |
| | | #define WIN32WINDOWCONTEXT_P_H |
| | | |
| | |
| | | |
| | | class Win32WindowContext : public AbstractWindowContext { |
| | | Q_OBJECT |
| | | Q_PROPERTY(bool needBorderPainter READ needBorderPainter FINAL) |
| | | Q_PROPERTY(int borderThickness READ borderThickness FINAL) |
| | | public: |
| | | Win32WindowContext(); |
| | | ~Win32WindowContext() override; |
| | |
| | | FixedBorder, |
| | | TitleBar, |
| | | }; |
| | | Q_ENUM(WindowPart) |
| | | |
| | | QString key() const override; |
| | | void virtual_hook(int id, void *data) override; |
| | | |
| | | bool needBorderPainter() const; |
| | | int borderThickness() const; |
| | | QVariant windowAttribute(const QString &key) const override; |
| | | |
| | | protected: |
| | | void winIdChanged(QWindow *oldWindow, bool isDestroyed) override; |
| | | void winIdChanged(WId winId, WId oldWinId) override; |
| | | bool windowAttributeChanged(const QString &key, const QVariant &attribute, |
| | | const QVariant &oldAttribute) override; |
| | | |
| | | public: |
| | | bool windowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT *result); |
| | |
| | | LRESULT *result); |
| | | |
| | | // In order to perfectly apply Windows 11 Snap Layout into the Qt window, we need to |
| | | // intercept and simulate most of the mouse events, so that the processing logic |
| | | // intercept and emulate most of the mouse events, so that the processing logic |
| | | // is quite complex. Simultaneously, in order to make the handling code of other |
| | | // Windows messages clearer, we have separated them into this function. |
| | | bool snapLayoutHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, |
| | |
| | | LRESULT *result); |
| | | |
| | | protected: |
| | | WId windowId = 0; |
| | | |
| | | // The last hit test result, helpful to handle WM_MOUSEMOVE and WM_NCMOUSELEAVE. |
| | | WindowPart lastHitTestResult = WindowPart::Outside; |
| | | int lastHitTestResultRaw = HTNOWHERE; |
| | | |
| | | // Whether the last mouse leave message is blocked, mainly for handling the unexpected |
| | | // WM_MOUSELEAVE. |
| | | bool mouseLeaveBlocked = false; |
| | | |
| | | bool centered = false; |
| | | uint64_t iconButtonClickTime = 0; |
| | | }; |
| | | |
| | | } |