diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-25 18:40:03 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-25 18:40:03 +0200 |
| commit | 08d4d987cf9e25332a358667332507fb3491ce9b (patch) | |
| tree | 52dfe1c2fd9bf142b4247e0dfdb3e8ec1ae79ef2 /src/Compositor.cpp | |
| parent | 5635c6385f7bc99c415ef76b3c1b83a210073224 (diff) | |
return nearest mon if point out of range
Diffstat (limited to 'src/Compositor.cpp')
| -rw-r--r-- | src/Compositor.cpp | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 76b0460e..82e2986e 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -246,29 +246,32 @@ SMonitor* CCompositor::getMonitorFromID(const int& id) { SMonitor* CCompositor::getMonitorFromCursor() { const auto COORDS = Vector2D(m_sWLRCursor->x, m_sWLRCursor->y); - const auto OUTPUT = wlr_output_layout_output_at(m_sWLROutputLayout, COORDS.x, COORDS.y); - if (!OUTPUT) { - Debug::log(WARN, "getMonitorFromCursor: cursor outside monitors??"); - return &m_lMonitors.front(); - } - - for (auto& m : m_lMonitors) { - if (m.output == OUTPUT) - return &m; - } - - Debug::log(LOG, "Monitor not in list??"); - - return &m_lMonitors.front(); + return getMonitorFromVector(COORDS); } SMonitor* CCompositor::getMonitorFromVector(const Vector2D& point) { const auto OUTPUT = wlr_output_layout_output_at(m_sWLROutputLayout, point.x, point.y); if (!OUTPUT) { - Debug::log(WARN, "getMonitorFromVector: vector outside monitors? Returning front"); - return &m_lMonitors.front(); + float bestDistance = 0.f; + SMonitor* pBestMon = nullptr; + + for (auto& m : m_lMonitors) { + float dist = vecToRectDistanceSquared(point, m.vecPosition, m.vecPosition + m.vecSize); + + if (dist < bestDistance || !pBestMon) { + bestDistance = dist; + pBestMon = &m; + } + } + + if (!pBestMon) { // ????? + Debug::log(WARN, "getMonitorFromVector no close mon???"); + return &m_lMonitors.front(); + } + + return pBestMon; } return getMonitorFromOutput(OUTPUT); |
