changeset 3944:d59dacd36696 SDL-1.2

Allow creation of window bigger than visible size
author Patrice Mandin <patmandin@gmail.com>
date Sun, 27 May 2007 08:53:48 +0000
parents 1d9cd0ff67cc
children 14bec334705f
files src/video/gem/SDL_gemvideo.c
diffstat 1 files changed, 20 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/video/gem/SDL_gemvideo.c	Sat May 26 20:12:58 2007 +0000
+++ b/src/video/gem/SDL_gemvideo.c	Sun May 27 08:53:48 2007 +0000
@@ -621,30 +621,27 @@
 SDL_Surface *GEM_SetVideoMode(_THIS, SDL_Surface *current,
 				int width, int height, int bpp, Uint32 flags)
 {
-	int maxwidth, maxheight;
 	Uint32 modeflags, screensize;
 	SDL_bool use_shadow1, use_shadow2;
 
-	/*--- Verify if asked mode can be used ---*/
-	if (flags & SDL_FULLSCREEN) {
-		maxwidth=VDI_w;
-		maxheight=VDI_h;
-	} else {
-		/* Windowed mode */
-		maxwidth=GEM_desk_w;
-		maxheight=GEM_desk_h;
-	}
-
 	/* width must be multiple of 16, for vro_cpyfm() and c2p_convert() */
 	if ((width & 15) != 0) {
 		width = (width | 15) +1;
 	}
 
-	if ((maxwidth < width) || (maxheight < height) || (VDI_bpp != bpp)) {
-		SDL_SetError("Couldn't find requested mode in list");
+	/*--- Verify if asked mode can be used ---*/
+	if (VDI_bpp != bpp) {
+		SDL_SetError("%d bpp mode not supported", bpp);
 		return(NULL);
 	}
 
+	if (flags & SDL_FULLSCREEN) {
+		if ((VDI_w < width) || (VDI_h < height)) {
+			SDL_SetError("%dx%d mode is too large", width, height);
+			return(NULL);
+		}
+	}
+
 	/*--- Allocate the new pixel format for the screen ---*/
 	if ( ! SDL_ReallocFormat(current, VDI_bpp, VDI_redmask, VDI_greenmask, VDI_bluemask, VDI_alphamask) ) {
 		SDL_SetError("Couldn't allocate new pixel format for requested mode");
@@ -750,8 +747,16 @@
 			}
 
 			/* Center window */
-			x2 = GEM_desk_x+((GEM_desk_w-w2)>>1);
-			y2 = GEM_desk_y+((GEM_desk_h-h2)>>1);
+			x2 = (GEM_desk_w-w2)>>1;
+			y2 = (GEM_desk_h-h2)>>1;
+			if (x2<0) {
+				x2 = 0;
+			}
+			if (y2<0) {
+				y2 = 0;
+			}
+			x2 += GEM_desk_x;
+			y2 += GEM_desk_y;
 
 			/* Destroy existing window */
 			if (GEM_handle >= 0) {