From 73e78f05ad5cafa20ac5bf177c94ac9ecca37097 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sat, 4 Nov 2023 13:10:52 +0000 Subject: Decos: Window decoration flags, shadow improvements (#3739) --- src/render/Renderer.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'src/render/Renderer.cpp') diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 1b59afe8..82175b99 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -425,9 +425,21 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec* } } - if (!pWindow->m_bIsFullscreen || PWORKSPACE->m_efFullscreenMode != FULLSCREEN_FULL) - for (auto& wd : pWindow->m_dWindowDecorations) + if (!pWindow->m_bIsFullscreen || PWORKSPACE->m_efFullscreenMode != FULLSCREEN_FULL) { + for (auto& wd : pWindow->m_dWindowDecorations) { + if (wd->getDecorationLayer() != DECORATION_LAYER_BOTTOM) + continue; + + wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha, Vector2D{renderdata.x, renderdata.y} - PREOFFSETPOS); + } + + for (auto& wd : pWindow->m_dWindowDecorations) { + if (wd->getDecorationLayer() != DECORATION_LAYER_UNDER) + continue; + wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha, Vector2D{renderdata.x, renderdata.y} - PREOFFSETPOS); + } + } static auto* const PXWLUSENN = &g_pConfigManager->getConfigValuePtr("xwayland:use_nearest_neighbor")->intValue; if ((pWindow->m_bIsX11 && *PXWLUSENN) || pWindow->m_sAdditionalConfigData.nearestNeighbor.toUnderlying()) @@ -470,6 +482,13 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec* } } + for (auto& wd : pWindow->m_dWindowDecorations) { + if (wd->getDecorationLayer() != DECORATION_LAYER_OVER) + continue; + + wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha, Vector2D{renderdata.x, renderdata.y} - PREOFFSETPOS); + } + if (TRANSFORMERSPRESENT) { CFramebuffer* last = g_pHyprOpenGL->m_RenderData.currentFB; @@ -501,6 +520,13 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec* g_pHyprOpenGL->m_RenderData.useNearestNeighbor = false; } + + for (auto& wd : pWindow->m_dWindowDecorations) { + if (wd->getDecorationLayer() != DECORATION_LAYER_OVERLAY) + continue; + + wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha, Vector2D{renderdata.x, renderdata.y} - PREOFFSETPOS); + } } EMIT_HOOK_EVENT("render", RENDER_POST_WINDOW); -- cgit v1.2.3