Mercurial > sdl-ios-xcode
comparison src/video/SDL_video.c @ 3995:604321d3575e SDL-1.2
Fixed bug #398
You can use SetColors() before the video mode has been set.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 03 Jul 2007 09:39:09 +0000 |
parents | 8582c6a5ca16 |
children | fc69b552ee32 |
comparison
equal
deleted
inserted
replaced
3994:720c59bd38ac | 3995:604321d3575e |
---|---|
1140 if ( colors != (pal->colors + firstcolor) ) { | 1140 if ( colors != (pal->colors + firstcolor) ) { |
1141 SDL_memcpy(pal->colors + firstcolor, colors, | 1141 SDL_memcpy(pal->colors + firstcolor, colors, |
1142 ncolors * sizeof(*colors)); | 1142 ncolors * sizeof(*colors)); |
1143 } | 1143 } |
1144 | 1144 |
1145 vidpal = SDL_VideoSurface->format->palette; | 1145 if ( current_video && SDL_VideoSurface ) { |
1146 if ( (screen == SDL_ShadowSurface) && vidpal ) { | 1146 vidpal = SDL_VideoSurface->format->palette; |
1147 /* | 1147 if ( (screen == SDL_ShadowSurface) && vidpal ) { |
1148 * This is a shadow surface, and the physical | 1148 /* |
1149 * framebuffer is also indexed. Propagate the | 1149 * This is a shadow surface, and the physical |
1150 * changes to its logical palette so that | 1150 * framebuffer is also indexed. Propagate the |
1151 * updates are always identity blits | 1151 * changes to its logical palette so that |
1152 */ | 1152 * updates are always identity blits |
1153 SDL_memcpy(vidpal->colors + firstcolor, colors, | 1153 */ |
1154 ncolors * sizeof(*colors)); | 1154 SDL_memcpy(vidpal->colors + firstcolor, colors, |
1155 ncolors * sizeof(*colors)); | |
1156 } | |
1155 } | 1157 } |
1156 SDL_FormatChanged(screen); | 1158 SDL_FormatChanged(screen); |
1157 } | 1159 } |
1158 | 1160 |
1159 static int SetPalette_physical(SDL_Surface *screen, | 1161 static int SetPalette_physical(SDL_Surface *screen, |
1242 { | 1244 { |
1243 SDL_Palette *pal; | 1245 SDL_Palette *pal; |
1244 int gotall; | 1246 int gotall; |
1245 int palsize; | 1247 int palsize; |
1246 | 1248 |
1247 if ( ! current_video ) { | 1249 if ( !screen ) { |
1248 return 0; | 1250 return 0; |
1249 } | 1251 } |
1250 if ( screen != SDL_PublicSurface ) { | 1252 if ( !current_video || screen != SDL_PublicSurface ) { |
1251 /* only screens have physical palettes */ | 1253 /* only screens have physical palettes */ |
1252 which &= ~SDL_PHYSPAL; | 1254 which &= ~SDL_PHYSPAL; |
1253 } else if( (screen->flags & SDL_HWPALETTE) != SDL_HWPALETTE ) { | 1255 } else if ( (screen->flags & SDL_HWPALETTE) != SDL_HWPALETTE ) { |
1254 /* hardware palettes required for split colormaps */ | 1256 /* hardware palettes required for split colormaps */ |
1255 which |= SDL_PHYSPAL | SDL_LOGPAL; | 1257 which |= SDL_PHYSPAL | SDL_LOGPAL; |
1256 } | 1258 } |
1257 | 1259 |
1258 /* Verify the parameters */ | 1260 /* Verify the parameters */ |
1281 /* | 1283 /* |
1282 * Physical palette change: This doesn't affect the | 1284 * Physical palette change: This doesn't affect the |
1283 * program's idea of what the screen looks like, but changes | 1285 * program's idea of what the screen looks like, but changes |
1284 * its actual appearance. | 1286 * its actual appearance. |
1285 */ | 1287 */ |
1286 if(!video) | 1288 if ( !video->physpal && !(which & SDL_LOGPAL) ) { |
1287 return gotall; /* video not yet initialized */ | |
1288 if(!video->physpal && !(which & SDL_LOGPAL) ) { | |
1289 /* Lazy physical palette allocation */ | 1289 /* Lazy physical palette allocation */ |
1290 int size; | 1290 int size; |
1291 SDL_Palette *pp = SDL_malloc(sizeof(*pp)); | 1291 SDL_Palette *pp = SDL_malloc(sizeof(*pp)); |
1292 if ( !pp ) { | 1292 if ( !pp ) { |
1293 return 0; | 1293 return 0; |
1294 } | 1294 } |
1295 current_video->physpal = pp; | 1295 video->physpal = pp; |
1296 pp->ncolors = pal->ncolors; | 1296 pp->ncolors = pal->ncolors; |
1297 size = pp->ncolors * sizeof(SDL_Color); | 1297 size = pp->ncolors * sizeof(SDL_Color); |
1298 pp->colors = SDL_malloc(size); | 1298 pp->colors = SDL_malloc(size); |
1299 if ( !pp->colors ) { | 1299 if ( !pp->colors ) { |
1300 return 0; | 1300 return 0; |