@ -297,22 +297,21 @@ IMGUI_API void* ImFileLoadToMemory(const char* filename, const char*
// Helpers: Maths
// Helpers: Maths
// - Wrapper for standard libs functions. (Note that imgui_demo.cpp does _not_ use them to keep the code easy to copy)
// - Wrapper for standard libs functions. (Note that imgui_demo.cpp does _not_ use them to keep the code easy to copy)
# ifndef IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
# ifndef IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
static inline float ImFabs ( float x ) { return fabsf ( x ) ; }
# define ImFabs(X) fabsf(X)
static inline float ImSqrt ( float x ) { return sqrtf ( x ) ; }
# define ImSqrt(X) sqrtf(X)
static inline float ImPow ( float x , float y ) { return powf ( x , y ) ; }
# define ImFmod(X, Y) fmodf((X), (Y))
static inline double ImPow ( double x , double y ) { return pow ( x , y ) ; }
# define ImCos(X) cosf(X)
static inline float ImFmod ( float x , float y ) { return fmodf ( x , y ) ; }
# define ImSin(X) sinf(X)
static inline double ImFmod ( double x , double y ) { return fmod ( x , y ) ; }
# define ImAcos(X) acosf(X)
static inline float ImCos ( float x ) { return cosf ( x ) ; }
# define ImAtan2(Y, X) atan2f((Y), (X))
static inline float ImSin ( float x ) { return sinf ( x ) ; }
# define ImAtof(STR) atof(STR)
static inline float ImAcos ( float x ) { return acosf ( x ) ; }
# define ImFloorStd(X) floorf(X) // We already uses our own ImFloor() { return (float)(int)v } internally so the standard one wrapper is named differently (it's used by e.g. stb_truetype)
static inline float ImAtan2 ( float y , float x ) { return atan2f ( y , x ) ; }
# define ImCeil(X) ceilf(X)
static inline double ImAtof ( const char * s ) { return atof ( s ) ; }
static inline float ImPow ( float x , float y ) { return powf ( x , y ) ; } // DragBehaviorT/SliderBehaviorT uses ImPow with either float/double and need the precision
static inline float ImFloorStd ( float x ) { return floorf ( x ) ; } // we already uses our own ImFloor() { return (float)(int)v } internally so the standard one wrapper is named differently (it's used by stb_truetype)
static inline double ImPow ( double x , double y ) { return pow ( x , y ) ; }
static inline float ImCeil ( float x ) { return ceilf ( x ) ; }
# endif
# endif
// - ImMin/ImMax/ImClamp/ImLerp/ImSwap are used by widgets which support for variety of types: signed/unsigned int/long long float/double
// - ImMin/ImMax/ImClamp/ImLerp/ImSwap are used by widgets which support variety of types: signed/unsigned int/long long float/double
// (Exceptionally using templates here but we could also redefine them for variety of types)
// (Exceptionally using templates here but we could also redefine them for those types)
template < typename T > static inline T ImMin ( T lhs , T rhs ) { return lhs < rhs ? lhs : rhs ; }
template < typename T > static inline T ImMin ( T lhs , T rhs ) { return lhs < rhs ? lhs : rhs ; }
template < typename T > static inline T ImMax ( T lhs , T rhs ) { return lhs > = rhs ? lhs : rhs ; }
template < typename T > static inline T ImMax ( T lhs , T rhs ) { return lhs > = rhs ? lhs : rhs ; }
template < typename T > static inline T ImClamp ( T v , T mn , T mx ) { return ( v < mn ) ? mn : ( v > mx ) ? mx : v ; }
template < typename T > static inline T ImClamp ( T v , T mn , T mx ) { return ( v < mn ) ? mn : ( v > mx ) ? mx : v ; }