summaryrefslogtreecommitdiffstats
path: root/src/imports/compositor-extensions/qtshell/qwaylandqtshellchrome.h
blob: 381dd7f6d6ed41df24ee3faa809f732022c76e4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

#ifndef QWAYLANDQTSHELLCHROME_H
#define QWAYLANDQTSHELLCHROME_H

#include <QtQuick/qquickitem.h>
#include <QtWaylandCompositor/qwaylandquickshellsurfaceitem.h>

QT_BEGIN_NAMESPACE

class QWaylandQtShellChromePrivate;
class Q_WAYLANDCOMPOSITOR_EXPORT QWaylandQtShellChrome : public QQuickItem
{
    Q_OBJECT
    Q_DECLARE_PRIVATE(QWaylandQtShellChrome)
    Q_PROPERTY(bool hasDecorations READ hasDecorations NOTIFY windowMetaInfoChanged)
    Q_PROPERTY(uint windowState READ currentWindowState NOTIFY currentWindowStateChanged)
    Q_PROPERTY(uint windowFlags READ currentWindowFlags NOTIFY currentWindowFlagsChanged)
    Q_PROPERTY(QWaylandQuickShellSurfaceItem *shellSurfaceItem READ shellSurfaceItem WRITE setShellSurfaceItem NOTIFY shellSurfaceItemChanged)
    Q_PROPERTY(QRect maximizedRect READ maximizedRect WRITE setMaximizedRect NOTIFY maximizedRectChanged)

    Q_PROPERTY(int frameMarginLeft READ frameMarginLeft WRITE setFrameMarginLeft NOTIFY frameMarginChanged)
    Q_PROPERTY(int frameMarginRight READ frameMarginRight WRITE setFrameMarginRight NOTIFY frameMarginChanged)
    Q_PROPERTY(int frameMarginTop READ frameMarginTop WRITE setFrameMarginTop NOTIFY frameMarginChanged)
    Q_PROPERTY(int frameMarginBottom READ frameMarginBottom WRITE setFrameMarginBottom NOTIFY frameMarginChanged)

    Q_PROPERTY(QQuickItem *titleBar READ titleBar WRITE setTitleBar NOTIFY titleBarChanged);
    Q_PROPERTY(QQuickItem *leftResizeHandle READ leftResizeHandle WRITE setLeftResizeHandle NOTIFY leftResizeHandleChanged);
    Q_PROPERTY(QQuickItem *rightResizeHandle READ rightResizeHandle WRITE setRightResizeHandle NOTIFY rightResizeHandleChanged);
    Q_PROPERTY(QQuickItem *topResizeHandle READ topResizeHandle WRITE setTopResizeHandle NOTIFY topResizeHandleChanged);
    Q_PROPERTY(QQuickItem *bottomResizeHandle READ bottomResizeHandle WRITE setBottomResizeHandle NOTIFY bottomResizeHandleChanged);
    Q_PROPERTY(QQuickItem *topLeftResizeHandle READ topLeftResizeHandle WRITE setTopLeftResizeHandle NOTIFY topLeftResizeHandleChanged);
    Q_PROPERTY(QQuickItem *topRightResizeHandle READ topRightResizeHandle WRITE setTopRightResizeHandle NOTIFY topRightResizeHandleChanged);
    Q_PROPERTY(QQuickItem *bottomLeftResizeHandle READ bottomLeftResizeHandle WRITE setBottomLeftResizeHandle NOTIFY bottomLeftResizeHandleChanged);
    Q_PROPERTY(QQuickItem *bottomRightResizeHandle READ bottomRightResizeHandle WRITE setBottomRightResizeHandle NOTIFY bottomRightResizeHandleChanged);
public:
    QWaylandQtShellChrome(QQuickItem *parent = nullptr);
    ~QWaylandQtShellChrome() override;

    bool hasTitleBar() const;
    bool hasDecorations() const;
    uint currentWindowState() const;
    uint currentWindowFlags() const;

    void setMaximizedRect(const QRect &rect);
    QRect maximizedRect() const;

    void setShellSurfaceItem(QWaylandQuickShellSurfaceItem *shellSurfaceItem);
    QWaylandQuickShellSurfaceItem *shellSurfaceItem() const;

    void setTitleBar(QQuickItem *item);
    QQuickItem *titleBar() const;

    void setLeftResizeHandle(QQuickItem *item);
    QQuickItem *leftResizeHandle() const;

    void setRightResizeHandle(QQuickItem *item);
    QQuickItem *rightResizeHandle() const;

    void setTopResizeHandle(QQuickItem *item);
    QQuickItem *topResizeHandle() const;

    void setBottomResizeHandle(QQuickItem *item);
    QQuickItem *bottomResizeHandle() const;

    void setTopLeftResizeHandle(QQuickItem *item);
    QQuickItem *topLeftResizeHandle() const;

    void setBottomLeftResizeHandle(QQuickItem *item);
    QQuickItem *bottomLeftResizeHandle() const;

    void setTopRightResizeHandle(QQuickItem *item);
    QQuickItem *topRightResizeHandle() const;

    void setBottomRightResizeHandle(QQuickItem *item);
    QQuickItem *bottomRightResizeHandle() const;

    int frameMarginLeft() const;
    void setFrameMarginLeft(int left);

    int frameMarginRight() const;
    void setFrameMarginRight(int right);

    int frameMarginTop() const;
    void setFrameMarginTop(int top);

    int frameMarginBottom() const;
    void setFrameMarginBottom(int bottom);

Q_SIGNALS:
    void currentWindowStateChanged();
    void currentWindowFlagsChanged();
    void windowMetaInfoChanged();
    void shellSurfaceItemChanged();
    void maximizedRectChanged();

    void titleBarChanged();
    void leftResizeHandleChanged();
    void rightResizeHandleChanged();
    void topResizeHandleChanged();
    void bottomResizeHandleChanged();
    void topLeftResizeHandleChanged();
    void bottomLeftResizeHandleChanged();
    void topRightResizeHandleChanged();
    void bottomRightResizeHandleChanged();

    void activated();
    void deactivated();

    void clientDestroyed();
    void frameMarginChanged();

public Q_SLOTS:
    void raise();
    void lower();
    void toggleMaximized();
    void toggleMinimized();
    void toggleFullScreen();
    void activate();
    void deactivate();

private Q_SLOTS:
    void activateOnGrab(QPointingDevice::GrabTransition transition);
    void updateSurface();
    void updateShellSurface();
    void updateWindowFlags();
    void updateWindowState();
    void updateGeometry();
    void updateDecorations();
    void updateActiveState();
    void updateAutomaticPosition();
    void stopGrab();
    void leftResize();
    void rightResize();
    void topResize();
    void bottomResize();
    void topLeftResize();
    void topRightResize();
    void bottomLeftResize();
    void bottomRightResize();
    void titleBarMove();

protected:
    QWaylandQtShellChrome(QWaylandQtShellChromePrivate &dd, QQuickItem *parent);

private:
    void setWindowState(uint nextState);
    void init();
    QRect maxContentRect() const;
};

QT_END_NAMESPACE

#endif // QWAYLANDQTSHELLSURFACEITEM_H