Index: ui/gfx/geometry/rect.h |
diff --git a/ui/gfx/geometry/rect.h b/ui/gfx/geometry/rect.h |
index b749ac2c300833d8714eb24846f3a051884d187c..d9b3165bf82418ce3937dc63b443fb1a5ff71f49 100644 |
--- a/ui/gfx/geometry/rect.h |
+++ b/ui/gfx/geometry/rect.h |
@@ -16,9 +16,9 @@ |
#include <iosfwd> |
#include <string> |
-#include "base/numerics/safe_conversions.h" |
#include "build/build_config.h" |
#include "ui/gfx/geometry/point.h" |
+#include "ui/gfx/geometry/safe_integer_conversions.h" |
#include "ui/gfx/geometry/size.h" |
#include "ui/gfx/geometry/vector2d.h" |
@@ -207,24 +207,18 @@ class GFX_EXPORT Rect { |
gfx::Size size_; |
// Clamp the size to avoid integer overflow in bottom() and right(). |
- // There are three conditions to determine whether there is a potential |
- // overflow: |
- // 1) Origin > 0: if the origin is a negative value, origin + size will |
- // definitely be less than int_max. |
- // 2) size > 0: if size <= 0, it will be clamped to 0 making x + 0 valid for |
- // all x. |
- // 3) We cast the values to unsigned int because the compiler can optimize |
- // this check away entirely but it is not smart enough to know that it |
- // won't overflow. It can't overflow since origin is positive ensured by |
- // part 1). If size > int_max - origin it will overflow when added to |
- // origin. |
+ // This returns the width given an origin and a width. |
static constexpr int GetClampedValue(int origin, int size) { |
- return origin > 0 && size > 0 && |
- static_cast<unsigned>(std::numeric_limits<int>::max() - |
- origin) < static_cast<unsigned>(size) |
+ return AddWouldOverflow(origin, size) |
? std::numeric_limits<int>::max() - origin |
: size; |
} |
+ |
+ // Returns a clamped width given a right and a left, assuming right > left. |
+ static constexpr int GetClampedWidthFromExtents(int left, int right) { |
+ return SubtractWouldOverflow(right, left) ? std::numeric_limits<int>::max() |
+ : right - left; |
+ } |
}; |
inline bool operator==(const Rect& lhs, const Rect& rhs) { |