summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2022-09-19 17:26:11 +0100
committervaxerski <vaxry@vaxry.net>2022-09-19 17:26:11 +0100
commit85c7aaf15529dbff5af3460c099bcba2742b7652 (patch)
tree110ba240286ca7d96ddc0fea8e72026ecf67d16f /src
parent696253b3489fb57904b500b8265dfaf19ada56d6 (diff)
fade control for fullscreen action on windows
Diffstat (limited to 'src')
-rw-r--r--src/Compositor.cpp5
-rw-r--r--src/render/Renderer.cpp30
2 files changed, 33 insertions, 2 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 4a04c8ad..60d3195c 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -1614,8 +1614,11 @@ void CCompositor::setWindowFullscreen(CWindow* pWindow, bool on, eFullscreenMode
// make all windows on the same workspace under the fullscreen window
for (auto& w : g_pCompositor->m_vWindows) {
- if (w->m_iWorkspaceID == pWindow->m_iWorkspaceID)
+ if (w->m_iWorkspaceID == pWindow->m_iWorkspaceID) {
w->m_bCreatedOverFullscreen = false;
+ if (w.get() != pWindow && !w->m_bFadingOut)
+ w->m_fAlpha = pWindow->m_bIsFullscreen && mode == FULLSCREEN_FULL ? 0.f : 255.f;
+ }
}
const auto PMONITOR = getMonitorFromID(pWindow->m_iMonitorID);
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index bb39c955..fbfb1bc4 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -122,6 +122,34 @@ bool CHyprRenderer::shouldRenderWindow(CWindow* pWindow) {
void CHyprRenderer::renderWorkspaceWithFullscreenWindow(CMonitor* pMonitor, CWorkspace* pWorkspace, timespec* time) {
CWindow* pWorkspaceWindow = nullptr;
+ // loop over the tiled windows that are fading out
+ for (auto& w : g_pCompositor->m_vWindows) {
+ if (w->m_iWorkspaceID != pMonitor->activeWorkspace)
+ continue;
+
+ if (w->m_fAlpha.fl() == 0.f)
+ continue;
+
+ if (w->m_bIsFullscreen || w->m_bIsFloating)
+ continue;
+
+ renderWindow(w.get(), pMonitor, time, true, RENDER_PASS_ALL);
+ }
+
+ // and floating ones too
+ for (auto& w : g_pCompositor->m_vWindows) {
+ if (w->m_iWorkspaceID != pMonitor->activeWorkspace)
+ continue;
+
+ if (w->m_fAlpha.fl() == 0.f)
+ continue;
+
+ if (w->m_bIsFullscreen || !w->m_bIsFloating)
+ continue;
+
+ renderWindow(w.get(), pMonitor, time, true, RENDER_PASS_ALL);
+ }
+
for (auto& w : g_pCompositor->m_vWindows) {
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID);
@@ -141,7 +169,7 @@ void CHyprRenderer::renderWorkspaceWithFullscreenWindow(CMonitor* pMonitor, CWor
pWorkspaceWindow = w.get();
}
- // then render windows over fullscreen
+ // then render windows over fullscreen.
for (auto& w : g_pCompositor->m_vWindows) {
if (w->m_iWorkspaceID != pWorkspaceWindow->m_iWorkspaceID || (!w->m_bCreatedOverFullscreen && !w->m_bPinned) || !w->m_bIsMapped)
continue;