From 45d7cdf02c2b8185226412d9743c6fa1b9ea7c9a Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Mon, 20 Apr 2026 16:59:49 +1000 Subject: [PATCH] fix: clamp blob radii at half min dimension --- plugin/src/Caelestia/Blobs/blobrect.cpp | 11 ++++++----- plugin/src/Caelestia/Blobs/blobshape.cpp | 3 ++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/plugin/src/Caelestia/Blobs/blobrect.cpp b/plugin/src/Caelestia/Blobs/blobrect.cpp index fa7b4b1e..15486d83 100644 --- a/plugin/src/Caelestia/Blobs/blobrect.cpp +++ b/plugin/src/Caelestia/Blobs/blobrect.cpp @@ -157,11 +157,12 @@ void BlobRect::setBottomRightRadius(qreal r) { } void BlobRect::cornerRadii(float out[4]) const { - const auto base = static_cast(m_radius); - out[0] = m_topRightRadius >= 0 ? static_cast(m_topRightRadius) : base; - out[1] = m_bottomRightRadius >= 0 ? static_cast(m_bottomRightRadius) : base; - out[2] = m_bottomLeftRadius >= 0 ? static_cast(m_bottomLeftRadius) : base; - out[3] = m_topLeftRadius >= 0 ? static_cast(m_topLeftRadius) : base; + const auto maxR = static_cast(std::min(width(), height())) * 0.5f; + const auto base = std::min(static_cast(m_radius), maxR); + out[0] = std::min(m_topRightRadius >= 0 ? static_cast(m_topRightRadius) : base, maxR); + out[1] = std::min(m_bottomRightRadius >= 0 ? static_cast(m_bottomRightRadius) : base, maxR); + out[2] = std::min(m_bottomLeftRadius >= 0 ? static_cast(m_bottomLeftRadius) : base, maxR); + out[3] = std::min(m_topLeftRadius >= 0 ? static_cast(m_topLeftRadius) : base, maxR); } bool BlobRect::isExcluded(const BlobShape* other) const { diff --git a/plugin/src/Caelestia/Blobs/blobshape.cpp b/plugin/src/Caelestia/Blobs/blobshape.cpp index 718c03e7..9fcb622b 100644 --- a/plugin/src/Caelestia/Blobs/blobshape.cpp +++ b/plugin/src/Caelestia/Blobs/blobshape.cpp @@ -96,7 +96,8 @@ void BlobShape::updateCenteredDeformMatrix() { } void BlobShape::cornerRadii(float out[4]) const { - const auto r = static_cast(m_radius); + const auto maxR = static_cast(std::min(width(), height())) * 0.5f; + const auto r = std::min(static_cast(m_radius), maxR); out[0] = r; out[1] = r; out[2] = r;