From 568cf2732a5a40c50ea6e486982af23e57486bbe Mon Sep 17 00:00:00 2001 From: Tim Angus Date: Thu, 5 Nov 2009 20:29:26 +0000 Subject: [PATCH] * Fix to GLimp_DetectAvailableModes not sorting the first returned mode --- code/sdl/sdl_glimp.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c index e312f9ff..663fd098 100644 --- a/code/sdl/sdl_glimp.c +++ b/code/sdl/sdl_glimp.c @@ -117,8 +117,12 @@ static int GLimp_CompareModes( const void *a, const void *b ) const float ASPECT_EPSILON = 0.001f; SDL_Rect *modeA = *(SDL_Rect **)a; SDL_Rect *modeB = *(SDL_Rect **)b; - float aspectDiffA = fabs( ( (float)modeA->w / (float)modeA->h ) - displayAspect ); - float aspectDiffB = fabs( ( (float)modeB->w / (float)modeB->h ) - displayAspect ); + float aspectA = (float)modeA->w / (float)modeA->h; + float aspectB = (float)modeB->w / (float)modeB->h; + int areaA = modeA->w * modeA->h; + int areaB = modeB->w * modeB->h; + float aspectDiffA = fabs( aspectA - displayAspect ); + float aspectDiffB = fabs( aspectB - displayAspect ); float aspectDiffsDiff = aspectDiffA - aspectDiffB; if( aspectDiffsDiff > ASPECT_EPSILON ) @@ -126,14 +130,10 @@ static int GLimp_CompareModes( const void *a, const void *b ) else if( aspectDiffsDiff < -ASPECT_EPSILON ) return -1; else - { - if( modeA->w == modeB->w ) - return modeA->h - modeB->h; - else - return modeA->w - modeB->w; - } + return areaA - areaB; } + /* =============== GLimp_DetectAvailableModes @@ -162,8 +162,8 @@ static void GLimp_DetectAvailableModes(void) for( numModes = 0; modes[ numModes ]; numModes++ ); - if(numModes > 1) - qsort( modes+1, numModes-1, sizeof( SDL_Rect* ), GLimp_CompareModes ); + if( numModes > 1 ) + qsort( modes, numModes, sizeof( SDL_Rect* ), GLimp_CompareModes ); for( i = 0; i < numModes; i++ ) {