diff options
| author | Mikolaj Boc <mikolaj.boc@qt.io> | 2022-08-12 11:13:45 +0200 |
|---|---|---|
| committer | Mikolaj Boc <mikolaj.boc@qt.io> | 2022-08-25 16:53:47 +0200 |
| commit | 6cd0dc213b784ce21997d2691a54f37313e439c8 (patch) | |
| tree | 96098a4e3464df951d348249741637a46fe6e163 /src/plugins/platforms/wasm/qwasmwindow.h | |
| parent | 713f1c633a0560664705268e43307d5dba9fad42 (diff) | |
Move titlebar drawing routines to QWasmWindow
The title bar drawing routines belong in QWasmWindow, not in the
compositor. This provides better encapsulation as many properties
don't have to be leaked from QWasmWindow. Extensibility will also
improve.
Change-Id: If73dd4e87602f62bff0de92e1405f89e7a9f3b43
Pick-to: 6.4
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmwindow.h')
| -rw-r--r-- | src/plugins/platforms/wasm/qwasmwindow.h | 53 |
1 files changed, 39 insertions, 14 deletions
diff --git a/src/plugins/platforms/wasm/qwasmwindow.h b/src/plugins/platforms/wasm/qwasmwindow.h index 650e34ce5c0..7dd0a0d1024 100644 --- a/src/plugins/platforms/wasm/qwasmwindow.h +++ b/src/plugins/platforms/wasm/qwasmwindow.h @@ -16,6 +16,17 @@ QT_BEGIN_NAMESPACE class QWasmWindow : public QPlatformWindow { public: + enum TitleBarControl { + SC_None = 0x00000000, + SC_TitleBarSysMenu = 0x00000001, + SC_TitleBarMinButton = 0x00000002, + SC_TitleBarMaxButton = 0x00000004, + SC_TitleBarCloseButton = 0x00000008, + SC_TitleBarNormalButton = 0x00000010, + SC_TitleBarLabel = 0x00000100 + }; + Q_DECLARE_FLAGS(TitleBarControls, TitleBarControl); + QWasmWindow(QWindow *w, QWasmCompositor *compositor, QWasmBackingStore *backingStore); ~QWasmWindow(); void destroy(); @@ -47,41 +58,53 @@ public: void injectMouseReleased(const QPoint &local, const QPoint &global, Qt::MouseButton button, Qt::KeyboardModifiers mods); - int titleHeight() const; - int borderWidth() const; - QRegion titleGeometry() const; - QRegion resizeRegion() const; bool isPointOnTitle(QPoint point) const; bool isPointOnResizeRegion(QPoint point) const; + Qt::Edges resizeEdgesAtPoint(QPoint point) const; - QRect maxButtonRect() const; - QRect minButtonRect() const; - QRect closeButtonRect() const; - QRect sysMenuRect() const; - QRect normButtonRect() const; - QRegion titleControlRegion() const; - QWasmCompositor::SubControls activeSubControl() const; void setWindowState(Qt::WindowStates state) override; void applyWindowState(); bool setKeyboardGrabEnabled(bool) override { return false; } bool setMouseGrabEnabled(bool) override { return false; } + void drawTitleBar(QPainter *painter) const; + protected: void invalidate(); bool hasTitleBar() const; -protected: +private: friend class QWasmScreen; - QWindow* m_window = nullptr; + struct TitleBarOptions + { + QRect rect; + Qt::WindowFlags flags; + int state; + QPalette palette; + QString titleBarOptionsString; + TitleBarControls subControls; + QIcon windowIcon; + }; + + TitleBarOptions makeTitleBarOptions() const; + QRect getTitleBarControlRect(const TitleBarOptions &tb, TitleBarControl control) const; + QRegion titleControlRegion() const; + QRegion titleGeometry() const; + int borderWidth() const; + int titleHeight() const; + QRegion resizeRegion() const; + TitleBarControl activeTitleBarControl() const; + + QWindow *m_window = nullptr; QWasmCompositor *m_compositor = nullptr; QWasmBackingStore *m_backingStore = nullptr; QRect m_normalGeometry {0, 0, 0 ,0}; Qt::WindowStates m_windowState = Qt::WindowNoState; Qt::WindowStates m_previousWindowState = Qt::WindowNoState; - QWasmCompositor::SubControls m_activeControl = QWasmCompositor::SC_None; + TitleBarControl m_activeControl = SC_None; WId m_winid = 0; bool m_hasTitle = false; bool m_needsCompositor = false; @@ -90,5 +113,7 @@ protected: friend class QWasmEventTranslator; bool windowIsPopupType(Qt::WindowFlags flags) const; }; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QWasmWindow::TitleBarControls); QT_END_NAMESPACE #endif // QWASMWINDOW_H |
