summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2025-06-11 17:52:16 +0200
committerVaxry <vaxry@vaxry.net>2025-06-11 17:52:23 +0200
commit412c7dc7f79cb6b04af41692504e82d4417e6e13 (patch)
tree6515bfadb5fbaae3365a9fc2ffedcab05f8277c3 /src/render/Renderer.cpp
parent8329de1ab530782aa3e45228632fce3b46fbf183 (diff)
renderer: fixup some missing fadeout cases with special
fixes some fadeout missing cases: - closing last window - closing above fs - closing in general fixes #10283
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp59
1 files changed, 31 insertions, 28 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index f33e6012..67832df1 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -850,9 +850,8 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
if (scale != 1.f)
RENDERMODIFDATA.modifs.emplace_back(std::make_pair<>(SRenderModifData::eRenderModifType::RMOD_TYPE_SCALE, scale));
- if (!RENDERMODIFDATA.modifs.empty()) {
+ if (!RENDERMODIFDATA.modifs.empty())
g_pHyprRenderer->m_renderPass.add(makeShared<CRendererHintsPassElement>(CRendererHintsPassElement::SData{RENDERMODIFDATA}));
- }
CScopeGuard x([&RENDERMODIFDATA] {
if (!RENDERMODIFDATA.modifs.empty()) {
@@ -911,41 +910,38 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
renderWorkspaceWindows(pMonitor, pWorkspace, time);
// and then special
- for (auto const& ws : g_pCompositor->m_workspaces) {
- if (ws->m_monitor == pMonitor && ws->m_alpha->value() > 0.f && ws->m_isSpecialWorkspace) {
- const auto SPECIALANIMPROGRS = ws->m_renderOffset->isBeingAnimated() ? ws->m_renderOffset->getCurveValue() : ws->m_alpha->getCurveValue();
- const bool ANIMOUT = !pMonitor->m_activeSpecialWorkspace;
-
- if (*PDIMSPECIAL != 0.f) {
- CRectPassElement::SRectData data;
- data.box = {translate.x, translate.y, pMonitor->m_transformedSize.x * scale, pMonitor->m_transformedSize.y * scale};
- data.color = CHyprColor(0, 0, 0, *PDIMSPECIAL * (ANIMOUT ? (1.0 - SPECIALANIMPROGRS) : SPECIALANIMPROGRS));
+ if (pMonitor->m_specialFade->value() != 0.F) {
+ const auto SPECIALANIMPROGRS = pMonitor->m_specialFade->getCurveValue();
+ const bool ANIMOUT = !pMonitor->m_activeSpecialWorkspace;
- g_pHyprRenderer->m_renderPass.add(makeShared<CRectPassElement>(data));
- }
+ if (*PDIMSPECIAL != 0.f) {
+ CRectPassElement::SRectData data;
+ data.box = {translate.x, translate.y, pMonitor->m_transformedSize.x * scale, pMonitor->m_transformedSize.y * scale};
+ data.color = CHyprColor(0, 0, 0, *PDIMSPECIAL * (ANIMOUT ? (1.0 - SPECIALANIMPROGRS) : SPECIALANIMPROGRS));
- if (*PBLURSPECIAL && *PBLUR) {
- CRectPassElement::SRectData data;
- data.box = {translate.x, translate.y, pMonitor->m_transformedSize.x * scale, pMonitor->m_transformedSize.y * scale};
- data.color = CHyprColor(0, 0, 0, 0);
- data.blur = true;
- data.blurA = (ANIMOUT ? (1.0 - SPECIALANIMPROGRS) : SPECIALANIMPROGRS);
+ g_pHyprRenderer->m_renderPass.add(makeShared<CRectPassElement>(data));
+ }
- g_pHyprRenderer->m_renderPass.add(makeShared<CRectPassElement>(data));
- }
+ if (*PBLURSPECIAL && *PBLUR) {
+ CRectPassElement::SRectData data;
+ data.box = {translate.x, translate.y, pMonitor->m_transformedSize.x * scale, pMonitor->m_transformedSize.y * scale};
+ data.color = CHyprColor(0, 0, 0, 0);
+ data.blur = true;
+ data.blurA = (ANIMOUT ? (1.0 - SPECIALANIMPROGRS) : SPECIALANIMPROGRS);
- break;
+ g_pHyprRenderer->m_renderPass.add(makeShared<CRectPassElement>(data));
}
}
// special
for (auto const& ws : g_pCompositor->m_workspaces) {
- if (ws->m_alpha->value() > 0.f && ws->m_isSpecialWorkspace) {
- if (ws->m_hasFullscreenWindow) {
- renderWorkspaceWindowsFullscreen(pMonitor, ws, time);
- } else
- renderWorkspaceWindows(pMonitor, ws, time);
- }
+ if (ws->m_alpha->value() <= 0.F || !ws->m_isSpecialWorkspace)
+ continue;
+
+ if (ws->m_hasFullscreenWindow)
+ renderWorkspaceWindowsFullscreen(pMonitor, ws, time);
+ else
+ renderWorkspaceWindows(pMonitor, ws, time);
}
// pinned always above
@@ -2161,6 +2157,13 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) {
if (pMonitor->m_activeSpecialWorkspace)
return;
+ for (auto const& ws : g_pCompositor->m_workspaces) {
+ if (ws->m_alpha->value() <= 0.F || !ws->m_isSpecialWorkspace || ws->m_monitor != pMonitor)
+ continue;
+
+ return;
+ }
+
// check if it did not open any subsurfaces or shit
int surfaceCount = 0;
if (PCANDIDATE->m_isX11)