comparison test/graywin.c @ 0:74212992fb08

Initial revision
author Sam Lantinga <slouken@lokigames.com>
date Thu, 26 Apr 2001 16:45:43 +0000
parents
children bce7171e7a85
comparison
equal deleted inserted replaced
-1:000000000000 0:74212992fb08
1
2 /* Simple program: Fill a colormap with gray and stripe it down the screen */
3
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <string.h>
7 #include <time.h>
8
9 #include "SDL.h"
10
11 #ifdef TEST_VGA16 /* Define this if you want to test VGA 16-color video modes */
12 #define NUM_COLORS 16
13 #else
14 #define NUM_COLORS 256
15 #endif
16
17 /* Draw a randomly sized and colored box centered about (X,Y) */
18 void DrawBox(SDL_Surface *screen, int X, int Y)
19 {
20 static unsigned int seeded = 0;
21 SDL_Rect area;
22 Uint32 color;
23
24 /* Seed the random number generator */
25 if ( seeded == 0 ) {
26 srand(time(NULL));
27 seeded = 1;
28 }
29
30 /* Get the bounds of the rectangle */
31 area.w = (rand()%640);
32 area.h = (rand()%480);
33 area.x = X-(area.w/2);
34 area.y = Y-(area.h/2);
35 color = (rand()%NUM_COLORS);
36
37 /* Do it! */
38 SDL_FillRect(screen, &area, color);
39 SDL_UpdateRects(screen, 1, &area);
40 }
41
42 SDL_Surface *CreateScreen(Uint16 w, Uint16 h, Uint8 bpp, Uint32 flags)
43 {
44 SDL_Surface *screen;
45 int i;
46 SDL_Color palette[NUM_COLORS];
47 Uint8 *buffer;
48
49 /* Set the video mode */
50 screen = SDL_SetVideoMode(w, h, bpp, flags);
51 if ( screen == NULL ) {
52 fprintf(stderr, "Couldn't set display mode: %s\n",
53 SDL_GetError());
54 return(NULL);
55 }
56 fprintf(stderr, "Screen is in %s mode\n",
57 (screen->flags & SDL_FULLSCREEN) ? "fullscreen" : "windowed");
58
59 /* Set a gray colormap, reverse order from white to black */
60 for ( i=0; i<NUM_COLORS; ++i ) {
61 palette[i].r = (NUM_COLORS-1)-i * (256 / NUM_COLORS);
62 palette[i].g = (NUM_COLORS-1)-i * (256 / NUM_COLORS);
63 palette[i].b = (NUM_COLORS-1)-i * (256 / NUM_COLORS);
64 }
65 SDL_SetColors(screen, palette, 0, NUM_COLORS);
66
67 /* Set the surface pixels and refresh! */
68 if ( SDL_LockSurface(screen) < 0 ) {
69 fprintf(stderr, "Couldn't lock display surface: %s\n",
70 SDL_GetError());
71 return(NULL);
72 }
73 buffer = (Uint8 *)screen->pixels;
74 for ( i=0; i<screen->h; ++i ) {
75 memset(buffer,(i*(NUM_COLORS-1))/screen->h, screen->w);
76 buffer += screen->pitch;
77 }
78 SDL_UnlockSurface(screen);
79 SDL_UpdateRect(screen, 0, 0, 0, 0);
80
81 return(screen);
82 }
83
84 int main(int argc, char *argv[])
85 {
86 SDL_Surface *screen;
87 Uint32 videoflags;
88 int done;
89 SDL_Event event;
90 int width, height, bpp;
91
92 /* Initialize SDL */
93 if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
94 fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
95 exit(1);
96 }
97
98 /* See if we try to get a hardware colormap */
99 width = 640;
100 height = 480;
101 bpp = 8;
102 videoflags = SDL_SWSURFACE;
103 while ( argc > 1 ) {
104 --argc;
105 if ( argv[argc-1] && (strcmp(argv[argc-1], "-width") == 0) ) {
106 width = atoi(argv[argc]);
107 --argc;
108 } else
109 if ( argv[argc-1] && (strcmp(argv[argc-1], "-height") == 0) ) {
110 height = atoi(argv[argc]);
111 --argc;
112 } else
113 if ( argv[argc-1] && (strcmp(argv[argc-1], "-bpp") == 0) ) {
114 bpp = atoi(argv[argc]);
115 --argc;
116 } else
117 if ( argv[argc] && (strcmp(argv[argc], "-hw") == 0) ) {
118 videoflags |= SDL_HWSURFACE;
119 } else
120 if ( argv[argc] && (strcmp(argv[argc], "-hwpalette") == 0) ) {
121 videoflags |= SDL_HWPALETTE;
122 } else
123 if ( argv[argc] && (strcmp(argv[argc], "-noframe") == 0) ) {
124 videoflags |= SDL_NOFRAME;
125 } else
126 if ( argv[argc] && (strcmp(argv[argc], "-fullscreen") == 0) ) {
127 videoflags |= SDL_FULLSCREEN;
128 } else {
129 fprintf(stderr, "Usage: %s [-warp] [-fullscreen]\n",
130 argv[0]);
131 exit(1);
132 }
133 }
134
135 /* Set a video mode */
136 screen = CreateScreen(width, height, bpp, videoflags);
137 if ( screen == NULL ) {
138 exit(2);
139 }
140
141 /* Wait for a keystroke */
142 done = 0;
143 while ( !done && SDL_WaitEvent(&event) ) {
144 switch (event.type) {
145 case SDL_MOUSEBUTTONDOWN:
146 DrawBox(screen, event.button.x, event.button.y);
147 break;
148 case SDL_KEYDOWN:
149 /* Ignore ALT-TAB for windows */
150 if ( (event.key.keysym.sym == SDLK_LALT) ||
151 (event.key.keysym.sym == SDLK_TAB) ) {
152 break;
153 }
154 /* Center the mouse on <SPACE> */
155 if ( event.key.keysym.sym == SDLK_SPACE ) {
156 SDL_WarpMouse(640/2, 480/2);
157 break;
158 }
159 /* Toggle fullscreen mode on <RETURN> */
160 if ( event.key.keysym.sym == SDLK_RETURN ) {
161 videoflags ^= SDL_FULLSCREEN;
162 screen = CreateScreen(
163 screen->w, screen->h,
164 screen->format->BitsPerPixel,
165 videoflags);
166 if ( screen == NULL ) {
167 fprintf(stderr,
168 "Couldn't toggle fullscreen mode\n");
169 done = 1;
170 }
171 break;
172 }
173 /* Any other key quits the application... */
174 case SDL_QUIT:
175 done = 1;
176 break;
177 default:
178 break;
179 }
180 }
181 SDL_Quit();
182 return(0);
183 }