summaryrefslogtreecommitdiff
path: root/src/helpers/WLSurface.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2023-10-20 20:15:41 +0100
committerVaxry <vaxry@vaxry.net>2023-10-20 20:15:57 +0100
commit7f35f33b4ca16509e127976772db6abd9abf100b (patch)
tree557326d4214617c3459d983001d969fbe6510448 /src/helpers/WLSurface.cpp
parentbab2f6a664a67dfd0c2f442dbc0134ef7c6e07e2 (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.cpp17
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;