Fixed crash in SDL_SetIcon() under Quartz (thanks Darrell!)
authorSam Lantinga <slouken@libsdl.org>
Sat, 01 Feb 2003 20:33:59 +0000
changeset 592 1970e458070d
parent 591 9c9598e4b904
child 593 0136d21b7764
Fixed crash in SDL_SetIcon() under Quartz (thanks Darrell!)
src/video/quartz/SDL_QuartzWM.m
--- 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]