From e02ff0121f9594cf441e180115e4cc86eb69a47c Mon Sep 17 00:00:00 2001
From: Tony Wasserka <NeoBrainX@gmail.com>
Date: Thu, 13 Nov 2014 20:25:39 +0100
Subject: [PATCH] MathUtil: Make Rectangle work with unsigned types.

---
 src/common/math_util.h | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/common/math_util.h b/src/common/math_util.h
index b32e7bb14..b10a25c13 100644
--- a/src/common/math_util.h
+++ b/src/common/math_util.h
@@ -7,6 +7,7 @@
 #include "common/common.h"
 
 #include <algorithm>
+#include <type_traits>
 #include <vector>
 
 namespace MathUtil
@@ -109,11 +110,11 @@ struct Rectangle
     Rectangle(T theLeft, T theTop, T theRight, T theBottom)
         : left(theLeft), top(theTop), right(theRight), bottom(theBottom)
     { }
-    
+
     bool operator==(const Rectangle& r) { return left==r.left && top==r.top && right==r.right && bottom==r.bottom; }
 
-    T GetWidth() const { return abs(right - left); }
-    T GetHeight() const { return abs(bottom - top); }
+    T GetWidth() const { return std::abs(static_cast<typename std::make_signed<T>::type>(right - left)); }
+    T GetHeight() const { return std::abs(static_cast<typename std::make_signed<T>::type>(bottom - top)); }
 
     // If the rectangle is in a coordinate system with a lower-left origin, use
     // this Clamp.
@@ -127,7 +128,7 @@ struct Rectangle
 
     // If the rectangle is in a coordinate system with an upper-left origin,
     // use this Clamp.
-    void ClampUL(T x1, T y1, T x2, T y2) 
+    void ClampUL(T x1, T y1, T x2, T y2)
     {
         if (left < x1) left = x1;
         if (right > x2) right = x2;