Mercurial > sdl-ios-xcode
diff src/video/quartz/SDL_QuartzWM.m @ 592:1970e458070d
Fixed crash in SDL_SetIcon() under Quartz (thanks Darrell!)
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 01 Feb 2003 20:33:59 +0000 |
parents | 04dcaf3da918 |
children | 7ec821f3cbd0 |
line wrap: on
line diff
--- a/src/video/quartz/SDL_QuartzWM.m Sat Feb 01 20:32:44 2003 +0000 +++ b/src/video/quartz/SDL_QuartzWM.m Sat Feb 01 20:33:59 2003 +0000 @@ -227,8 +227,7 @@ NSBitmapImageRep *imgrep; NSImage *img; SDL_Surface *mergedSurface; - Uint8 *surfPtr; - int i,j,masksize; + int i,j; NSAutoreleasePool *pool; SDL_Rect rrect; NSSize imgSize = {icon->w, icon->h}; @@ -244,18 +243,34 @@ goto freePool; } + if (mergedSurface->pitch != + mergedSurface->format->BytesPerPixel * mergedSurface->w) { + SDL_SetError ("merged surface has wrong format"); + SDL_FreeSurface (mergedSurface); + goto freePool; + } + if (SDL_BlitSurface(icon,&rrect,mergedSurface,&rrect)) { NSLog(@"Error blitting to mergedSurface"); goto freePool; } if (mask) { - masksize=icon->w*icon->h; - surfPtr = (Uint8 *)mergedSurface->pixels; - #define ALPHASHIFT 3 - for (i=0;i<masksize;i+=8) - for (j=0;j<8;j++) - surfPtr[ALPHASHIFT+((i+j)<<2)]=(mask[i>>3]&(1<<(7-j)))?0xFF:0x00; + + Uint32 *pixels = mergedSurface->pixels; + for (i = 0; i < mergedSurface->h; i++) { + for (j = 0; j < mergedSurface->w; j++) { + + int index = i * mergedSurface->w + j; + int mindex = index >> 3; + int bindex = 7 - (index & 0x7); + + if (mask[mindex] & (1 << bindex)) + pixels[index] |= 0x000000FF; + else + pixels[index] &= 0xFFFFFF00; + } + } } imgrep = [ [ NSBitmapImageRep alloc]