blob: 4193089056e73ac406d0780173b51c5c40e1a70d (
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
|
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QWASMWINDOWSTACK_H
#define QWASMWINDOWSTACK_H
#include <qglobal.h>
#include <QtCore/qlist.h>
#include <vector>
QT_BEGIN_NAMESPACE
class QWasmWindow;
// Maintains a z-order hierarchy for a set of windows. The first added window is always treated as
// the 'root', which always stays at the bottom. Other windows are 'regular', which means they are
// subject to z-order changes via |raise| and |lower|/
// If the root is ever removed, all of the current and future windows in the stack are treated as
// regular.
// Access to the top element is facilitated by |topWindow|.
// Changes to the top element are signaled via the |topWindowChangedCallback| supplied at
// construction.
Q_AUTOTEST_EXPORT class QWasmWasmWindowStack
{
public:
using TopWindowChangedCallbackType = std::function<void()>;
using StorageType = QList<QWasmWindow *>;
using iterator = StorageType::reverse_iterator;
using const_iterator = StorageType::const_reverse_iterator;
using const_reverse_iterator = StorageType::const_iterator;
explicit QWasmWasmWindowStack(TopWindowChangedCallbackType topWindowChangedCallback);
~QWasmWasmWindowStack();
void pushWindow(QWasmWindow *window);
void removeWindow(QWasmWindow *window);
void raise(QWasmWindow *window);
void lower(QWasmWindow *window);
// Iterates top-to-bottom
iterator begin();
iterator end();
const_iterator begin() const;
const_iterator end() const;
// Iterates bottom-to-top
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;
bool empty() const;
size_t size() const;
QWasmWindow *topWindow() const;
private:
enum class FirstWindowTreatment { AlwaysAtBottom, Regular };
QWasmWindow *rootWindow() const;
StorageType::iterator regularWindowsBegin();
TopWindowChangedCallbackType m_topWindowChangedCallback;
QList<QWasmWindow *> m_windowStack;
FirstWindowTreatment m_firstWindowTreatment = FirstWindowTreatment::AlwaysAtBottom;
};
QT_END_NAMESPACE
#endif // QWASMWINDOWSTACK_H
|