changeset 591:9c9598e4b904

Allow icons of any size
author Sam Lantinga <slouken@libsdl.org>
date Sat, 01 Feb 2003 20:32:44 +0000
parents 3f1e241519d9
children 1970e458070d
files test/testwm.c
diffstat 1 files changed, 15 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- 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);
 }