summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorNarice <narice@tutanota.com>2022-05-16 11:53:28 +0100
committerGitHub <noreply@github.com>2022-05-16 11:53:28 +0100
commit23c3534197f54e2f74b791ce2a8857b25bbba259 (patch)
treec48e00553bb7027779b19e93a7f631a5f10eee98 /src/render/Renderer.cpp
parent4f10d8e07dd330bf1c4ce9eebecc0db919e522d9 (diff)
parente991550abe8f4b13af586d635cdfec3b5c18fcd9 (diff)
Merge branch 'vaxerski:main' into main
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index be51336c..22060e83 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -70,8 +70,7 @@ void CHyprRenderer::renderWorkspaceWithFullscreenWindow(SMonitor* pMonitor, CWor
// and the overlay layers
for (auto& ls : pMonitor->m_aLayerSurfaceLists[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]) {
- SRenderData renderdata = {pMonitor->output, time, ls->geometry.x, ls->geometry.y};
- wlr_surface_for_each_surface(ls->layerSurface->surface, renderSurface, &renderdata);
+ renderLayer(ls, pMonitor, time);
}
renderDragIcon(pMonitor, time);
@@ -121,6 +120,17 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, SMonitor* pMonitor, timespec*
}
}
+void CHyprRenderer::renderLayer(SLayerSurface* pLayer, SMonitor* pMonitor, timespec* time) {
+ if (pLayer->fadingOut) {
+ g_pHyprOpenGL->renderSnapshot(&pLayer);
+ return;
+ }
+
+ SRenderData renderdata = {pMonitor->output, time, pLayer->geometry.x, pLayer->geometry.y};
+ renderdata.fadeAlpha = pLayer->alpha.fl();
+ wlr_surface_for_each_surface(pLayer->layerSurface->surface, renderSurface, &renderdata);
+}
+
void CHyprRenderer::renderAllClientsForMonitor(const int& ID, timespec* time) {
const auto PMONITOR = g_pCompositor->getMonitorFromID(ID);
@@ -129,12 +139,10 @@ void CHyprRenderer::renderAllClientsForMonitor(const int& ID, timespec* time) {
// Render layer surfaces below windows for monitor
for (auto& ls : PMONITOR->m_aLayerSurfaceLists[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]) {
- SRenderData renderdata = {PMONITOR->output, time, ls->geometry.x, ls->geometry.y};
- wlr_surface_for_each_surface(ls->layerSurface->surface, renderSurface, &renderdata);
+ renderLayer(ls, PMONITOR, time);
}
for (auto& ls : PMONITOR->m_aLayerSurfaceLists[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]) {
- SRenderData renderdata = {PMONITOR->output, time, ls->geometry.x, ls->geometry.y};
- wlr_surface_for_each_surface(ls->layerSurface->surface, renderSurface, &renderdata);
+ renderLayer(ls, PMONITOR, time);
}
// if there is a fullscreen window, render it and then do not render anymore.
@@ -178,12 +186,10 @@ void CHyprRenderer::renderAllClientsForMonitor(const int& ID, timespec* time) {
// Render surfaces above windows for monitor
for (auto& ls : PMONITOR->m_aLayerSurfaceLists[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) {
- SRenderData renderdata = {PMONITOR->output, time, ls->geometry.x, ls->geometry.y};
- wlr_surface_for_each_surface(ls->layerSurface->surface, renderSurface, &renderdata);
+ renderLayer(ls, PMONITOR, time);
}
for (auto& ls : PMONITOR->m_aLayerSurfaceLists[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]) {
- SRenderData renderdata = {PMONITOR->output, time, ls->geometry.x, ls->geometry.y};
- wlr_surface_for_each_surface(ls->layerSurface->surface, renderSurface, &renderdata);
+ renderLayer(ls, PMONITOR, time);
}
renderDragIcon(PMONITOR, time);
@@ -316,6 +322,9 @@ void CHyprRenderer::arrangeLayerArray(SMonitor* pMonitor, const std::list<SLayer
wlr_box full_area = {pMonitor->vecPosition.x, pMonitor->vecPosition.y, pMonitor->vecSize.x, pMonitor->vecSize.y};
for (auto& ls : layerSurfaces) {
+ if (ls->fadingOut || ls->readyToDelete)
+ continue;
+
const auto PLAYER = ls->layerSurface;
const auto PSTATE = &PLAYER->current;
if (exclusiveZone != (PSTATE->exclusive_zone > 0)) {