Oleg Krylov : comctl32: Fix ImageList_Replace function to correctly apply image mask.
Module: wine Branch: master Commit: 496d63473520ed203c4ba1f2d371b725d7bb879b URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=496d63473520ed203c4ba1f2... Author: Oleg Krylov <oleg.krylov(a)gmail.com> Date: Thu Aug 17 16:08:22 2006 +0300 comctl32: Fix ImageList_Replace function to correctly apply image mask. --- dlls/comctl32/imagelist.c | 24 +++++++++++++++--------- 1 files changed, 15 insertions(+), 9 deletions(-) diff --git a/dlls/comctl32/imagelist.c b/dlls/comctl32/imagelist.c index cbd8f34..cc3078e 100644 --- a/dlls/comctl32/imagelist.c +++ b/dlls/comctl32/imagelist.c @@ -2158,6 +2158,7 @@ ImageList_Replace (HIMAGELIST himl, INT { HDC hdcImage; BITMAP bmp; + HBITMAP hOldBitmap; TRACE("%p %d %p %p\n", himl, i, hbmImage, hbmMask); @@ -2175,29 +2176,34 @@ ImageList_Replace (HIMAGELIST himl, INT GetObjectA (hbmImage, sizeof(BITMAP), (LPVOID)&bmp); /* Replace Image */ - SelectObject (hdcImage, hbmImage); + hOldBitmap = SelectObject (hdcImage, hbmImage); StretchBlt (himl->hdcImage, i * himl->cx, 0, himl->cx, himl->cy, hdcImage, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); if (himl->hbmMask) { - /* Replace Mask */ - SelectObject (hdcImage, hbmMask); + HDC hdcTemp; + HBITMAP hOldBitmapTemp; - StretchBlt (himl->hdcMask, i * himl->cx, 0, himl->cx, himl->cy, - hdcImage, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); + hdcTemp = CreateCompatibleDC(0); + hOldBitmapTemp = SelectObject(hdcTemp, hbmMask); + StretchBlt (himl->hdcMask, i * himl->cx, 0, himl->cx, himl->cy, + hdcTemp, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); + SelectObject(hdcTemp, hOldBitmapTemp); + DeleteDC(hdcTemp); /* Remove the background from the image */ - StretchBlt (himl->hdcImage, - i*himl->cx, 0, himl->cx, himl->cy, - hdcImage, - 0, 0, bmp.bmWidth, bmp.bmHeight, + BitBlt (himl->hdcImage, + i*himl->cx, 0, bmp.bmWidth, bmp.bmHeight, + himl->hdcMask, + i*himl->cx, 0, 0x220326); /* NOTSRCAND */ } + SelectObject (hdcImage, hOldBitmap); DeleteDC (hdcImage); return TRUE;
participants (1)
-
Alexandre Julliard