summaryrefslogtreecommitdiff
path: root/src/helpers
diff options
context:
space:
mode:
authorthejch <66577496+thejch@users.noreply.github.com>2024-03-30 18:14:26 -0700
committerGitHub <noreply@github.com>2024-03-31 02:14:26 +0100
commit16a9c16d9f99bd8be9f1bb15442b001fdf2ea759 (patch)
treef9cb60dc2d92519079699e9cb6e71e562b55a8a5 /src/helpers
parent1cc9a44318e53a34f41cc36483502de985b88cf8 (diff)
renderer/animations: Fix various inaccurate damage tracking issues and offsets (#5297)
Diffstat (limited to 'src/helpers')
-rw-r--r--src/helpers/Box.cpp25
-rw-r--r--src/helpers/Box.hpp2
2 files changed, 15 insertions, 12 deletions
diff --git a/src/helpers/Box.cpp b/src/helpers/Box.cpp
index e9e0eeeb..8470b509 100644
--- a/src/helpers/Box.cpp
+++ b/src/helpers/Box.cpp
@@ -106,6 +106,11 @@ CBox& CBox::expand(const double& value) {
w += value * 2.0;
h += value * 2.0;
+ if (w <= 0 || h <= 0) {
+ w = 0;
+ h = 0;
+ }
+
return *this;
}
@@ -116,22 +121,20 @@ CBox& CBox::noNegativeSize() {
return *this;
}
-CBox& CBox::intersection(const CBox other) {
- const float newTop = std::max(y, other.y);
+CBox CBox::intersection(const CBox other) const {
+ const float newX = std::max(x, other.x);
+ const float newY = std::max(y, other.y);
const float newBottom = std::min(y + h, other.y + other.h);
- const float newLeft = std::max(x, other.x);
const float newRight = std::min(x + w, other.x + other.w);
- y = newTop;
- x = newLeft;
- w = newRight - newLeft;
- h = newBottom - newTop;
+ float newW = newRight - newX;
+ float newH = newBottom - newY;
- if (w <= 0 || h <= 0) {
- w = 0;
- h = 0;
+ if (newW <= 0 || newH <= 0) {
+ newW = 0;
+ newH = 0;
}
- return *this;
+ return {newX, newY, newW, newH};
}
CBox CBox::roundInternal() {
diff --git a/src/helpers/Box.hpp b/src/helpers/Box.hpp
index e38d6108..98ba8d47 100644
--- a/src/helpers/Box.hpp
+++ b/src/helpers/Box.hpp
@@ -52,9 +52,9 @@ class CBox {
CBox& addExtents(const SWindowDecorationExtents& e);
CBox& expand(const double& value);
CBox& noNegativeSize();
- CBox& intersection(const CBox other);
CBox copy() const;
+ CBox intersection(const CBox other) const;
SWindowDecorationExtents extentsFrom(const CBox&); // this is the big box