diff options
| author | Vaxry <vaxry@vaxry.net> | 2024-04-21 21:21:22 +0100 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2024-04-21 21:21:22 +0100 |
| commit | f587c3e0ba92109302032f89321d94b5d0f89236 (patch) | |
| tree | 65034aed209a3e10c41a15c6a30d30bf526adf72 /src/render/Renderer.cpp | |
| parent | 87173bd09daa4b56adabcfc72a29aec957cb8a13 (diff) | |
alpha-modifier: add support for protocol
Diffstat (limited to 'src/render/Renderer.cpp')
| -rw-r--r-- | src/render/Renderer.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index a51901b4..957d3263 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -96,12 +96,15 @@ static void renderSurface(struct wlr_surface* surface, int x, int y, void* data) double outputX = 0, outputY = 0; wlr_output_layout_output_coords(g_pCompositor->m_sWLROutputLayout, RDATA->pMonitor->output, &outputX, &outputY); + auto* const PSURFACE = CWLSurface::surfaceFromWlr(surface); + + const float ALPHA = RDATA->alpha * RDATA->fadeAlpha * (PSURFACE ? PSURFACE->m_pAlphaModifier : 1.F); + CBox windowBox; if (RDATA->surface && surface == RDATA->surface) { windowBox = {(int)outputX + RDATA->x + x, (int)outputY + RDATA->y + y, RDATA->w, RDATA->h}; // however, if surface buffer w / h < box, we need to adjust them - auto* const PSURFACE = CWLSurface::surfaceFromWlr(surface); const auto PWINDOW = PSURFACE ? PSURFACE->getWindow() : nullptr; if (PSURFACE && !PSURFACE->m_bFillIgnoreSmall && PSURFACE->small() /* guarantees PWINDOW */) { @@ -175,7 +178,7 @@ static void renderSurface(struct wlr_surface* surface, int x, int y, void* data) rounding = 0; const bool WINDOWOPAQUE = RDATA->pWindow && RDATA->pWindow->m_pWLSurface.wlr() == surface ? RDATA->pWindow->opaque() : false; - const bool CANDISABLEBLEND = RDATA->alpha * RDATA->fadeAlpha >= 1.f && rounding == 0 && (WINDOWOPAQUE || surface->opaque); + const bool CANDISABLEBLEND = ALPHA >= 1.f && rounding == 0 && (WINDOWOPAQUE || surface->opaque); if (CANDISABLEBLEND) g_pHyprOpenGL->blend(false); @@ -183,19 +186,19 @@ static void renderSurface(struct wlr_surface* surface, int x, int y, void* data) g_pHyprOpenGL->blend(true); if (RDATA->surface && surface == RDATA->surface) { - if (wlr_xwayland_surface_try_from_wlr_surface(surface) && !wlr_xwayland_surface_try_from_wlr_surface(surface)->has_alpha && RDATA->fadeAlpha * RDATA->alpha == 1.f) { - g_pHyprOpenGL->renderTexture(TEXTURE, &windowBox, RDATA->fadeAlpha * RDATA->alpha, rounding, true); + if (wlr_xwayland_surface_try_from_wlr_surface(surface) && !wlr_xwayland_surface_try_from_wlr_surface(surface)->has_alpha && ALPHA == 1.f) { + g_pHyprOpenGL->renderTexture(TEXTURE, &windowBox, ALPHA, rounding, true); } else { if (RDATA->blur) - g_pHyprOpenGL->renderTextureWithBlur(TEXTURE, &windowBox, RDATA->fadeAlpha * RDATA->alpha, surface, rounding, RDATA->blockBlurOptimization, RDATA->fadeAlpha); + g_pHyprOpenGL->renderTextureWithBlur(TEXTURE, &windowBox, ALPHA, surface, rounding, RDATA->blockBlurOptimization, RDATA->fadeAlpha); else - g_pHyprOpenGL->renderTexture(TEXTURE, &windowBox, RDATA->fadeAlpha * RDATA->alpha, rounding, true); + g_pHyprOpenGL->renderTexture(TEXTURE, &windowBox, ALPHA, rounding, true); } } else { if (RDATA->blur && RDATA->popup) - g_pHyprOpenGL->renderTextureWithBlur(TEXTURE, &windowBox, RDATA->fadeAlpha * RDATA->alpha, surface, rounding, true, RDATA->fadeAlpha); + g_pHyprOpenGL->renderTextureWithBlur(TEXTURE, &windowBox, ALPHA, surface, rounding, true, RDATA->fadeAlpha); else - g_pHyprOpenGL->renderTexture(TEXTURE, &windowBox, RDATA->fadeAlpha * RDATA->alpha, rounding, true); + g_pHyprOpenGL->renderTexture(TEXTURE, &windowBox, ALPHA, rounding, true); } if (!g_pHyprRenderer->m_bBlockSurfaceFeedback) { |
