summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2023-11-04 13:10:52 +0000
committerGitHub <noreply@github.com>2023-11-04 13:10:52 +0000
commit73e78f05ad5cafa20ac5bf177c94ac9ecca37097 (patch)
tree20a61de56d8542ef0d7e9be463aea181d7a73387 /src/render/Renderer.cpp
parent54e51b7acf809b4cf705ae516f78a910c70e651f (diff)
Decos: Window decoration flags, shadow improvements (#3739)
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp30
1 files changed, 28 insertions, 2 deletions
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);