From 88b63a00b68350d6d001445357a2582ab5975f9c Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Thu, 28 Sep 2023 21:48:33 +0100 Subject: renderer: Tearing implementation (#3441) --- src/helpers/SubsurfaceTree.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/helpers/SubsurfaceTree.cpp') diff --git a/src/helpers/SubsurfaceTree.cpp b/src/helpers/SubsurfaceTree.cpp index 5e3e9e67..5b86f928 100644 --- a/src/helpers/SubsurfaceTree.cpp +++ b/src/helpers/SubsurfaceTree.cpp @@ -245,6 +245,15 @@ void Events::listener_commitSubsurface(void* owner, void* data) { if (pNode->pSurface && pNode->pSurface->exists()) g_pHyprRenderer->damageSurface(pNode->pSurface->wlr(), lx, ly, SCALE); + + if (pNode->pWindowOwner) { + // tearing: if solitary, redraw it. This still might be a single surface window + const auto PMONITOR = g_pCompositor->getMonitorFromID(pNode->pWindowOwner->m_iMonitorID); + if (PMONITOR->solitaryClient == pNode->pWindowOwner && pNode->pWindowOwner->canBeTorn() && PMONITOR->canTear) { + PMONITOR->nextRenderTorn = true; + g_pHyprRenderer->renderMonitor(PMONITOR); + } + } } void Events::listener_destroySubsurface(void* owner, void* data) { -- cgit v1.2.3