--- a/test/testwm.c Sat Feb 01 20:30:55 2003 +0000
+++ b/test/testwm.c Sat Feb 01 20:32:44 2003 +0000
@@ -15,7 +15,7 @@
SDL_Surface *icon;
Uint8 *pixels;
Uint8 *mask;
- int mlen, i;
+ int mlen, i, j;
*maskp = NULL;
@@ -26,12 +26,15 @@
return(NULL);
}
- /* Check width and height */
+ /* Check width and height
if ( (icon->w%8) != 0 ) {
fprintf(stderr, "Icon width must be a multiple of 8!\n");
SDL_FreeSurface(icon);
return(NULL);
}
+*/
+
+
if ( icon->format->palette == NULL ) {
fprintf(stderr, "Icon must have a palette!\n");
SDL_FreeSurface(icon);
@@ -47,21 +50,21 @@
icon->format->palette->colors[*pixels].r,
icon->format->palette->colors[*pixels].g,
icon->format->palette->colors[*pixels].b);
- mlen = icon->w*icon->h;
- mask = (Uint8 *)malloc(mlen/8);
+ mlen = (icon->w*icon->h + 7) / 8;
+ mask = (Uint8 *)malloc(mlen);
if ( mask == NULL ) {
fprintf(stderr, "Out of memory!\n");
SDL_FreeSurface(icon);
return(NULL);
}
- memset(mask, 0, mlen/8);
- for ( i=0; i<mlen; ) {
- if ( pixels[i] != *pixels )
- mask[i/8] |= 0x01;
- ++i;
- if ( (i%8) != 0 )
- mask[i/8] <<= 1;
- }
+ memset(mask, 0, mlen);
+ for ( i=0; i < icon->h; i++)
+ for (j=0; j < icon->w; j++) {
+ int pindex = i * icon->pitch + j;
+ int mindex = i * icon->w + j;
+ if ( pixels[pindex] != *pixels )
+ mask[mindex>>3] |= 1 << (7 - (mindex & 7));
+ }
*maskp = mask;
return(icon);
}