Fixed bug #217
authorSam Lantinga <slouken@libsdl.org>
Sun, 07 May 2006 04:02:48 +0000
changeset 1771 8d3ca155c396
parent 1770 1632155c67e5
child 1772 5115185b6e3c
Fixed bug #217 Sort the DirectX video modes largest to smallest
src/video/windib/SDL_dibvideo.c
src/video/windx5/SDL_dx5video.c
src/video/x11/SDL_x11modes.c
--- a/src/video/windib/SDL_dibvideo.c	Sun May 07 03:44:58 2006 +0000
+++ b/src/video/windib/SDL_dibvideo.c	Sun May 07 04:02:48 2006 +0000
@@ -348,7 +348,6 @@
 #endif
 	}
 	/* Sort the mode lists */
-	if( i > 1 )
 	for ( i=0; i<NUM_MODELISTS; ++i ) {
 		if ( SDL_nummodes[i] > 0 ) {
 			SDL_qsort(SDL_modelist[i], SDL_nummodes[i], sizeof *SDL_modelist[i], cmpmodes);
@@ -361,7 +360,7 @@
 	// because SDL surface conversion is much faster than the WinCE one.
 	// Although it should be tested on devices with graphics accelerator.
 
-    DIB_AddMode(this, vformat->BitsPerPixel,
+	DIB_AddMode(this, vformat->BitsPerPixel,
 			GetDeviceCaps(GetDC(NULL), HORZRES), 
 			GetDeviceCaps(GetDC(NULL), VERTRES));
 
--- a/src/video/windx5/SDL_dx5video.c	Sun May 07 03:44:58 2006 +0000
+++ b/src/video/windx5/SDL_dx5video.c	Sun May 07 04:02:48 2006 +0000
@@ -636,6 +636,16 @@
 	DX5_Available, DX5_CreateDevice
 };
 
+static int cmpmodes(const void *va, const void *vb)
+{
+    SDL_Rect *a = *(SDL_Rect **)va;
+    SDL_Rect *b = *(SDL_Rect **)vb;
+    if ( a->w == b->w )
+        return b->h - a->h;
+    else
+        return b->w - a->w;
+}
+
 static HRESULT WINAPI EnumModes2(DDSURFACEDESC *desc, VOID *udata)
 {
 	SDL_VideoDevice *this = (SDL_VideoDevice *)udata;
@@ -955,6 +965,10 @@
 			SDL_modelist[i][j] = &rect->r;
 		}
 		SDL_modelist[i][j] = NULL;
+
+		if ( SDL_nummodes[i] > 0 ) {
+			SDL_qsort(SDL_modelist[i], SDL_nummodes[i], sizeof *SDL_modelist[i], cmpmodes);
+		}
 	}
 	
 	/* Fill in some window manager capabilities */
--- a/src/video/x11/SDL_x11modes.c	Sun May 07 03:44:58 2006 +0000
+++ b/src/video/x11/SDL_x11modes.c	Sun May 07 04:02:48 2006 +0000
@@ -617,7 +617,7 @@
 
             }
             /* sort the mode list descending as SDL expects */
-            qsort(SDL_modelist, nsizes, sizeof *SDL_modelist, cmpmodelist);
+            SDL_qsort(SDL_modelist, nsizes, sizeof *SDL_modelist, cmpmodelist);
             SDL_modelist[i] = NULL; /* terminator */
 
             use_xrandr = xrandr_major * 100 + xrandr_minor;