diff options
| author | vaxerski <vaxry@vaxry.net> | 2025-02-06 12:13:35 +0000 |
|---|---|---|
| committer | vaxerski <vaxry@vaxry.net> | 2025-02-06 12:15:41 +0000 |
| commit | 30b49c75bf04ceffc9fb1652a4d02e4eebacc24c (patch) | |
| tree | 1621a2b62d2b7bd3dad53810fffe9a5873237ca1 /src/desktop | |
| parent | ff9e059de6dd30c813270ff5a74053339cc94765 (diff) | |
popup: improve ::at() behavior
Diffstat (limited to 'src/desktop')
| -rw-r--r-- | src/desktop/Popup.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp index 4accb58f..82767ead 100644 --- a/src/desktop/Popup.cpp +++ b/src/desktop/Popup.cpp @@ -347,18 +347,19 @@ WP<CPopup> CPopup::at(const Vector2D& globalCoords, bool allowsInput) { continue; if (!allowsInput) { - const Vector2D offset = - p->m_pResource && p->m_pResource->surface ? (p->size() - p->m_pResource->geometry.size()) / 2.F - p->m_pResource->surface->current.geometry.pos() : Vector2D{}; - const Vector2D size = p->m_pResource ? p->m_pResource->geometry.size() : p->size(); + const bool HASSURFACE = p->m_pResource && p->m_pResource->surface; - const auto BOX = CBox{p->coordsGlobal() + offset, size}; + Vector2D offset = HASSURFACE ? p->m_pResource->surface->current.geometry.pos() : Vector2D{}; + Vector2D size = HASSURFACE ? p->m_pResource->surface->current.geometry.size() : p->size(); + + if (size == Vector2D{}) + size = p->size(); + + const auto BOX = CBox{p->coordsGlobal() + offset, size}; if (BOX.containsPoint(globalCoords)) return p; } else { - const Vector2D offset = - p->m_pResource && p->m_pResource->surface ? (p->size() - p->m_pResource->geometry.size()) / 2.F - p->m_pResource->surface->current.geometry.pos() : Vector2D{}; - const auto REGION = - CRegion{p->m_pWLSurface->resource()->current.input}.intersect(CBox{{}, p->m_pWLSurface->resource()->current.size}).translate(p->coordsGlobal() + offset); + const auto REGION = CRegion{p->m_pWLSurface->resource()->current.input}.intersect(CBox{{}, p->m_pWLSurface->resource()->current.size}).translate(p->coordsGlobal()); if (REGION.containsPoint(globalCoords)) return p; } |
