summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSoSeDiK <mrsosedik@gmail.com>2024-04-08 01:19:02 +0300
committerGitHub <noreply@github.com>2024-04-07 23:19:02 +0100
commit43b96f03b5af60586a864ea64e8c71b11ea6eb85 (patch)
treebc9744cfabddf1b14d356da4033ad780c9b62e8d /src
parentdf1a3a978d61b976542beaadc7c0ab8468ddb5d0 (diff)
props: Allow setting per-window fullscreen opacity (#5470)
Diffstat (limited to 'src')
-rw-r--r--src/Compositor.cpp5
-rw-r--r--src/debug/HyprCtl.cpp4
-rw-r--r--src/desktop/Window.cpp17
-rw-r--r--src/desktop/Window.hpp10
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