diff options
| author | SoSeDiK <mrsosedik@gmail.com> | 2024-04-08 01:19:02 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-07 23:19:02 +0100 |
| commit | 43b96f03b5af60586a864ea64e8c71b11ea6eb85 (patch) | |
| tree | bc9744cfabddf1b14d356da4033ad780c9b62e8d /src | |
| parent | df1a3a978d61b976542beaadc7c0ab8468ddb5d0 (diff) | |
props: Allow setting per-window fullscreen opacity (#5470)
Diffstat (limited to 'src')
| -rw-r--r-- | src/Compositor.cpp | 5 | ||||
| -rw-r--r-- | src/debug/HyprCtl.cpp | 4 | ||||
| -rw-r--r-- | src/desktop/Window.cpp | 17 | ||||
| -rw-r--r-- | src/desktop/Window.hpp | 10 |
4 files changed, 26 insertions, 10 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 746011ef..5c42b8ff 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1922,7 +1922,10 @@ void CCompositor::updateWindowAnimatedDecorationValues(CWindow* pWindow) { // opacity const auto PWORKSPACE = pWindow->m_pWorkspace; if (pWindow->m_bIsFullscreen && PWORKSPACE->m_efFullscreenMode == FULLSCREEN_FULL) { - pWindow->m_fActiveInactiveAlpha = *PFULLSCREENALPHA; + pWindow->m_fActiveInactiveAlpha = pWindow->m_sSpecialRenderData.alphaFullscreen.toUnderlying() != -1 ? + (pWindow->m_sSpecialRenderData.alphaFullscreenOverride.toUnderlying() ? pWindow->m_sSpecialRenderData.alphaFullscreen.toUnderlying() : + pWindow->m_sSpecialRenderData.alphaFullscreen.toUnderlying() * *PFULLSCREENALPHA) : + *PFULLSCREENALPHA; } else { if (pWindow == m_pLastWindow) pWindow->m_fActiveInactiveAlpha = pWindow->m_sSpecialRenderData.alphaOverride.toUnderlying() ? pWindow->m_sSpecialRenderData.alpha.toUnderlying() : diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index d672a2d0..ad62de12 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -1209,6 +1209,10 @@ std::string dispatchSetProp(eHyprCtlOutputFormat format, std::string request) { PWINDOW->m_sSpecialRenderData.alphaInactiveOverride.forceSetIgnoreLocked(configStringToInt(VAL), lock); } else if (PROP == "alphainactive") { PWINDOW->m_sSpecialRenderData.alphaInactive.forceSetIgnoreLocked(std::stof(VAL), lock); + } else if (PROP == "alphafullscreenoverride") { + PWINDOW->m_sSpecialRenderData.alphaFullscreenOverride.forceSetIgnoreLocked(configStringToInt(VAL), lock); + } else if (PROP == "alphafullscreen") { + PWINDOW->m_sSpecialRenderData.alphaFullscreen.forceSetIgnoreLocked(std::stof(VAL), lock); } else if (PROP == "activebordercolor") { PWINDOW->m_sSpecialRenderData.activeBorderColor.forceSetIgnoreLocked(CGradientValueData(CColor(configStringToInt(VAL))), lock); } else if (PROP == "inactivebordercolor") { diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 75f1f4a9..902ec2ca 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -604,19 +604,26 @@ void CWindow::applyDynamicRule(const SWindowRule& r) { if (r == "override") { if (opacityIDX == 1) { - m_sSpecialRenderData.alphaOverride = true; - m_sSpecialRenderData.alphaInactiveOverride = true; + m_sSpecialRenderData.alphaOverride = true; + m_sSpecialRenderData.alphaInactiveOverride = true; + m_sSpecialRenderData.alphaFullscreenOverride = true; } else if (opacityIDX == 2) m_sSpecialRenderData.alphaInactiveOverride = true; + else if (opacityIDX == 3) + m_sSpecialRenderData.alphaFullscreenOverride = true; } else { if (opacityIDX == 0) { - m_sSpecialRenderData.alpha = std::stof(r); - m_sSpecialRenderData.alphaInactive = std::stof(r); + m_sSpecialRenderData.alpha = std::stof(r); + m_sSpecialRenderData.alphaInactive = std::stof(r); + m_sSpecialRenderData.alphaFullscreen = std::stof(r); } else if (opacityIDX == 1) { m_sSpecialRenderData.alphaInactive = std::stof(r); m_sSpecialRenderData.alphaInactiveOverride = false; + } else if (opacityIDX == 2) { + m_sSpecialRenderData.alphaFullscreen = std::stof(r); + m_sSpecialRenderData.alphaFullscreenOverride = false; } else { - throw std::runtime_error("more than 2 alpha values"); + throw std::runtime_error("more than 3 alpha values"); } opacityIDX++; diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index ae62e77e..3001f74e 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -126,10 +126,12 @@ class CWindowOverridableVar { }; struct SWindowSpecialRenderData { - CWindowOverridableVar<bool> alphaOverride = false; - CWindowOverridableVar<float> alpha = 1.f; - CWindowOverridableVar<bool> alphaInactiveOverride = false; - CWindowOverridableVar<float> alphaInactive = -1.f; // -1 means unset + CWindowOverridableVar<bool> alphaOverride = false; + CWindowOverridableVar<float> alpha = 1.f; + CWindowOverridableVar<bool> alphaInactiveOverride = false; + CWindowOverridableVar<float> alphaInactive = -1.f; // -1 means unset + CWindowOverridableVar<bool> alphaFullscreenOverride = false; + CWindowOverridableVar<float> alphaFullscreen = -1.f; // -1 means unset CWindowOverridableVar<CGradientValueData> activeBorderColor = CGradientValueData(); // empty color vector means unset CWindowOverridableVar<CGradientValueData> inactiveBorderColor = CGradientValueData(); // empty color vector means unset |
