From 8bb908a8da3be119cc64552d4fe8a23cdfb938b8 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Thu, 5 May 2022 12:50:25 +0200 Subject: Added focusmonitor --- src/Compositor.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'src/Compositor.cpp') diff --git a/src/Compositor.cpp b/src/Compositor.cpp index b2d9ab57..3828e9e8 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -791,5 +791,66 @@ CWindow* CCompositor::getConstraintWindow(SMouse* pMouse) { } } + return nullptr; +} + +SMonitor* CCompositor::getMonitorInDirection(const char& dir) { + const auto POSA = m_pLastMonitor->vecPosition; + const auto SIZEA = m_pLastMonitor->vecSize; + + auto longestIntersect = -1; + SMonitor* longestIntersectMonitor = nullptr; + + for (auto& m : m_lMonitors) { + if (&m == m_pLastMonitor) + continue; + + const auto POSB = m.vecPosition; + const auto SIZEB = m.vecSize; + switch (dir) { + case 'l': + if (STICKS(POSA.x, POSB.x + SIZEB.x)) { + const auto INTERSECTLEN = std::max((double)0, std::min(POSA.y + SIZEA.y, POSB.y + SIZEB.y) - std::max(POSA.y, POSB.y)); + if (INTERSECTLEN > longestIntersect) { + longestIntersect = INTERSECTLEN; + longestIntersectMonitor = &m; + } + } + break; + case 'r': + if (STICKS(POSA.x + SIZEA.x, POSB.x)) { + const auto INTERSECTLEN = std::max((double)0, std::min(POSA.y + SIZEA.y, POSB.y + SIZEB.y) - std::max(POSA.y, POSB.y)); + if (INTERSECTLEN > longestIntersect) { + longestIntersect = INTERSECTLEN; + longestIntersectMonitor = &m; + } + } + break; + case 't': + case 'u': + if (STICKS(POSA.y, POSB.y + SIZEB.y)) { + const auto INTERSECTLEN = std::max((double)0, std::min(POSA.x + SIZEA.x, POSB.x + SIZEB.x) - std::max(POSA.x, POSB.x)); + if (INTERSECTLEN > longestIntersect) { + longestIntersect = INTERSECTLEN; + longestIntersectMonitor = &m; + } + } + break; + case 'b': + case 'd': + if (STICKS(POSA.y + SIZEA.y, POSB.y)) { + const auto INTERSECTLEN = std::max((double)0, std::min(POSA.x + SIZEA.x, POSB.x + SIZEB.x) - std::max(POSA.x, POSB.x)); + if (INTERSECTLEN > longestIntersect) { + longestIntersect = INTERSECTLEN; + longestIntersectMonitor = &m; + } + } + break; + } + } + + if (longestIntersect != -1) + return longestIntersectMonitor; + return nullptr; } \ No newline at end of file -- cgit v1.2.3