summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorREVO9 <80324799+REVO9@users.noreply.github.com>2025-09-19 00:34:54 +0200
committerGitHub <noreply@github.com>2025-09-19 00:34:54 +0200
commitafd1e71761ce4cb71bb3316dc5e4a7cc81235e7a (patch)
tree720def85621418dcbc1d2d0490beb8e1f5b4df72 /src
parent4fc95d646dbbe71744fb4e02ca0e995b652bffe5 (diff)
renderer: fix inconsistent border thickness for roundingPower < 2 (#11752)
Diffstat (limited to 'src')
-rw-r--r--src/render/decorations/CHyprBorderDecoration.cpp10
-rw-r--r--src/render/decorations/CHyprDropShadowDecoration.cpp12
2 files changed, 14 insertions, 8 deletions
diff --git a/src/render/decorations/CHyprBorderDecoration.cpp b/src/render/decorations/CHyprBorderDecoration.cpp
index 33ffcb60..0bf1f16a 100644
--- a/src/render/decorations/CHyprBorderDecoration.cpp
+++ b/src/render/decorations/CHyprBorderDecoration.cpp
@@ -70,14 +70,18 @@ void CHyprBorderDecoration::draw(PHLMONITOR pMonitor, float const& a) {
m_window->m_realBorderColorPrevious.m_angle = grad.m_angle;
}
- int borderSize = m_window->getRealBorderSize();
- const auto ROUNDING = m_window->rounding() * pMonitor->m_scale;
- const auto ROUNDINGPOWER = m_window->roundingPower();
+ int borderSize = m_window->getRealBorderSize();
+ const auto ROUNDINGBASE = m_window->rounding();
+ const auto ROUNDING = ROUNDINGBASE * pMonitor->m_scale;
+ const auto ROUNDINGPOWER = m_window->roundingPower();
+ const auto CORRECTIONOFFSET = (borderSize * (M_SQRT2 - 1) * std::max(2.0 - ROUNDINGPOWER, 0.0));
+ const auto OUTERROUND = ((ROUNDINGBASE + borderSize) - CORRECTIONOFFSET) * pMonitor->m_scale;
CBorderPassElement::SBorderData data;
data.box = windowBox;
data.grad1 = grad;
data.round = ROUNDING;
+ data.outerRound = OUTERROUND;
data.roundingPower = ROUNDINGPOWER;
data.a = a;
data.borderSize = borderSize;
diff --git a/src/render/decorations/CHyprDropShadowDecoration.cpp b/src/render/decorations/CHyprDropShadowDecoration.cpp
index d09d4a83..50841d6b 100644
--- a/src/render/decorations/CHyprDropShadowDecoration.cpp
+++ b/src/render/decorations/CHyprDropShadowDecoration.cpp
@@ -117,11 +117,13 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) {
if (*PSHADOWS != 1)
return; // disabled
- const auto ROUNDINGBASE = PWINDOW->rounding();
- const auto ROUNDINGPOWER = PWINDOW->roundingPower();
- const auto ROUNDING = ROUNDINGBASE > 0 ? ROUNDINGBASE + PWINDOW->getRealBorderSize() : 0;
- const auto PWORKSPACE = PWINDOW->m_workspace;
- const auto WORKSPACEOFFSET = PWORKSPACE && !PWINDOW->m_pinned ? PWORKSPACE->m_renderOffset->value() : Vector2D();
+ const auto BORDERSIZE = PWINDOW->getRealBorderSize();
+ const auto ROUNDINGBASE = PWINDOW->rounding();
+ const auto ROUNDINGPOWER = PWINDOW->roundingPower();
+ const auto CORRECTIONOFFSET = (BORDERSIZE * (M_SQRT2 - 1) * std::max(2.0 - ROUNDINGPOWER, 0.0));
+ const auto ROUNDING = ROUNDINGBASE > 0 ? (ROUNDINGBASE + BORDERSIZE) - CORRECTIONOFFSET : 0;
+ const auto PWORKSPACE = PWINDOW->m_workspace;
+ const auto WORKSPACEOFFSET = PWORKSPACE && !PWINDOW->m_pinned ? PWORKSPACE->m_renderOffset->value() : Vector2D();
// draw the shadow
CBox fullBox = m_lastWindowBoxWithDecos;