You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.5 KiB
63 lines
1.5 KiB
4 months ago
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#ifndef UI_GFX_GEOMETRY_SAFE_INTEGER_CONVERSIONS_H_
|
||
|
#define UI_GFX_GEOMETRY_SAFE_INTEGER_CONVERSIONS_H_
|
||
|
|
||
|
#include <cmath>
|
||
|
#include <limits>
|
||
|
|
||
|
#include "base/numerics/safe_conversions.h"
|
||
|
#include "ui/gfx/gfx_export.h"
|
||
|
|
||
|
namespace gfx {
|
||
|
|
||
|
inline int ToFlooredInt(float value) {
|
||
|
return base::saturated_cast<int>(std::floor(value));
|
||
|
}
|
||
|
|
||
|
inline int ToCeiledInt(float value) {
|
||
|
return base::saturated_cast<int>(std::ceil(value));
|
||
|
}
|
||
|
|
||
|
inline int ToFlooredInt(double value) {
|
||
|
return base::saturated_cast<int>(std::floor(value));
|
||
|
}
|
||
|
|
||
|
inline int ToCeiledInt(double value) {
|
||
|
return base::saturated_cast<int>(std::ceil(value));
|
||
|
}
|
||
|
|
||
|
inline int ToRoundedInt(float value) {
|
||
|
float rounded;
|
||
|
if (value >= 0.0f)
|
||
|
rounded = std::floor(value + 0.5f);
|
||
|
else
|
||
|
rounded = std::ceil(value - 0.5f);
|
||
|
return base::saturated_cast<int>(rounded);
|
||
|
}
|
||
|
|
||
|
inline int ToRoundedInt(double value) {
|
||
|
double rounded;
|
||
|
if (value >= 0.0)
|
||
|
rounded = std::floor(value + 0.5);
|
||
|
else
|
||
|
rounded = std::ceil(value - 0.5);
|
||
|
return base::saturated_cast<int>(rounded);
|
||
|
}
|
||
|
|
||
|
inline bool IsExpressibleAsInt(float value) {
|
||
|
if (value != value)
|
||
|
return false; // no int NaN.
|
||
|
if (value > std::numeric_limits<int>::max())
|
||
|
return false;
|
||
|
if (value < std::numeric_limits<int>::min())
|
||
|
return false;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
} // namespace gfx
|
||
|
|
||
|
#endif // UI_GFX_GEOMETRY_SAFE_INTEGER_CONVERSIONS_H_
|