Mercurial > sdl-ios-xcode
comparison test/graywin.c @ 691:609543e2b3a1
Date: Fri, 15 Aug 2003 09:13:59 +0300
From: "Mike Gorchak"
Subject: Patches for tests and QNX6
1) graywin - added support for the gray gradient in the 15/16 bpp modes. Added SDL_VIDEOEXPOSE event handling.
2) testalpha - added support for the gray gradient in the 15/16 bpp modes.
3) testbitmap - added support for the gray gradient in the 8/15/16 bpp modes.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 23 Aug 2003 23:18:49 +0000 |
parents | d3abe873e3f7 |
children | d33645c36072 |
comparison
equal
deleted
inserted
replaced
690:b87d8d4c205d | 691:609543e2b3a1 |
---|---|
18 void DrawBox(SDL_Surface *screen, int X, int Y, int width, int height) | 18 void DrawBox(SDL_Surface *screen, int X, int Y, int width, int height) |
19 { | 19 { |
20 static unsigned int seeded = 0; | 20 static unsigned int seeded = 0; |
21 SDL_Rect area; | 21 SDL_Rect area; |
22 Uint32 color; | 22 Uint32 color; |
23 Uint32 randc; | |
23 | 24 |
24 /* Seed the random number generator */ | 25 /* Seed the random number generator */ |
25 if ( seeded == 0 ) { | 26 if ( seeded == 0 ) { |
26 srand(time(NULL)); | 27 srand(time(NULL)); |
27 seeded = 1; | 28 seeded = 1; |
30 /* Get the bounds of the rectangle */ | 31 /* Get the bounds of the rectangle */ |
31 area.w = (rand()%width); | 32 area.w = (rand()%width); |
32 area.h = (rand()%height); | 33 area.h = (rand()%height); |
33 area.x = X-(area.w/2); | 34 area.x = X-(area.w/2); |
34 area.y = Y-(area.h/2); | 35 area.y = Y-(area.h/2); |
35 color = (rand()%NUM_COLORS); | 36 randc = (rand()%NUM_COLORS); |
37 | |
38 if (screen->format->BytesPerPixel==1) | |
39 { | |
40 color = randc; | |
41 } | |
42 else | |
43 { | |
44 color = SDL_MapRGB(screen->format, randc, randc, randc); | |
45 } | |
36 | 46 |
37 /* Do it! */ | 47 /* Do it! */ |
38 SDL_FillRect(screen, &area, color); | 48 SDL_FillRect(screen, &area, color); |
39 if ( screen->flags & SDL_DOUBLEBUF ) { | 49 if ( screen->flags & SDL_DOUBLEBUF ) { |
40 SDL_Flip(screen); | 50 SDL_Flip(screen); |
41 } else { | 51 } else { |
42 SDL_UpdateRects(screen, 1, &area); | 52 SDL_UpdateRects(screen, 1, &area); |
43 } | 53 } |
44 } | 54 } |
45 | 55 |
56 void DrawBackground(SDL_Surface *screen) | |
57 { | |
58 int i, j, k; | |
59 Uint8 *buffer; | |
60 Uint16 *buffer16; | |
61 Uint16 color; | |
62 Uint8 gradient; | |
63 | |
64 /* Set the surface pixels and refresh! */ | |
65 /* Use two loops in case the surface is double-buffered (both sides) */ | |
66 | |
67 for ( j=0; j<2; ++j ) { | |
68 if ( SDL_LockSurface(screen) < 0 ) { | |
69 fprintf(stderr, "Couldn't lock display surface: %s\n", | |
70 SDL_GetError()); | |
71 return; | |
72 } | |
73 buffer = (Uint8 *)screen->pixels; | |
74 | |
75 if (screen->format->BytesPerPixel!=2) { | |
76 for ( i=0; i<screen->h; ++i ) { | |
77 memset(buffer,(i*(NUM_COLORS-1))/screen->h, screen->w * screen->format->BytesPerPixel); | |
78 buffer += screen->pitch; | |
79 } | |
80 } | |
81 else | |
82 { | |
83 for ( i=0; i<screen->h; ++i ) { | |
84 gradient=((i*(NUM_COLORS-1))/screen->h); | |
85 color = SDL_MapRGB(screen->format, gradient, gradient, gradient); | |
86 buffer16=(Uint16*)buffer; | |
87 for (k=0; k<screen->w; k++) | |
88 { | |
89 *(buffer16+k)=color; | |
90 } | |
91 buffer += screen->pitch; | |
92 } | |
93 } | |
94 | |
95 SDL_UnlockSurface(screen); | |
96 if ( screen->flags & SDL_DOUBLEBUF ) { | |
97 SDL_Flip(screen); | |
98 } else { | |
99 SDL_UpdateRect(screen, 0, 0, 0, 0); | |
100 break; | |
101 } | |
102 } | |
103 } | |
104 | |
46 SDL_Surface *CreateScreen(Uint16 w, Uint16 h, Uint8 bpp, Uint32 flags) | 105 SDL_Surface *CreateScreen(Uint16 w, Uint16 h, Uint8 bpp, Uint32 flags) |
47 { | 106 { |
48 SDL_Surface *screen; | 107 SDL_Surface *screen; |
49 int i; | 108 int i; |
50 SDL_Color palette[NUM_COLORS]; | 109 SDL_Color palette[NUM_COLORS]; |
51 Uint8 *buffer; | |
52 | 110 |
53 /* Set the video mode */ | 111 /* Set the video mode */ |
54 screen = SDL_SetVideoMode(w, h, bpp, flags); | 112 screen = SDL_SetVideoMode(w, h, bpp, flags); |
55 if ( screen == NULL ) { | 113 if ( screen == NULL ) { |
56 fprintf(stderr, "Couldn't set display mode: %s\n", | 114 fprintf(stderr, "Couldn't set display mode: %s\n", |
58 return(NULL); | 116 return(NULL); |
59 } | 117 } |
60 fprintf(stderr, "Screen is in %s mode\n", | 118 fprintf(stderr, "Screen is in %s mode\n", |
61 (screen->flags & SDL_FULLSCREEN) ? "fullscreen" : "windowed"); | 119 (screen->flags & SDL_FULLSCREEN) ? "fullscreen" : "windowed"); |
62 | 120 |
63 /* Set a gray colormap, reverse order from white to black */ | 121 if (bpp==8) { |
64 for ( i=0; i<NUM_COLORS; ++i ) { | 122 /* Set a gray colormap, reverse order from white to black */ |
65 palette[i].r = (NUM_COLORS-1)-i * (256 / NUM_COLORS); | 123 for ( i=0; i<NUM_COLORS; ++i ) { |
66 palette[i].g = (NUM_COLORS-1)-i * (256 / NUM_COLORS); | 124 palette[i].r = (NUM_COLORS-1)-i * (256 / NUM_COLORS); |
67 palette[i].b = (NUM_COLORS-1)-i * (256 / NUM_COLORS); | 125 palette[i].g = (NUM_COLORS-1)-i * (256 / NUM_COLORS); |
68 } | 126 palette[i].b = (NUM_COLORS-1)-i * (256 / NUM_COLORS); |
69 SDL_SetColors(screen, palette, 0, NUM_COLORS); | 127 } |
70 | 128 SDL_SetColors(screen, palette, 0, NUM_COLORS); |
71 /* Set the surface pixels and refresh! */ | |
72 /* Use two loops in case the surface is double-buffered (both sides) */ | |
73 for ( i=0; i<2; ++i ) { | |
74 if ( SDL_LockSurface(screen) < 0 ) { | |
75 fprintf(stderr, "Couldn't lock display surface: %s\n", | |
76 SDL_GetError()); | |
77 return(NULL); | |
78 } | |
79 buffer = (Uint8 *)screen->pixels; | |
80 for ( i=0; i<screen->h; ++i ) { | |
81 memset(buffer,(i*(NUM_COLORS-1))/screen->h, screen->w * screen->format->BytesPerPixel); | |
82 buffer += screen->pitch; | |
83 } | |
84 SDL_UnlockSurface(screen); | |
85 if ( screen->flags & SDL_DOUBLEBUF ) { | |
86 SDL_Flip(screen); | |
87 } else { | |
88 SDL_UpdateRect(screen, 0, 0, 0, 0); | |
89 } | |
90 } | 129 } |
91 | 130 |
92 return(screen); | 131 return(screen); |
93 } | 132 } |
94 | 133 |
149 /* Set a video mode */ | 188 /* Set a video mode */ |
150 screen = CreateScreen(width, height, bpp, videoflags); | 189 screen = CreateScreen(width, height, bpp, videoflags); |
151 if ( screen == NULL ) { | 190 if ( screen == NULL ) { |
152 exit(2); | 191 exit(2); |
153 } | 192 } |
193 | |
194 DrawBackground(screen); | |
154 | 195 |
155 /* Wait for a keystroke */ | 196 /* Wait for a keystroke */ |
156 done = 0; | 197 done = 0; |
157 while ( !done && SDL_WaitEvent(&event) ) { | 198 while ( !done && SDL_WaitEvent(&event) ) { |
158 switch (event.type) { | 199 switch (event.type) { |
180 if ( screen == NULL ) { | 221 if ( screen == NULL ) { |
181 fprintf(stderr, | 222 fprintf(stderr, |
182 "Couldn't toggle fullscreen mode\n"); | 223 "Couldn't toggle fullscreen mode\n"); |
183 done = 1; | 224 done = 1; |
184 } | 225 } |
226 DrawBackground(screen); | |
185 break; | 227 break; |
186 } | 228 } |
187 /* Any other key quits the application... */ | 229 /* Any other key quits the application... */ |
188 case SDL_QUIT: | 230 case SDL_QUIT: |
189 done = 1; | 231 done = 1; |
190 break; | 232 break; |
233 case SDL_VIDEOEXPOSE: | |
234 DrawBackground(screen); | |
235 break; | |
191 default: | 236 default: |
192 break; | 237 break; |
193 } | 238 } |
194 } | 239 } |
195 SDL_Quit(); | 240 SDL_Quit(); |