diff options
| author | Vaxry <vaxry@vaxry.net> | 2023-10-20 20:15:41 +0100 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2023-10-20 20:15:57 +0100 |
| commit | 7f35f33b4ca16509e127976772db6abd9abf100b (patch) | |
| tree | 557326d4214617c3459d983001d969fbe6510448 /src/helpers/WLSurface.cpp | |
| parent | bab2f6a664a67dfd0c2f442dbc0134ef7c6e07e2 (diff) | |
surface/wayland: conform to small surface requirements
do not stretch small surfaces, instead center them if they fit.
Diffstat (limited to 'src/helpers/WLSurface.cpp')
| -rw-r--r-- | src/helpers/WLSurface.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/helpers/WLSurface.cpp b/src/helpers/WLSurface.cpp index 8524c9a5..a34c77a1 100644 --- a/src/helpers/WLSurface.cpp +++ b/src/helpers/WLSurface.cpp @@ -27,12 +27,29 @@ wlr_surface* CWLSurface::wlr() const { return m_pWLRSurface; } +bool CWLSurface::small() const { + if (!m_pOwner || !exists()) + return false; + + return m_pOwner->m_vReportedSize.x > m_pWLRSurface->current.buffer_width || m_pOwner->m_vReportedSize.y > m_pWLRSurface->current.buffer_height; +} + +Vector2D CWLSurface::correctSmallVec() const { + if (!m_pOwner || !exists() || !small() || m_bFillIgnoreSmall) + return {}; + + return Vector2D{(m_pOwner->m_vReportedSize.x - m_pWLRSurface->current.buffer_width) / 2, (m_pOwner->m_vReportedSize.y - m_pWLRSurface->current.buffer_height) / 2}.clamp( + {}, {INFINITY, INFINITY}) * + (m_pOwner->m_vRealSize.vec() / m_pOwner->m_vReportedSize); +} + void CWLSurface::destroy() { if (!m_pWLRSurface) return; hyprListener_destroy.removeCallback(); m_pWLRSurface->data = nullptr; + m_pOwner = nullptr; if (g_pCompositor->m_pLastFocus == m_pWLRSurface) g_pCompositor->m_pLastFocus = nullptr; |
