From fc54afcc05574d9de2e2ebf02e1012b4fab7407f Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 1 Feb 2003 20:32:44 +0000 Subject: [PATCH] Allow icons of any size --- test/testwm.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/test/testwm.c b/test/testwm.c index 3f82e3ce7..4d55c3582 100644 --- a/test/testwm.c +++ b/test/testwm.c @@ -15,7 +15,7 @@ SDL_Surface *LoadIconSurface(char *file, Uint8 **maskp) SDL_Surface *icon; Uint8 *pixels; Uint8 *mask; - int mlen, i; + int mlen, i, j; *maskp = NULL; @@ -26,12 +26,15 @@ SDL_Surface *LoadIconSurface(char *file, Uint8 **maskp) 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 @@ SDL_Surface *LoadIconSurface(char *file, Uint8 **maskp) 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; ih; 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); }