diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-03-20 11:14:24 +0100 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-03-20 11:14:24 +0100 |
| commit | a4b026df2b7f94b2985d38b1ef6fb127782c1a27 (patch) | |
| tree | c85f054baed6951fa096a358096fecc4e5c08a19 /src/Compositor.cpp | |
| parent | a4d69a15b34e54d8438a7242b151b1d31cbef46a (diff) | |
floating windows support
Diffstat (limited to 'src/Compositor.cpp')
| -rw-r--r-- | src/Compositor.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 559d4164..7ccc6ce8 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -204,6 +204,14 @@ CWindow* CCompositor::vectorToWindow(const Vector2D& pos) { CWindow* CCompositor::vectorToWindowIdeal(const Vector2D& pos) { const auto PMONITOR = getMonitorFromCursor(); + // first loop over floating cuz they're above + // TODO: make an actual Z-system + for (auto& w : m_lWindows) { + wlr_box box = {w.m_vRealPosition.x, w.m_vRealPosition.y, w.m_vRealSize.x, w.m_vRealSize.y}; + if (w.m_iMonitorID == PMONITOR->ID && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && w.m_bIsFloating) + return &w; + } + for (auto& w : m_lWindows) { wlr_box box = {w.m_vPosition.x, w.m_vPosition.y, w.m_vSize.x, w.m_vSize.y}; if (w.m_iMonitorID == PMONITOR->ID && wlr_box_contains_point(&box, pos.x, pos.y)) @@ -215,6 +223,15 @@ CWindow* CCompositor::vectorToWindowIdeal(const Vector2D& pos) { CWindow* CCompositor::windowFromCursor() { const auto PMONITOR = getMonitorFromCursor(); + + // first loop over floating cuz they're above + // TODO: make an actual Z-system + for (auto& w : m_lWindows) { + wlr_box box = {w.m_vRealPosition.x, w.m_vRealPosition.y, w.m_vRealSize.x, w.m_vRealSize.y}; + if (w.m_iMonitorID == PMONITOR->ID && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && w.m_bIsFloating) + return &w; + } + for (auto& w : m_lWindows) { wlr_box box = {w.m_vPosition.x, w.m_vPosition.y, w.m_vSize.x, w.m_vSize.y}; if (w.m_iMonitorID == PMONITOR->ID && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y)) @@ -224,6 +241,17 @@ CWindow* CCompositor::windowFromCursor() { return nullptr; } +CWindow* CCompositor::windowFloatingFromCursor() { + const auto PMONITOR = getMonitorFromCursor(); + for (auto& w : m_lWindows) { + wlr_box box = {w.m_vRealPosition.x, w.m_vRealPosition.y, w.m_vRealSize.x, w.m_vRealSize.y}; + if (w.m_iMonitorID == PMONITOR->ID && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && w.m_bIsFloating) + return &w; + } + + return nullptr; +} + SMonitor* CCompositor::getMonitorFromOutput(wlr_output* out) { for (auto& m : m_lMonitors) { if (m.output == out) { |
