diff options
| author | Mihai Fufezan <mihai@fufexan.net> | 2026-04-03 00:36:58 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-02 22:36:58 +0100 |
| commit | f25473b21b45ab8ded4a0dbba69eb6b6660d568e (patch) | |
| tree | 9ddcc506b7dbee01ef5f92922e643ea9387047a5 /src/render/Renderer.cpp | |
| parent | ad906a473f2deffba59b40de44936e17e61f95aa (diff) | |
render: fix layer blur_popups ignoring ignore_alpha when blur is off (#13947)
Diffstat (limited to 'src/render/Renderer.cpp')
| -rw-r--r-- | src/render/Renderer.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 1b735a46..a9643df0 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -916,7 +916,6 @@ void IHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s renderdata.blockBlurOptimization = pLayer->m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM || pLayer->m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND; renderdata.clipBox = CBox{0, 0, pMonitor->m_size.x, pMonitor->m_size.y}.scale(pMonitor->m_scale); - if (renderdata.blur && pLayer->m_ruleApplicator->ignoreAlpha().hasValue()) { renderdata.discardMode |= DISCARD_ALPHA; renderdata.discardOpacity = pLayer->m_ruleApplicator->ignoreAlpha().valueOrDefault(); @@ -944,7 +943,13 @@ void IHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s renderdata.dontRound = true; renderdata.popup = true; renderdata.blur = pLayer->m_ruleApplicator->blurPopups().valueOrDefault(); - renderdata.surfaceCounter = 0; + renderdata.discardMode &= ~DISCARD_ALPHA; + renderdata.discardOpacity = 0.F; + if (renderdata.blur && pLayer->m_ruleApplicator->ignoreAlpha().hasValue()) { + renderdata.discardMode |= DISCARD_ALPHA; + renderdata.discardOpacity = pLayer->m_ruleApplicator->ignoreAlpha().valueOrDefault(); + } + renderdata.surfaceCounter = 0; if (popups) { pLayer->m_popupHead->breadthfirst( [this, &renderdata](WP<Desktop::View::CPopup> popup, void* data) { @@ -3157,8 +3162,12 @@ void IHyprRenderer::renderSnapshot(WP<Desktop::View::CPopup> popup) { data.blur = SHOULD_BLUR; data.blurA = sqrt(popup->m_alpha->value()); // sqrt makes the blur fadeout more realistic. data.blockBlurOptimization = SHOULD_BLUR; // force no xray on this (popups never have xray) - if (SHOULD_BLUR) - data.ignoreAlpha = std::max(*PBLURIGNOREA, 0.01F); /* ignore the alpha 0 regions */ + if (SHOULD_BLUR) { + if (const auto PLAYER = popup->layerOwner(); PLAYER && PLAYER->m_ruleApplicator->ignoreAlpha().hasValue()) + data.ignoreAlpha = std::max(PLAYER->m_ruleApplicator->ignoreAlpha().valueOrDefault(), 0.01F); + else + data.ignoreAlpha = std::max(*PBLURIGNOREA, 0.01F); /* ignore the alpha 0 regions */ + } m_renderPass.add(makeUnique<CTexPassElement>(std::move(data))); } |
