summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wasm/qwasmwindowstack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmwindowstack.cpp')
-rw-r--r--src/plugins/platforms/wasm/qwasmwindowstack.cpp203
1 files changed, 0 insertions, 203 deletions
diff --git a/src/plugins/platforms/wasm/qwasmwindowstack.cpp b/src/plugins/platforms/wasm/qwasmwindowstack.cpp
deleted file mode 100644
index d3769c7a1bb..00000000000
--- a/src/plugins/platforms/wasm/qwasmwindowstack.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include "qwasmwindowstack.h"
-
-QT_BEGIN_NAMESPACE
-
-QWasmWindowStack::QWasmWindowStack(WindowOrderChangedCallbackType windowOrderChangedCallback)
- : m_windowOrderChangedCallback(std::move(windowOrderChangedCallback)),
- m_regularWindowsBegin(m_windowStack.begin()),
- m_alwaysOnTopWindowsBegin(m_windowStack.begin())
-{
-}
-
-QWasmWindowStack::~QWasmWindowStack() = default;
-
-void QWasmWindowStack::pushWindow(QWasmWindow *window, PositionPreference position)
-{
- Q_ASSERT(m_windowStack.count(window) == 0);
-
- if (position == PositionPreference::StayOnTop) {
- const auto stayOnTopDistance =
- std::distance(m_windowStack.begin(), m_alwaysOnTopWindowsBegin);
- const auto regularDistance = std::distance(m_windowStack.begin(), m_regularWindowsBegin);
- m_windowStack.push_back(window);
- m_alwaysOnTopWindowsBegin = m_windowStack.begin() + stayOnTopDistance;
- m_regularWindowsBegin = m_windowStack.begin() + regularDistance;
- } else if (position == PositionPreference::Regular) {
- const auto regularDistance = std::distance(m_windowStack.begin(), m_regularWindowsBegin);
- m_alwaysOnTopWindowsBegin = m_windowStack.insert(m_alwaysOnTopWindowsBegin, window) + 1;
- m_regularWindowsBegin = m_windowStack.begin() + regularDistance;
- } else {
- const auto stayOnTopDistance =
- std::distance(m_windowStack.begin(), m_alwaysOnTopWindowsBegin);
- m_regularWindowsBegin = m_windowStack.insert(m_regularWindowsBegin, window) + 1;
- m_alwaysOnTopWindowsBegin = m_windowStack.begin() + stayOnTopDistance + 1;
- }
-
- m_windowOrderChangedCallback();
-}
-
-void QWasmWindowStack::removeWindow(QWasmWindow *window)
-{
- Q_ASSERT(m_windowStack.count(window) == 1);
-
- auto it = std::find(m_windowStack.begin(), m_windowStack.end(), window);
- const auto position = getWindowPositionPreference(it);
- const auto stayOnTopDistance = std::distance(m_windowStack.begin(), m_alwaysOnTopWindowsBegin);
- const auto regularDistance = std::distance(m_windowStack.begin(), m_regularWindowsBegin);
-
- m_windowStack.erase(it);
-
- m_alwaysOnTopWindowsBegin = m_windowStack.begin() + stayOnTopDistance
- - (position != PositionPreference::StayOnTop ? 1 : 0);
- m_regularWindowsBegin = m_windowStack.begin() + regularDistance
- - (position == PositionPreference::StayOnBottom ? 1 : 0);
-
- m_windowOrderChangedCallback();
-}
-
-void QWasmWindowStack::raise(QWasmWindow *window)
-{
- Q_ASSERT(m_windowStack.count(window) == 1);
-
- if (window == topWindow())
- return;
-
- auto it = std::find(m_windowStack.begin(), m_windowStack.end(), window);
- auto itEnd = ([this, position = getWindowPositionPreference(it)]() {
- switch (position) {
- case PositionPreference::StayOnTop:
- return m_windowStack.end();
- case PositionPreference::Regular:
- return m_alwaysOnTopWindowsBegin;
- case PositionPreference::StayOnBottom:
- return m_regularWindowsBegin;
- }
- })();
- std::rotate(it, it + 1, itEnd);
- m_windowOrderChangedCallback();
-}
-
-void QWasmWindowStack::lower(QWasmWindow *window)
-{
- Q_ASSERT(m_windowStack.count(window) == 1);
-
- if (window == *m_windowStack.begin())
- return;
-
- auto it = std::find(m_windowStack.begin(), m_windowStack.end(), window);
- auto itBegin = ([this, position = getWindowPositionPreference(it)]() {
- switch (position) {
- case PositionPreference::StayOnTop:
- return m_alwaysOnTopWindowsBegin;
- case PositionPreference::Regular:
- return m_regularWindowsBegin;
- case PositionPreference::StayOnBottom:
- return m_windowStack.begin();
- }
- })();
-
- std::rotate(itBegin, it, it + 1);
- m_windowOrderChangedCallback();
-}
-
-void QWasmWindowStack::windowPositionPreferenceChanged(QWasmWindow *window,
- PositionPreference position)
-{
- auto it = std::find(m_windowStack.begin(), m_windowStack.end(), window);
- const auto currentPosition = getWindowPositionPreference(it);
-
- const auto zones = static_cast<int>(position) - static_cast<int>(currentPosition);
- Q_ASSERT(zones != 0);
-
- if (zones < 0) {
- // Perform right rotation so that the window lands on top of regular windows
- const auto begin = std::make_reverse_iterator(it + 1);
- const auto end = position == PositionPreference::Regular
- ? std::make_reverse_iterator(m_alwaysOnTopWindowsBegin)
- : std::make_reverse_iterator(m_regularWindowsBegin);
- std::rotate(begin, begin + 1, end);
- if (zones == -2) {
- ++m_alwaysOnTopWindowsBegin;
- ++m_regularWindowsBegin;
- } else if (position == PositionPreference::Regular) {
- ++m_alwaysOnTopWindowsBegin;
- } else {
- ++m_regularWindowsBegin;
- }
- } else {
- // Perform left rotation so that the window lands at the bottom of always on top windows
- const auto begin = it;
- const auto end = position == PositionPreference::Regular ? m_regularWindowsBegin
- : m_alwaysOnTopWindowsBegin;
- std::rotate(begin, begin + 1, end);
- if (zones == 2) {
- --m_alwaysOnTopWindowsBegin;
- --m_regularWindowsBegin;
- } else if (position == PositionPreference::Regular) {
- --m_regularWindowsBegin;
- } else {
- --m_alwaysOnTopWindowsBegin;
- }
- }
- m_windowOrderChangedCallback();
-}
-
-QWasmWindowStack::iterator QWasmWindowStack::begin()
-{
- return m_windowStack.rbegin();
-}
-
-QWasmWindowStack::iterator QWasmWindowStack::end()
-{
- return m_windowStack.rend();
-}
-
-QWasmWindowStack::const_iterator QWasmWindowStack::begin() const
-{
- return m_windowStack.rbegin();
-}
-
-QWasmWindowStack::const_iterator QWasmWindowStack::end() const
-{
- return m_windowStack.rend();
-}
-
-QWasmWindowStack::const_reverse_iterator QWasmWindowStack::rbegin() const
-{
- return m_windowStack.begin();
-}
-
-QWasmWindowStack::const_reverse_iterator QWasmWindowStack::rend() const
-{
- return m_windowStack.end();
-}
-
-bool QWasmWindowStack::empty() const
-{
- return m_windowStack.empty();
-}
-
-size_t QWasmWindowStack::size() const
-{
- return m_windowStack.size();
-}
-
-QWasmWindow *QWasmWindowStack::topWindow() const
-{
- return m_windowStack.empty() ? nullptr : m_windowStack.last();
-}
-
-QWasmWindowStack::PositionPreference
-QWasmWindowStack::getWindowPositionPreference(StorageType::iterator windowIt) const
-{
- if (windowIt >= m_alwaysOnTopWindowsBegin)
- return PositionPreference::StayOnTop;
- if (windowIt >= m_regularWindowsBegin)
- return PositionPreference::Regular;
- return PositionPreference::StayOnBottom;
-}
-
-QT_END_NAMESPACE