summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorthejch <66577496+thejch@users.noreply.github.com>2024-03-16 07:49:34 -0700
committerGitHub <noreply@github.com>2024-03-16 14:49:34 +0000
commitc942ce6dce7f01415f71e5207da69b6989d3818c (patch)
treefcb8064234100b716770877fe61eb8c3851cc83d /src/render/Renderer.cpp
parent5e5d7e2abcd91c83058ba80ec64ec5054cae5bfa (diff)
renderer: add better multi monitor animations (#5126)
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 309e5742..cb60cd41 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -224,6 +224,15 @@ bool CHyprRenderer::shouldRenderWindow(CWindow* pWindow, CMonitor* pMonitor, CWo
if (pMonitor->specialWorkspaceID == pWindow->m_iWorkspaceID)
return true;
+ if (pWindow->m_vRealPosition.isBeingAnimated()) {
+ // render window if window and monitor intersect
+ // (when moving out of or through a monitor)
+ CBox windowBox = {pWindow->m_vRealPosition.value(), pWindow->m_vRealSize.value()};
+ const CBox monitorBox = {pMonitor->vecPosition, pMonitor->vecSize};
+ if (!windowBox.intersection(monitorBox).empty())
+ return true;
+ }
+
return false;
}
@@ -363,7 +372,7 @@ void CHyprRenderer::renderWorkspaceWindows(CMonitor* pMonitor, CWorkspace* pWork
continue;
// render active window after all others of this pass
- if (w.get() == g_pCompositor->m_pLastWindow && w->m_iWorkspaceID == pWorkspace->m_iID) {
+ if (w.get() == g_pCompositor->m_pLastWindow) {
lastWindow = w.get();
continue;
}
@@ -404,7 +413,7 @@ void CHyprRenderer::renderWorkspaceWindows(CMonitor* pMonitor, CWorkspace* pWork
if (!shouldRenderWindow(w.get(), pMonitor, pWorkspace))
continue;
- if (w->m_iMonitorID == pWorkspace->m_iMonitorID && pWorkspace->m_bIsSpecialWorkspace != g_pCompositor->isWorkspaceSpecial(w->m_iWorkspaceID))
+ if (pWorkspace->m_bIsSpecialWorkspace != g_pCompositor->isWorkspaceSpecial(w->m_iWorkspaceID))
continue;
if (pWorkspace->m_bIsSpecialWorkspace && w->m_iMonitorID != pWorkspace->m_iMonitorID)
@@ -781,7 +790,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(CMonitor* pMonitor, CWorkspace*
// special
for (auto& ws : g_pCompositor->m_vWorkspaces) {
- if (ws->m_iMonitorID == pMonitor->ID && ws->m_fAlpha.value() > 0.f && ws->m_bIsSpecialWorkspace) {
+ if (ws->m_fAlpha.value() > 0.f && ws->m_bIsSpecialWorkspace) {
if (ws->m_bHasFullscreenWindow)
renderWorkspaceWindowsFullscreen(pMonitor, ws.get(), time);
else