diff test/testwm.c @ 1662:782fd950bd46 SDL-1.3

Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API. WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid. The code is now run through a consistent indent format: indent -i4 -nut -nsc -br -ce The headers are being converted to automatically generate doxygen documentation.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 28 May 2006 13:04:16 +0000
parents 14717b52abc0
children 4da1ee79c9af
line wrap: on
line diff
--- a/test/testwm.c	Sun May 21 17:27:13 2006 +0000
+++ b/test/testwm.c	Sun May 28 13:04:16 2006 +0000
@@ -10,367 +10,367 @@
 /* Is the cursor visible? */
 static int visible = 1;
 
-static Uint8  video_bpp;
+static Uint8 video_bpp;
 static Uint32 video_flags;
 
 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
-static void quit(int rc)
+static void
+quit (int rc)
 {
-	SDL_Quit();
-	exit(rc);
+    SDL_Quit ();
+    exit (rc);
 }
 
-int SetVideoMode(int w, int h)
+int
+SetVideoMode (int w, int h)
 {
-	SDL_Surface *screen;
-	int i;
-	Uint8 *buffer;
-	SDL_Color palette[256];
+    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");
+    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);
+    /* 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);
+    return (0);
 }
 
-SDL_Surface *LoadIconSurface(char *file, Uint8 **maskp)
+SDL_Surface *
+LoadIconSurface (char *file, Uint8 ** maskp)
 {
-	SDL_Surface *icon;
-	Uint8       *pixels;
-	Uint8       *mask;
-	int          mlen, i, j;
+    SDL_Surface *icon;
+    Uint8 *pixels;
+    Uint8 *mask;
+    int mlen, i, j;
+
+    *maskp = NULL;
 
-	*maskp = NULL;
+    /* Load the icon surface */
+    icon = SDL_LoadBMP (file);
+    if (icon == NULL) {
+        fprintf (stderr, "Couldn't load %s: %s\n", file, SDL_GetError ());
+        return (NULL);
+    }
 
-	/* Load the icon surface */
-	icon = SDL_LoadBMP(file);
-	if ( icon == NULL ) {
-		fprintf(stderr, "Couldn't load %s: %s\n", file, SDL_GetError());
-		return(NULL);
-	}
+    /* Check width and height 
+       if ( (icon->w%8) != 0 ) {
+       fprintf(stderr, "Icon width must be a multiple of 8!\n");
+       SDL_FreeSurface(icon);
+       return(NULL);
+       }
+     */
+
 
-	/* Check width and height 
-	if ( (icon->w%8) != 0 ) {
-		fprintf(stderr, "Icon width must be a multiple of 8!\n");
-		SDL_FreeSurface(icon);
-		return(NULL);
-	}
-*/
-    
-    
-	if ( icon->format->palette == NULL ) {
-		fprintf(stderr, "Icon must have a palette!\n");
-		SDL_FreeSurface(icon);
-		return(NULL);
-	}
+    if (icon->format->palette == NULL) {
+        fprintf (stderr, "Icon must have a palette!\n");
+        SDL_FreeSurface (icon);
+        return (NULL);
+    }
+
+    /* Set the colorkey */
+    SDL_SetColorKey (icon, SDL_SRCCOLORKEY, *((Uint8 *) icon->pixels));
 
-	/* Set the colorkey */
-	SDL_SetColorKey(icon, SDL_SRCCOLORKEY, *((Uint8 *)icon->pixels));
-
-	/* Create the mask */
-	pixels = (Uint8 *)icon->pixels;
-	printf("Transparent pixel: (%d,%d,%d)\n",
-				icon->format->palette->colors[*pixels].r,
-				icon->format->palette->colors[*pixels].g,
-				icon->format->palette->colors[*pixels].b);
-	mlen = (icon->w*icon->h + 7) / 8;
-	mask = (Uint8 *)malloc(mlen);
-	if ( mask == NULL ) {
-		fprintf(stderr, "Out of memory!\n");
-		SDL_FreeSurface(icon);
-		return(NULL);
-	}
-	memset(mask, 0, mlen);
-	for ( i=0; i < icon->h; i++)
-        for (j=0; j < icon->w; j++) {
+    /* Create the mask */
+    pixels = (Uint8 *) icon->pixels;
+    printf ("Transparent pixel: (%d,%d,%d)\n",
+            icon->format->palette->colors[*pixels].r,
+            icon->format->palette->colors[*pixels].g,
+            icon->format->palette->colors[*pixels].b);
+    mlen = (icon->w * icon->h + 7) / 8;
+    mask = (Uint8 *) malloc (mlen);
+    if (mask == NULL) {
+        fprintf (stderr, "Out of memory!\n");
+        SDL_FreeSurface (icon);
+        return (NULL);
+    }
+    memset (mask, 0, mlen);
+    for (i = 0; i < icon->h; i++)
+        for (j = 0; j < icon->w; j++) {
             int pindex = i * icon->pitch + j;
             int mindex = i * icon->w + j;
-            if ( pixels[pindex] != *pixels )
-                mask[mindex>>3] |= 1 << (7 - (mindex & 7));
+            if (pixels[pindex] != *pixels)
+                mask[mindex >> 3] |= 1 << (7 - (mindex & 7));
         }
-	*maskp = mask;
-	return(icon);
+    *maskp = mask;
+    return (icon);
 }
 
-void HotKey_ToggleFullScreen(void)
+void
+HotKey_ToggleFullScreen (void)
 {
-	SDL_Surface *screen;
+    SDL_Surface *screen;
 
-	screen = SDL_GetVideoSurface();
-	if ( SDL_WM_ToggleFullScreen(screen) ) {
-		printf("Toggled fullscreen mode - now %s\n",
-		    (screen->flags&SDL_FULLSCREEN) ? "fullscreen" : "windowed");
-	} else {
-		printf("Unable to toggle fullscreen mode\n");
-		video_flags ^= SDL_FULLSCREEN;
-		SetVideoMode(screen->w, screen->h);
-	}
+    screen = SDL_GetVideoSurface ();
+    if (SDL_WM_ToggleFullScreen (screen)) {
+        printf ("Toggled fullscreen mode - now %s\n",
+                (screen->flags & SDL_FULLSCREEN) ? "fullscreen" : "windowed");
+    } else {
+        printf ("Unable to toggle fullscreen mode\n");
+        video_flags ^= SDL_FULLSCREEN;
+        SetVideoMode (screen->w, screen->h);
+    }
 }
 
-void HotKey_ToggleGrab(void)
+void
+HotKey_ToggleGrab (void)
 {
-	SDL_GrabMode mode;
+    SDL_GrabMode mode;
 
-	printf("Ctrl-G: toggling input grab!\n");
-	mode = SDL_WM_GrabInput(SDL_GRAB_QUERY);
-	if ( mode == SDL_GRAB_ON ) {
-		printf("Grab was on\n");
-	} else {
-		printf("Grab was off\n");
-	}
-	mode = SDL_WM_GrabInput(mode ? SDL_GRAB_OFF : SDL_GRAB_ON);
-	if ( mode == SDL_GRAB_ON ) {
-		printf("Grab is now on\n");
-	} else {
-		printf("Grab is now off\n");
-	}
+    printf ("Ctrl-G: toggling input grab!\n");
+    mode = SDL_WM_GrabInput (SDL_GRAB_QUERY);
+    if (mode == SDL_GRAB_ON) {
+        printf ("Grab was on\n");
+    } else {
+        printf ("Grab was off\n");
+    }
+    mode = SDL_WM_GrabInput (mode ? SDL_GRAB_OFF : SDL_GRAB_ON);
+    if (mode == SDL_GRAB_ON) {
+        printf ("Grab is now on\n");
+    } else {
+        printf ("Grab is now off\n");
+    }
 }
 
-void HotKey_Iconify(void)
+void
+HotKey_Iconify (void)
 {
-	printf("Ctrl-Z: iconifying window!\n");
-	SDL_WM_IconifyWindow();
+    printf ("Ctrl-Z: iconifying window!\n");
+    SDL_WM_IconifyWindow ();
 }
 
-void HotKey_Quit(void)
+void
+HotKey_Quit (void)
 {
-	SDL_Event event;
+    SDL_Event event;
 
-	printf("Posting internal quit request\n");
-	event.type = SDL_USEREVENT;
-	SDL_PushEvent(&event);
+    printf ("Posting internal quit request\n");
+    event.type = SDL_USEREVENT;
+    SDL_PushEvent (&event);
 }
 
-int SDLCALL FilterEvents(const SDL_Event *event)
+int SDLCALL
+FilterEvents (const SDL_Event * event)
 {
-	static int reallyquit = 0;
+    static int reallyquit = 0;
 
-	switch (event->type) {
+    switch (event->type) {
 
-		case SDL_ACTIVEEVENT:
-			/* See what happened */
-			printf("App %s ",
-				event->active.gain ? "gained" : "lost");
-			if ( event->active.state & SDL_APPACTIVE )
-				printf("active ");
-			if ( event->active.state & SDL_APPINPUTFOCUS )
-				printf("input ");
-			if ( event->active.state & SDL_APPMOUSEFOCUS )
-				printf("mouse ");
-			printf("focus\n");
+    case SDL_ACTIVEEVENT:
+        /* See what happened */
+        printf ("App %s ", event->active.gain ? "gained" : "lost");
+        if (event->active.state & SDL_APPACTIVE)
+            printf ("active ");
+        if (event->active.state & SDL_APPINPUTFOCUS)
+            printf ("input ");
+        if (event->active.state & SDL_APPMOUSEFOCUS)
+            printf ("mouse ");
+        printf ("focus\n");
 
-			/* See if we are iconified or restored */
-			if ( event->active.state & SDL_APPACTIVE ) {
-				printf("App has been %s\n",
-					event->active.gain ?
-						 "restored" : "iconified");
-			}
-			return(0);
+        /* See if we are iconified or restored */
+        if (event->active.state & SDL_APPACTIVE) {
+            printf ("App has been %s\n",
+                    event->active.gain ? "restored" : "iconified");
+        }
+        return (0);
 
-		/* We want to toggle visibility on buttonpress */
-		case SDL_MOUSEBUTTONDOWN:
-		case SDL_MOUSEBUTTONUP:
-			if ( event->button.state == SDL_PRESSED ) {
-				visible = !visible;
-				SDL_ShowCursor(visible);
-			}
-			printf("Mouse button %d has been %s\n",
-				event->button.button,
-				(event->button.state == SDL_PRESSED) ?
-						"pressed" : "released");
-			return(0);
+        /* We want to toggle visibility on buttonpress */
+    case SDL_MOUSEBUTTONDOWN:
+    case SDL_MOUSEBUTTONUP:
+        if (event->button.state == SDL_PRESSED) {
+            visible = !visible;
+            SDL_ShowCursor (visible);
+        }
+        printf ("Mouse button %d has been %s\n",
+                event->button.button,
+                (event->button.state == SDL_PRESSED) ?
+                "pressed" : "released");
+        return (0);
 
-		/* Show relative mouse motion */
-		case SDL_MOUSEMOTION:
+        /* Show relative mouse motion */
+    case SDL_MOUSEMOTION:
 #if 0
-			printf("Mouse motion: {%d,%d} (%d,%d)\n",
-				event->motion.x, event->motion.y,
-				event->motion.xrel, event->motion.yrel);
+        printf ("Mouse motion: {%d,%d} (%d,%d)\n",
+                event->motion.x, event->motion.y,
+                event->motion.xrel, event->motion.yrel);
 #endif
-			return(0);
+        return (0);
 
-		case SDL_KEYDOWN:
-			if ( event->key.keysym.sym == SDLK_ESCAPE ) {
-				HotKey_Quit();
-			}
-			if ( (event->key.keysym.sym == SDLK_g) &&
-			     (event->key.keysym.mod & KMOD_CTRL) ) {
-				HotKey_ToggleGrab();
-			}
-			if ( (event->key.keysym.sym == SDLK_z) &&
-			     (event->key.keysym.mod & KMOD_CTRL) ) {
-				HotKey_Iconify();
-			}
-			if ( (event->key.keysym.sym == SDLK_RETURN) &&
-			     (event->key.keysym.mod & KMOD_ALT) ) {
-				HotKey_ToggleFullScreen();
-			}
-			return(0);
+    case SDL_KEYDOWN:
+        if (event->key.keysym.sym == SDLK_ESCAPE) {
+            HotKey_Quit ();
+        }
+        if ((event->key.keysym.sym == SDLK_g) &&
+            (event->key.keysym.mod & KMOD_CTRL)) {
+            HotKey_ToggleGrab ();
+        }
+        if ((event->key.keysym.sym == SDLK_z) &&
+            (event->key.keysym.mod & KMOD_CTRL)) {
+            HotKey_Iconify ();
+        }
+        if ((event->key.keysym.sym == SDLK_RETURN) &&
+            (event->key.keysym.mod & KMOD_ALT)) {
+            HotKey_ToggleFullScreen ();
+        }
+        return (0);
 
-		/* Pass the video resize event through .. */
-		case SDL_VIDEORESIZE:
-			return(1);
+        /* Pass the video resize event through .. */
+    case SDL_VIDEORESIZE:
+        return (1);
 
-		/* This is important!  Queue it if we want to quit. */
-		case SDL_QUIT:
-			if ( ! reallyquit ) {
-				reallyquit = 1;
-				printf("Quit requested\n");
-				return(0);
-			}
-			printf("Quit demanded\n");
-			return(1);
+        /* This is important!  Queue it if we want to quit. */
+    case SDL_QUIT:
+        if (!reallyquit) {
+            reallyquit = 1;
+            printf ("Quit requested\n");
+            return (0);
+        }
+        printf ("Quit demanded\n");
+        return (1);
 
-		/* This will never happen because events queued directly
-		   to the event queue are not filtered.
-		 */
-		case SDL_USEREVENT:
-			return(1);
+        /* This will never happen because events queued directly
+           to the event queue are not filtered.
+         */
+    case SDL_USEREVENT:
+        return (1);
 
-		/* Drop all other events */
-		default:
-			return(0);
-	}
+        /* Drop all other events */
+    default:
+        return (0);
+    }
 }
 
-int main(int argc, char *argv[])
+int
+main (int argc, char *argv[])
 {
-	SDL_Event event;
-	char *title;
-	SDL_Surface *icon;
-	Uint8 *icon_mask;
-	int parsed;
-	int w, h;
+    SDL_Event event;
+    char *title;
+    SDL_Surface *icon;
+    Uint8 *icon_mask;
+    int parsed;
+    int w, h;
 
-	if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
-		fprintf(stderr,
-			"Couldn't initialize SDL: %s\n", SDL_GetError());
-		return(1);
-	}
+    if (SDL_Init (SDL_INIT_VIDEO) < 0) {
+        fprintf (stderr, "Couldn't initialize SDL: %s\n", SDL_GetError ());
+        return (1);
+    }
 
-	/* Check command line arguments */
-	w = 640;
-	h = 480;
-	video_bpp = 8;
-	video_flags = SDL_SWSURFACE;
-	parsed = 1;
-	while ( parsed ) {
-		if ( (argc >= 2) && (strcmp(argv[1], "-fullscreen") == 0) ) {
-			video_flags |= SDL_FULLSCREEN;
-			argc -= 1;
-			argv += 1;
-		} else
-		if ( (argc >= 2) && (strcmp(argv[1], "-resize") == 0) ) {
-			video_flags |= SDL_RESIZABLE;
-			argc -= 1;
-			argv += 1;
-		} else
-		if ( (argc >= 2) && (strcmp(argv[1], "-noframe") == 0) ) {
-			video_flags |= SDL_NOFRAME;
-			argc -= 1;
-			argv += 1;
-		} else
-		if ( (argc >= 3) && (strcmp(argv[1], "-width") == 0) ) {
-			w = atoi(argv[2]);
-			argc -= 2;
-			argv += 2;
-		} else
-		if ( (argc >= 3) && (strcmp(argv[1], "-height") == 0) ) {
-			h = atoi(argv[2]);
-			argc -= 2;
-			argv += 2;
-		} else
-		if ( (argc >= 3) && (strcmp(argv[1], "-bpp") == 0) ) {
-			video_bpp = atoi(argv[2]);
-			argc -= 2;
-			argv += 2;
-		} else {
-			parsed = 0;
-		}
-	}
+    /* Check command line arguments */
+    w = 640;
+    h = 480;
+    video_bpp = 8;
+    video_flags = SDL_SWSURFACE;
+    parsed = 1;
+    while (parsed) {
+        if ((argc >= 2) && (strcmp (argv[1], "-fullscreen") == 0)) {
+            video_flags |= SDL_FULLSCREEN;
+            argc -= 1;
+            argv += 1;
+        } else if ((argc >= 2) && (strcmp (argv[1], "-resize") == 0)) {
+            video_flags |= SDL_RESIZABLE;
+            argc -= 1;
+            argv += 1;
+        } else if ((argc >= 2) && (strcmp (argv[1], "-noframe") == 0)) {
+            video_flags |= SDL_NOFRAME;
+            argc -= 1;
+            argv += 1;
+        } else if ((argc >= 3) && (strcmp (argv[1], "-width") == 0)) {
+            w = atoi (argv[2]);
+            argc -= 2;
+            argv += 2;
+        } else if ((argc >= 3) && (strcmp (argv[1], "-height") == 0)) {
+            h = atoi (argv[2]);
+            argc -= 2;
+            argv += 2;
+        } else if ((argc >= 3) && (strcmp (argv[1], "-bpp") == 0)) {
+            video_bpp = atoi (argv[2]);
+            argc -= 2;
+            argv += 2;
+        } else {
+            parsed = 0;
+        }
+    }
 
-	/* Set the icon -- this must be done before the first mode set */
-	icon = LoadIconSurface("icon.bmp", &icon_mask);
-	if ( icon != NULL ) {
-		SDL_WM_SetIcon(icon, icon_mask);
-	}
-	if ( icon_mask != NULL )
-		free(icon_mask);
+    /* Set the icon -- this must be done before the first mode set */
+    icon = LoadIconSurface ("icon.bmp", &icon_mask);
+    if (icon != NULL) {
+        SDL_WM_SetIcon (icon, icon_mask);
+    }
+    if (icon_mask != NULL)
+        free (icon_mask);
 
-	/* Set the title bar */
-	if ( argv[1] == NULL )
-		title = "Testing  1.. 2.. 3...";
-	else
-		title = argv[1];
-	SDL_WM_SetCaption(title, "testwm");
+    /* Set the title bar */
+    if (argv[1] == NULL)
+        title = "Testing  1.. 2.. 3...";
+    else
+        title = argv[1];
+    SDL_WM_SetCaption (title, "testwm");
 
-	/* See if it's really set */
-	SDL_WM_GetCaption(&title, NULL);
-	if ( title )
-		printf("Title was set to: %s\n", title);
-	else
-		printf("No window title was set!\n");
+    /* See if it's really set */
+    SDL_WM_GetCaption (&title, NULL);
+    if (title)
+        printf ("Title was set to: %s\n", title);
+    else
+        printf ("No window title was set!\n");
 
-	/* Initialize the display */
-	if ( SetVideoMode(w, h) < 0 ) {
-		quit(1);
-	}
+    /* Initialize the display */
+    if (SetVideoMode (w, h) < 0) {
+        quit (1);
+    }
 
-	/* Set an event filter that discards everything but QUIT */
-	SDL_SetEventFilter(FilterEvents);
+    /* Set an event filter that discards everything but QUIT */
+    SDL_SetEventFilter (FilterEvents);
 
-	/* Ignore key up events, they don't even get filtered */
-	SDL_EventState(SDL_KEYUP, SDL_IGNORE);
+    /* Ignore key up events, they don't even get filtered */
+    SDL_EventState (SDL_KEYUP, SDL_IGNORE);
 
-	/* Loop, waiting for QUIT */
-	while ( SDL_WaitEvent(&event) ) {
-		switch (event.type) {
-			case SDL_VIDEORESIZE:
-				printf("Got a resize event: %dx%d\n",
-				       event.resize.w, event.resize.h);
-				SetVideoMode(event.resize.w, event.resize.h);
-				break;
-			case SDL_USEREVENT:
-				printf("Handling internal quit request\n");
-				/* Fall through to the quit handler */
-			case SDL_QUIT:
-				printf("Bye bye..\n");
-				quit(0);
-			default:
-				/* This should never happen */
-				printf("Warning: Event %d wasn't filtered\n",
-								event.type);
-				break;
-		}
-	}
-	printf("SDL_WaitEvent() error: %s\n", SDL_GetError());
-	SDL_Quit();
-	return(255);
+    /* Loop, waiting for QUIT */
+    while (SDL_WaitEvent (&event)) {
+        switch (event.type) {
+        case SDL_VIDEORESIZE:
+            printf ("Got a resize event: %dx%d\n",
+                    event.resize.w, event.resize.h);
+            SetVideoMode (event.resize.w, event.resize.h);
+            break;
+        case SDL_USEREVENT:
+            printf ("Handling internal quit request\n");
+            /* Fall through to the quit handler */
+        case SDL_QUIT:
+            printf ("Bye bye..\n");
+            quit (0);
+        default:
+            /* This should never happen */
+            printf ("Warning: Event %d wasn't filtered\n", event.type);
+            break;
+        }
+    }
+    printf ("SDL_WaitEvent() error: %s\n", SDL_GetError ());
+    SDL_Quit ();
+    return (255);
 }