comctl32: Fix Nx1 assumptions when adding multiple bitmaps with ImageList_Add.
This commit is contained in:
parent
ba73cac961
commit
6a9209da8f
@ -202,10 +202,10 @@ IMAGELIST_InternalExpandBitmaps (HIMAGELIST himl, INT nImageCount, INT cx, INT c
|
|||||||
INT WINAPI
|
INT WINAPI
|
||||||
ImageList_Add (HIMAGELIST himl, HBITMAP hbmImage, HBITMAP hbmMask)
|
ImageList_Add (HIMAGELIST himl, HBITMAP hbmImage, HBITMAP hbmMask)
|
||||||
{
|
{
|
||||||
HDC hdcBitmap;
|
HDC hdcBitmap, hdcTemp;
|
||||||
INT nFirstIndex, nImageCount;
|
INT nFirstIndex, nImageCount, i;
|
||||||
BITMAP bmp;
|
BITMAP bmp;
|
||||||
HBITMAP hOldBitmap;
|
HBITMAP hOldBitmap, hOldBitmapTemp;
|
||||||
POINT pt;
|
POINT pt;
|
||||||
|
|
||||||
TRACE("himl=%p hbmimage=%p hbmmask=%p\n", himl, hbmImage, hbmMask);
|
TRACE("himl=%p hbmimage=%p hbmmask=%p\n", himl, hbmImage, hbmMask);
|
||||||
@ -217,41 +217,35 @@ ImageList_Add (HIMAGELIST himl, HBITMAP hbmImage, HBITMAP hbmMask)
|
|||||||
|
|
||||||
IMAGELIST_InternalExpandBitmaps (himl, nImageCount, bmp.bmWidth, bmp.bmHeight);
|
IMAGELIST_InternalExpandBitmaps (himl, nImageCount, bmp.bmWidth, bmp.bmHeight);
|
||||||
|
|
||||||
imagelist_point_from_index( himl, himl->cCurImage, &pt );
|
|
||||||
|
|
||||||
hdcBitmap = CreateCompatibleDC(0);
|
hdcBitmap = CreateCompatibleDC(0);
|
||||||
|
|
||||||
hOldBitmap = SelectObject(hdcBitmap, hbmImage);
|
hOldBitmap = SelectObject(hdcBitmap, hbmImage);
|
||||||
|
|
||||||
/* Copy result to the imagelist
|
for (i=0; i<nImageCount; i++)
|
||||||
*/
|
|
||||||
BitBlt (himl->hdcImage, pt.x, pt.y, bmp.bmWidth, bmp.bmHeight,
|
|
||||||
hdcBitmap, 0, 0, SRCCOPY);
|
|
||||||
|
|
||||||
if(himl->hbmMask)
|
|
||||||
{
|
{
|
||||||
HDC hdcTemp;
|
imagelist_point_from_index( himl, himl->cCurImage + i, &pt );
|
||||||
HBITMAP hOldBitmapTemp;
|
|
||||||
|
/* Copy result to the imagelist
|
||||||
|
*/
|
||||||
|
BitBlt( himl->hdcImage, pt.x, pt.y, himl->cx, bmp.bmHeight,
|
||||||
|
hdcBitmap, i*himl->cx, 0, SRCCOPY );
|
||||||
|
|
||||||
|
if (!himl->hbmMask)
|
||||||
|
continue;
|
||||||
|
|
||||||
hdcTemp = CreateCompatibleDC(0);
|
hdcTemp = CreateCompatibleDC(0);
|
||||||
hOldBitmapTemp = SelectObject(hdcTemp, hbmMask);
|
hOldBitmapTemp = SelectObject(hdcTemp, hbmMask);
|
||||||
|
|
||||||
BitBlt (himl->hdcMask,
|
BitBlt( himl->hdcMask, pt.x, pt.y, himl->cx, bmp.bmHeight,
|
||||||
pt.x, pt.y, bmp.bmWidth, bmp.bmHeight,
|
hdcTemp, i*himl->cx, 0, SRCCOPY );
|
||||||
hdcTemp,
|
|
||||||
0, 0,
|
|
||||||
SRCCOPY);
|
|
||||||
|
|
||||||
SelectObject(hdcTemp, hOldBitmapTemp);
|
SelectObject(hdcTemp, hOldBitmapTemp);
|
||||||
DeleteDC(hdcTemp);
|
DeleteDC(hdcTemp);
|
||||||
|
|
||||||
/* Remove the background from the image
|
/* Remove the background from the image
|
||||||
*/
|
*/
|
||||||
BitBlt (himl->hdcImage,
|
BitBlt( himl->hdcImage, pt.x, pt.y, himl->cx, bmp.bmHeight,
|
||||||
pt.x, pt.y, bmp.bmWidth, bmp.bmHeight,
|
himl->hdcMask, pt.x, pt.y, 0x220326 ); /* NOTSRCAND */
|
||||||
himl->hdcMask,
|
|
||||||
pt.x, pt.y,
|
|
||||||
0x220326); /* NOTSRCAND */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectObject(hdcBitmap, hOldBitmap);
|
SelectObject(hdcBitmap, hOldBitmap);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user