mirror of
https://github.com/encounter/SDL.git
synced 2025-12-09 05:27:48 +00:00
Fixed bug 5404 - stdlib: Added SDL_round, SDL_roundf, SDL_lround and SDL_lroundf
Cameron Cawley stdlib: Added SDL_round, SDL_roundf, SDL_lround and SDL_lroundf The default implementation is based on the one used in the Windows RT video driver.
This commit is contained in:
@@ -788,4 +788,8 @@
|
||||
#define SDL_GameControllerGetSensorData SDL_GameControllerGetSensorData_REAL
|
||||
#define SDL_wcscasecmp SDL_wcscasecmp_REAL
|
||||
#define SDL_wcsncasecmp SDL_wcsncasecmp_REAL
|
||||
#define SDL_round SDL_round_REAL
|
||||
#define SDL_roundf SDL_roundf_REAL
|
||||
#define SDL_lround SDL_lround_REAL
|
||||
#define SDL_lroundf SDL_lroundf_REAL
|
||||
#define SDL_SoftStretchLinear SDL_SoftStretchLinear_REAL
|
||||
|
||||
@@ -849,4 +849,8 @@ SDL_DYNAPI_PROC(SDL_bool,SDL_GameControllerIsSensorEnabled,(SDL_GameController *
|
||||
SDL_DYNAPI_PROC(int,SDL_GameControllerGetSensorData,(SDL_GameController *a, SDL_SensorType b, float *c, int d),(a,b,c,d),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_wcscasecmp,(const wchar_t *a, const wchar_t *b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_wcsncasecmp,(const wchar_t *a, const wchar_t *b, size_t c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(double,SDL_round,(double a),(a),return)
|
||||
SDL_DYNAPI_PROC(float,SDL_roundf,(float a),(a),return)
|
||||
SDL_DYNAPI_PROC(long,SDL_lround,(double a),(a),return)
|
||||
SDL_DYNAPI_PROC(long,SDL_lroundf,(float a),(a),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SoftStretchLinear,(SDL_Surface *a, const SDL_Rect *b, SDL_Surface *c, const SDL_Rect *d),(a,b,c,d),return)
|
||||
|
||||
@@ -364,6 +364,50 @@ SDL_powf(float x, float y)
|
||||
#endif
|
||||
}
|
||||
|
||||
double
|
||||
SDL_round(double arg)
|
||||
{
|
||||
#if defined HAVE_ROUND
|
||||
return round(arg);
|
||||
#else
|
||||
if (arg >= 0.0) {
|
||||
return SDL_floor(arg + 0.5);
|
||||
} else {
|
||||
return SDL_ceil(arg - 0.5);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
float
|
||||
SDL_roundf(float arg)
|
||||
{
|
||||
#if defined HAVE_ROUNDF
|
||||
return roundf(arg);
|
||||
#else
|
||||
return (float)SDL_round((double)arg);
|
||||
#endif
|
||||
}
|
||||
|
||||
long
|
||||
SDL_lround(double arg)
|
||||
{
|
||||
#if defined HAVE_LROUND
|
||||
return lround(arg);
|
||||
#else
|
||||
return (long)SDL_round(arg);
|
||||
#endif
|
||||
}
|
||||
|
||||
long
|
||||
SDL_lroundf(float arg)
|
||||
{
|
||||
#if defined HAVE_LROUNDF
|
||||
return lroundf(arg);
|
||||
#else
|
||||
return (long)SDL_round((double)arg);
|
||||
#endif
|
||||
}
|
||||
|
||||
double
|
||||
SDL_scalbn(double x, int n)
|
||||
{
|
||||
|
||||
@@ -116,16 +116,6 @@ WINRT_TransformCursorPosition(SDL_Window * window,
|
||||
return outputPosition;
|
||||
}
|
||||
|
||||
static inline int
|
||||
_lround(float arg)
|
||||
{
|
||||
if (arg >= 0.0f) {
|
||||
return (int)floor(arg + 0.5f);
|
||||
} else {
|
||||
return (int)ceil(arg - 0.5f);
|
||||
}
|
||||
}
|
||||
|
||||
Uint8
|
||||
WINRT_GetSDLButtonForPointerPoint(Windows::UI::Input::PointerPoint ^pt)
|
||||
{
|
||||
@@ -389,8 +379,8 @@ WINRT_ProcessMouseMovedEvent(SDL_Window * window, Windows::Devices::Input::Mouse
|
||||
window,
|
||||
0,
|
||||
1,
|
||||
_lround(mouseDeltaInSDLWindowCoords.X),
|
||||
_lround(mouseDeltaInSDLWindowCoords.Y));
|
||||
SDL_lroundf(mouseDeltaInSDLWindowCoords.X),
|
||||
SDL_lroundf(mouseDeltaInSDLWindowCoords.Y));
|
||||
}
|
||||
|
||||
#endif // SDL_VIDEO_DRIVER_WINRT
|
||||
|
||||
@@ -257,7 +257,7 @@ static int
|
||||
CalculateXRandRRefreshRate(const XRRModeInfo *info)
|
||||
{
|
||||
return (info->hTotal && info->vTotal) ?
|
||||
round(((double)info->dotClock / (double)(info->hTotal * info->vTotal))) : 0;
|
||||
SDL_round(((double)info->dotClock / (double)(info->hTotal * info->vTotal))) : 0;
|
||||
}
|
||||
|
||||
static SDL_bool
|
||||
|
||||
Reference in New Issue
Block a user