Index: vcl/source/gdi/image.cxx =================================================================== RCS file: /cvs/gsl/vcl/source/gdi/image.cxx,v retrieving revision 1.8 diff -u -p -u -r1.8 image.cxx --- vcl/source/gdi/image.cxx 27 Mar 2003 17:57:57 -0000 1.8 +++ vcl/source/gdi/image.cxx 16 Sep 2003 10:55:26 -0000 @@ -103,6 +103,16 @@ DBG_NAME( ImageList ); // ======================================================================= +static void SplitAlpha( Bitmap &rImage, Bitmap &rMask ) +{ + if( rImage.GetBitCount() < 32 ) + return; + + rMask = rImage.GetAlphaMask(); +} + +// ======================================================================= + ImplImageList::~ImplImageList() { if ( mpImageBitmap ) @@ -151,8 +161,14 @@ ImplImageData::ImplImageData( const Bitm maBmp( rBmp ), maColor( rColor ) { - mbColor = TRUE; - mpImageBitmap = NULL; + if( rBmp.GetBitCount() > 24 ) + { + maMaskBmp = rBmp.GetAlphaMask(); + mbColor = FALSE; + } + else + mbColor = TRUE; + mpImageBitmap = NULL; } // ----------------------------------------------------------------------- @@ -240,6 +256,8 @@ Image::Image( const ResId& rResId ) pResMgr->Increment( pResMgr->GetObjSize( (RSHEADER_TYPE*)pResMgr->GetClass() ) ); } + SplitAlpha( aImageBitmap, aMaskBitmap ); + if ( !aImageBitmap ) mpImplData = NULL; else @@ -786,6 +804,12 @@ static void ImplBmpImageCreate( ImageLis return; } + if( !rMaskBmp && rBitmap.GetBitCount() == 32 ) + { + rMaskBmp = rBitmap.GetAlphaMask(); + bColor = FALSE; + } + DBG_ASSERT( !nInit || rBitmap.GetSizePixel().Width(), "ImageList::ImageList(): nInitSize != 0 and BmpSize.Width() == 0" ); DBG_ASSERT( (rBitmap.GetSizePixel().Width() % nInit) == 0, @@ -893,6 +917,7 @@ ImageList::ImageList( const ResId& rResI pResMgr->Increment( pResMgr->GetObjSize( (RSHEADER_TYPE*)pResMgr->GetClass() ) ); bCol = TRUE; } + SplitAlpha( aImageBitmap, aMaskBitmap ); if ( nObjMask & RSC_IMAGELIST_IDLIST ) { bIsIdList = TRUE;