Merge pull request #8775 from leoetlino/rect

MathUtil: Fix Rectangle::GetWidth/Height for unsigned types
This commit is contained in:
Léo Lam 2020-05-03 15:41:38 +02:00 committed by GitHub
commit 907b1302b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 2 deletions

View File

@ -6,6 +6,7 @@
#include <algorithm>
#include <cmath>
#include <type_traits>
#include <vector>
#include "Common/CommonTypes.h"
@ -71,8 +72,8 @@ struct Rectangle
return left == r.left && top == r.top && right == r.right && bottom == r.bottom;
}
T GetWidth() const { return std::abs(right - left); }
T GetHeight() const { return std::abs(bottom - top); }
constexpr T GetWidth() const { return GetDistance(left, right); }
constexpr T GetHeight() const { return GetDistance(top, bottom); }
// If the rectangle is in a coordinate system with a lower-left origin, use
// this Clamp.
void ClampLL(T x1, T y1, T x2, T y2)
@ -92,6 +93,15 @@ struct Rectangle
top = std::clamp(top, y1, y2);
bottom = std::clamp(bottom, y1, y2);
}
private:
constexpr T GetDistance(T a, T b) const
{
if constexpr (std::is_unsigned<T>())
return b > a ? b - a : a - b;
else
return std::abs(b - a);
}
};
template <typename T>