| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef UI_GFX_SAFE_INTEGER_CONVERSIONS_H_ | 5 // TODO(beng): remove once callsites are patched. |
| 6 #define UI_GFX_SAFE_INTEGER_CONVERSIONS_H_ | 6 #include "ui/gfx/geometry/safe_integer_conversions.h" |
| 7 | 7 |
| 8 #include <cmath> | |
| 9 #include <limits> | |
| 10 | |
| 11 #include "ui/gfx/gfx_export.h" | |
| 12 | |
| 13 namespace gfx { | |
| 14 | |
| 15 inline int ClampToInt(float value) { | |
| 16 if (value != value) | |
| 17 return 0; // no int NaN. | |
| 18 if (value >= std::numeric_limits<int>::max()) | |
| 19 return std::numeric_limits<int>::max(); | |
| 20 if (value <= std::numeric_limits<int>::min()) | |
| 21 return std::numeric_limits<int>::min(); | |
| 22 return static_cast<int>(value); | |
| 23 } | |
| 24 | |
| 25 inline int ToFlooredInt(float value) { | |
| 26 return ClampToInt(std::floor(value)); | |
| 27 } | |
| 28 | |
| 29 inline int ToCeiledInt(float value) { | |
| 30 return ClampToInt(std::ceil(value)); | |
| 31 } | |
| 32 | |
| 33 inline int ToRoundedInt(float value) { | |
| 34 float rounded; | |
| 35 if (value >= 0.0f) | |
| 36 rounded = std::floor(value + 0.5f); | |
| 37 else | |
| 38 rounded = std::ceil(value - 0.5f); | |
| 39 return ClampToInt(rounded); | |
| 40 } | |
| 41 | |
| 42 inline bool IsExpressibleAsInt(float value) { | |
| 43 if (value != value) | |
| 44 return false; // no int NaN. | |
| 45 if (value > std::numeric_limits<int>::max()) | |
| 46 return false; | |
| 47 if (value < std::numeric_limits<int>::min()) | |
| 48 return false; | |
| 49 return true; | |
| 50 } | |
| 51 | |
| 52 } // namespace gfx | |
| 53 | |
| 54 #endif // UI_GFX_SAFE_INTEGER_CONVERSIONS_H_ | |
| OLD | NEW |