From e4790e3f8e8f3693d924c3d8fc9012e3ab7bbf8f Mon Sep 17 00:00:00 2001 From: vaxerski Date: Mon, 19 Feb 2024 11:24:54 +0000 Subject: surface: fix invalid damage tracking in damageSurface ref #4744 --- src/helpers/WLSurface.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/helpers/WLSurface.cpp') diff --git a/src/helpers/WLSurface.cpp b/src/helpers/WLSurface.cpp index 3528a72d..99771d0d 100644 --- a/src/helpers/WLSurface.cpp +++ b/src/helpers/WLSurface.cpp @@ -52,6 +52,20 @@ Vector2D CWLSurface::getViewporterCorrectedSize() const { Vector2D{m_pWLRSurface->current.buffer_width, m_pWLRSurface->current.buffer_height}; } +CRegion CWLSurface::logicalDamage() const { + CRegion damage{&m_pWLRSurface->buffer_damage}; + damage.transform(m_pWLRSurface->current.transform, m_pWLRSurface->current.buffer_width, m_pWLRSurface->current.buffer_height); + damage.scale(1.0 / m_pWLRSurface->current.scale); + + const auto VPSIZE = getViewporterCorrectedSize() / m_pWLRSurface->current.scale; + const auto CORRECTVEC = correctSmallVec(); + + damage.scale({VPSIZE.x / m_pWLRSurface->current.width, VPSIZE.y / m_pWLRSurface->current.height}); + damage.translate(CORRECTVEC); + + return damage; +} + void CWLSurface::destroy() { if (!m_pWLRSurface) return; -- cgit v1.2.3