From a4b026df2b7f94b2985d38b1ef6fb127782c1a27 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sun, 20 Mar 2022 11:14:24 +0100 Subject: floating windows support --- src/Compositor.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/Compositor.cpp') 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) { -- cgit v1.2.3