aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorVaxry <[email protected]>2023-11-11 00:52:40 +0000
committerVaxry <[email protected]>2023-11-11 00:52:40 +0000
commite44d6de555da72bd45ebd01c1293d53ea2700d3f (patch)
tree19b42ec45750cbfe4bd8a9268940776c0a2317f0
parent427153e86ad7070ea0e4d39f7fd348b8f720e055 (diff)
downloadHyprland-e44d6de555da72bd45ebd01c1293d53ea2700d3f.tar.gz
Hyprland-e44d6de555da72bd45ebd01c1293d53ea2700d3f.zip
shadow: alpha treatment improvements
-rw-r--r--src/helpers/Color.hpp6
-rw-r--r--src/render/decorations/CHyprDropShadowDecoration.cpp6
2 files changed, 8 insertions, 4 deletions
diff --git a/src/helpers/Color.hpp b/src/helpers/Color.hpp
index ffd6d2d8..98ffa476 100644
--- a/src/helpers/Color.hpp
+++ b/src/helpers/Color.hpp
@@ -5,7 +5,7 @@
class CColor {
public:
CColor();
- CColor(float, float, float, float);
+ CColor(float r, float g, float b, float a);
CColor(uint64_t);
float r = 0, g = 0, b = 0, a = 1.f;
@@ -27,4 +27,8 @@ class CColor {
bool operator==(const CColor& c2) const {
return r == c2.r && g == c2.g && b == c2.b && a == c2.a;
}
+
+ CColor stripA() const {
+ return {r, g, b, 1};
+ }
};
diff --git a/src/render/decorations/CHyprDropShadowDecoration.cpp b/src/render/decorations/CHyprDropShadowDecoration.cpp
index 68a82c3a..ac6c5b43 100644
--- a/src/render/decorations/CHyprDropShadowDecoration.cpp
+++ b/src/render/decorations/CHyprDropShadowDecoration.cpp
@@ -150,8 +150,8 @@ void CHyprDropShadowDecoration::draw(CMonitor* pMonitor, float a, const Vector2D
// first, clear with black (fully transparent)
g_pHyprOpenGL->clear(CColor(0, 0, 0, 1));
- // render white shadow
- g_pHyprOpenGL->renderRoundedShadow(&fullBox, ROUNDING * pMonitor->scale, *PSHADOWSIZE * pMonitor->scale, CColor(1, 1, 1, 1), a);
+ // render white shadow with the alpha of the shadow color (otherwise we clear with alpha later and shit it to 2 bit)
+ g_pHyprOpenGL->renderRoundedShadow(&fullBox, ROUNDING * pMonitor->scale, *PSHADOWSIZE * pMonitor->scale, CColor(1, 1, 1, m_pWindow->m_cRealShadowColor.col().a), a);
// render black window box ("clip")
g_pHyprOpenGL->renderRect(&windowBox, CColor(0, 0, 0, 1.0), ROUNDING * pMonitor->scale);
@@ -159,7 +159,7 @@ void CHyprDropShadowDecoration::draw(CMonitor* pMonitor, float a, const Vector2D
alphaSwapFB.bind();
// alpha swap just has the shadow color. It will be the "texture" to render.
- g_pHyprOpenGL->clear(m_pWindow->m_cRealShadowColor.col());
+ g_pHyprOpenGL->clear(m_pWindow->m_cRealShadowColor.col().stripA());
LASTFB->bind();