changeset 826:3eddf51b649b

Showed how to toggle fullscreen mode if the API isn't supported
author Sam Lantinga <slouken@libsdl.org>
date Sun, 15 Feb 2004 20:31:27 +0000
parents 618fcc5861c8
children b10aeac509ea
files test/testwm.c
diffstat 1 files changed, 45 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- a/test/testwm.c	Sun Feb 15 18:45:45 2004 +0000
+++ b/test/testwm.c	Sun Feb 15 20:31:27 2004 +0000
@@ -10,6 +10,49 @@
 /* Is the cursor visible? */
 static int visible = 1;
 
+static Uint8  video_bpp;
+static Uint32 video_flags;
+
+int SetVideoMode(int w, int h)
+{
+	SDL_Surface *screen;
+	int i;
+	Uint8 *buffer;
+	SDL_Color palette[256];
+
+	screen = SDL_SetVideoMode(w, h, video_bpp, video_flags);
+	if (  screen == NULL ) {
+		fprintf(stderr, "Couldn't set %dx%dx%d video mode: %s\n",
+					w, h, video_bpp, SDL_GetError());
+		return(-1);
+	}
+	printf("Running in %s mode\n", screen->flags & SDL_FULLSCREEN ?
+						"fullscreen" : "windowed");
+
+	/* Set the surface pixels and refresh! */
+	for ( i=0; i<256; ++i ) {
+		palette[i].r = 255-i;
+		palette[i].g = 255-i;
+		palette[i].b = 255-i;
+	}
+	SDL_SetColors(screen, palette, 0, 256);
+	if ( SDL_LockSurface(screen) < 0 ) {
+		fprintf(stderr, "Couldn't lock display surface: %s\n",
+							SDL_GetError());
+		return(-1);
+	}
+	buffer = (Uint8 *)screen->pixels;
+	for ( i=0; i<screen->h; ++i ) {
+		memset(buffer,(i*255)/screen->h,
+				screen->w*screen->format->BytesPerPixel);
+		buffer += screen->pitch;
+	}
+	SDL_UnlockSurface(screen);
+	SDL_UpdateRect(screen, 0, 0, 0, 0);
+
+	return(0);
+}
+
 SDL_Surface *LoadIconSurface(char *file, Uint8 **maskp)
 {
 	SDL_Surface *icon;
@@ -79,6 +122,8 @@
 		    (screen->flags&SDL_FULLSCREEN) ? "fullscreen" : "windowed");
 	} else {
 		printf("Unable to toggle fullscreen mode\n");
+		video_flags ^= SDL_FULLSCREEN;
+		SetVideoMode(screen->w, screen->h);
 	}
 }
 
@@ -207,49 +252,6 @@
 	}
 }
 
-static Uint8  video_bpp;
-static Uint32 video_flags;
-
-int SetVideoMode(int w, int h)
-{
-	SDL_Surface *screen;
-	int i;
-	Uint8 *buffer;
-	SDL_Color palette[256];
-
-	screen = SDL_SetVideoMode(w, h, video_bpp, video_flags);
-	if (  screen == NULL ) {
-		fprintf(stderr, "Couldn't set %dx%dx%d video mode: %s\n",
-					w, h, video_bpp, SDL_GetError());
-		return(-1);
-	}
-	printf("Running in %s mode\n", screen->flags & SDL_FULLSCREEN ?
-						"fullscreen" : "windowed");
-
-	/* Set the surface pixels and refresh! */
-	for ( i=0; i<256; ++i ) {
-		palette[i].r = 255-i;
-		palette[i].g = 255-i;
-		palette[i].b = 255-i;
-	}
-	SDL_SetColors(screen, palette, 0, 256);
-	if ( SDL_LockSurface(screen) < 0 ) {
-		fprintf(stderr, "Couldn't lock display surface: %s\n",
-							SDL_GetError());
-		return(-1);
-	}
-	buffer = (Uint8 *)screen->pixels;
-	for ( i=0; i<screen->h; ++i ) {
-		memset(buffer,(i*255)/screen->h,
-				screen->w*screen->format->BytesPerPixel);
-		buffer += screen->pitch;
-	}
-	SDL_UnlockSurface(screen);
-	SDL_UpdateRect(screen, 0, 0, 0, 0);
-
-	return(0);
-}
-
 int main(int argc, char *argv[])
 {
 	SDL_Event event;