summaryrefslogtreecommitdiff
path: root/app/wlib/mswlib/mswbitmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/wlib/mswlib/mswbitmap.c')
-rw-r--r--app/wlib/mswlib/mswbitmap.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/app/wlib/mswlib/mswbitmap.c b/app/wlib/mswlib/mswbitmap.c
index 7371834..e369e78 100644
--- a/app/wlib/mswlib/mswbitmap.c
+++ b/app/wlib/mswlib/mswbitmap.c
@@ -144,7 +144,7 @@ void mswDrawIcon(
COLORREF col;
/* draw the bitmap by dynamically creating a Windows DIB in memory */
-
+ /* BITMAPINFO already has one RGBQUAD color struct, so only allocate the rest */
bmiInfo = malloc( sizeof( BITMAPINFO ) + (bm->colorcnt - 1) * sizeof( RGBQUAD ));
if( !bmiInfo ) {
fprintf( stderr, "could not allocate memory for bmiInfo\n" );
@@ -201,17 +201,19 @@ void mswDrawIcon(
if( disabled ) {
/* create a gray scale palette */
for( i = 0; i < bm->colorcnt; i ++ ) {
- byt = ( 30 * bm->colormap[ i ].rgbRed +
- 59 * bm->colormap[ i ].rgbGreen +
- 11 * bm->colormap[ i ].rgbBlue )/100;
-
- /* if totally black, use a dark gray */
- if( byt == 0 )
- byt = 0x66;
-
- bmiInfo->bmiColors[ i ].rgbRed = byt;
- bmiInfo->bmiColors[ i ].rgbGreen = byt;
- bmiInfo->bmiColors[ i ].rgbBlue = byt;
+ if (i != bm->transparent) {
+ byt = (30 * bm->colormap[i].rgbRed +
+ 59 * bm->colormap[i].rgbGreen +
+ 11 * bm->colormap[i].rgbBlue) / 100;
+
+ /* if totally black, use a dark gray */
+ if (byt == 0)
+ byt = 0x66;
+
+ bmiInfo->bmiColors[i].rgbRed = byt;
+ bmiInfo->bmiColors[i].rgbGreen = byt;
+ bmiInfo->bmiColors[i].rgbBlue = byt;
+ }
}
} else {
/* copy the palette */