From d1638a09bacd84b994de3f77746b74f427b9d41e Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 5 Nov 2024 15:44:40 +0000 Subject: shadow: add sharp and refactor options options moved to decoration:shadow: --- .../decorations/CHyprDropShadowDecoration.cpp | 34 +++++++++++++++------- 1 file changed, 23 insertions(+), 11 deletions(-) (limited to 'src/render/decorations/CHyprDropShadowDecoration.cpp') diff --git a/src/render/decorations/CHyprDropShadowDecoration.cpp b/src/render/decorations/CHyprDropShadowDecoration.cpp index f146776f..893ad498 100644 --- a/src/render/decorations/CHyprDropShadowDecoration.cpp +++ b/src/render/decorations/CHyprDropShadowDecoration.cpp @@ -36,7 +36,7 @@ std::string CHyprDropShadowDecoration::getDisplayName() { } void CHyprDropShadowDecoration::damageEntire() { - static auto PSHADOWS = CConfigValue("decoration:drop_shadow"); + static auto PSHADOWS = CConfigValue("decoration:shadow:enabled"); if (*PSHADOWS != 1) return; // disabled @@ -52,7 +52,7 @@ void CHyprDropShadowDecoration::damageEntire() { shadowBox.translate(PWORKSPACE->m_vRenderOffset.value()); shadowBox.translate(PWINDOW->m_vFloatingOffset); - static auto PSHADOWIGNOREWINDOW = CConfigValue("decoration:shadow_ignore_window"); + static auto PSHADOWIGNOREWINDOW = CConfigValue("decoration:shadow:ignore_window"); const auto ROUNDING = PWINDOW->rounding(); const auto ROUNDINGSIZE = ROUNDING - M_SQRT1_2 * ROUNDING + 1; @@ -102,11 +102,11 @@ void CHyprDropShadowDecoration::draw(PHLMONITOR pMonitor, float const& a) { if (PWINDOW->m_sWindowData.noShadow.valueOrDefault()) return; - static auto PSHADOWS = CConfigValue("decoration:drop_shadow"); - static auto PSHADOWSIZE = CConfigValue("decoration:shadow_range"); - static auto PSHADOWIGNOREWINDOW = CConfigValue("decoration:shadow_ignore_window"); - static auto PSHADOWSCALE = CConfigValue("decoration:shadow_scale"); - static auto PSHADOWOFFSET = CConfigValue("decoration:shadow_offset"); + static auto PSHADOWS = CConfigValue("decoration:shadow:enabled"); + static auto PSHADOWSIZE = CConfigValue("decoration:shadow:range"); + static auto PSHADOWIGNOREWINDOW = CConfigValue("decoration:shadow:ignore_window"); + static auto PSHADOWSCALE = CConfigValue("decoration:shadow:scale"); + static auto PSHADOWOFFSET = CConfigValue("decoration:shadow:offset"); if (*PSHADOWS != 1) return; // disabled @@ -184,7 +184,7 @@ void CHyprDropShadowDecoration::draw(PHLMONITOR pMonitor, float const& a) { g_pHyprOpenGL->renderRect(&fullBox, CColor(0, 0, 0, 1), 0); // 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, PWINDOW->m_cRealShadowColor.value().a), a); + drawShadowInternal(&fullBox, ROUNDING * pMonitor->scale, *PSHADOWSIZE * pMonitor->scale, CColor(1, 1, 1, PWINDOW->m_cRealShadowColor.value().a), a); // render black window box ("clip") g_pHyprOpenGL->renderRect(&windowBox, CColor(0, 0, 0, 1.0), (ROUNDING + 1 /* This fixes small pixel gaps. */) * pMonitor->scale); @@ -204,9 +204,8 @@ void CHyprDropShadowDecoration::draw(PHLMONITOR pMonitor, float const& a) { g_pHyprOpenGL->setMonitorTransformEnabled(false); g_pHyprOpenGL->m_RenderData.damage = saveDamage; - } else { - g_pHyprOpenGL->renderRoundedShadow(&fullBox, ROUNDING * pMonitor->scale, *PSHADOWSIZE * pMonitor->scale, PWINDOW->m_cRealShadowColor.value(), a); - } + } else + drawShadowInternal(&fullBox, ROUNDING * pMonitor->scale, *PSHADOWSIZE * pMonitor->scale, PWINDOW->m_cRealShadowColor.value(), a); if (m_seExtents != m_seReportedExtents) g_pDecorationPositioner->repositionDeco(this); @@ -215,3 +214,16 @@ void CHyprDropShadowDecoration::draw(PHLMONITOR pMonitor, float const& a) { eDecorationLayer CHyprDropShadowDecoration::getDecorationLayer() { return DECORATION_LAYER_BOTTOM; } + +void CHyprDropShadowDecoration::drawShadowInternal(CBox* box, int round, int range, CColor color, float a) { + static auto PSHADOWSHARP = CConfigValue("decoration:shadow:sharp"); + + g_pHyprOpenGL->blend(true); + + color.a *= a; + + if (*PSHADOWSHARP) + g_pHyprOpenGL->renderRect(box, color, round); + else + g_pHyprOpenGL->renderRoundedShadow(box, round, range, color, 1.F); +} -- cgit v1.2.3