RESEND comctl32:toolbar: [1/2] Infrastructure CopyBitmap function
Oleg Krylov
oleg.krylov at gmail.com
Thu Jul 27 08:09:04 CDT 2006
RESEND missed part of the patch
comctl32:toolbar: [1/2] Infrastructure CopyBitmap function
changelog: 27.07.2006. by Oleg Krylov <oleg.krylov at gmail.com>
This patch is makes no changes to code other then adds CopyBitmap function
to avoid duplicate code changes in following patch.
Second patch in this mini series will change this function bahavior.
===============
diff -urN wine/dlls/comctl32/toolbar.c wineNew/dlls/comctl32/toolbar.c
--- wine/dlls/comctl32/toolbar.c 2006-05-23 15:47:38.000000000 +0300
+++ wineNew/dlls/comctl32/toolbar.c 2006-07-27 13:30:09.000000000 +0300
@@ -2567,6 +2567,37 @@
}
}
+/***********************************************************************
+ * CopyBitmap: Create a new copy of HBITMAP.
+ *
+ */
+static HBITMAP
+CopyBitmap (HBITMAP hbm)
+{
+ BITMAP bmp;
+ HBITMAP hOldBitmapBitmap, hOldBitmapLoad, hbmLoad;
+ HDC hdcImage, hdcBitmap;
+
+ GetObjectW (hbm, sizeof(BITMAP), (LPVOID)&bmp);
+
+ hdcImage = CreateCompatibleDC(0);
+ hdcBitmap = CreateCompatibleDC(0);
+
+ /* create new bitmap */
+ hbmLoad = CreateBitmap (bmp.bmWidth, bmp.bmHeight, bmp.bmPlanes,
bmp.bmBitsPixel, NULL);
+ hOldBitmapBitmap = SelectObject(hdcBitmap, hbm);
+ hOldBitmapLoad = SelectObject(hdcImage, hbmLoad);
+
+ /* Copy the user's image */
+ BitBlt (hdcImage, 0, 0, bmp.bmWidth, bmp.bmHeight,
+ hdcBitmap, 0, 0, SRCCOPY);
+
+ SelectObject (hdcImage, hOldBitmapLoad);
+ SelectObject (hdcBitmap, hOldBitmapBitmap);
+ DeleteDC (hdcImage);
+ DeleteDC (hdcBitmap);
+ return hbmLoad;
+}
/***********************************************************************
* TOOLBAR_AddBitmap: Add the bitmaps to the default image list.
@@ -2653,32 +2684,10 @@
/* Add bitmaps to the default image list */
if (lpAddBmp->hInst == NULL)
{
- BITMAP bmp;
- HBITMAP hOldBitmapBitmap, hOldBitmapLoad;
- HDC hdcImage, hdcBitmap;
-
/* copy the bitmap before adding it so that the user's bitmap
* doesn't get modified.
*/
- GetObjectW ((HBITMAP)lpAddBmp->nID, sizeof(BITMAP), (LPVOID)&bmp);
-
- hdcImage = CreateCompatibleDC(0);
- hdcBitmap = CreateCompatibleDC(0);
-
- /* create new bitmap */
- hbmLoad = CreateBitmap (bmp.bmWidth, bmp.bmHeight,
bmp.bmPlanes, bmp.bmBitsPixel, NULL);
- hOldBitmapBitmap = SelectObject(hdcBitmap, (HBITMAP)lpAddBmp->nID);
- hOldBitmapLoad = SelectObject(hdcImage, hbmLoad);
-
- /* Copy the user's image */
- BitBlt (hdcImage, 0, 0, bmp.bmWidth, bmp.bmHeight,
- hdcBitmap, 0, 0, SRCCOPY);
-
- SelectObject (hdcImage, hOldBitmapLoad);
- SelectObject (hdcBitmap, hOldBitmapBitmap);
- DeleteDC (hdcImage);
- DeleteDC (hdcBitmap);
-
+ hbmLoad = CopyBitmap((HBITMAP)lpAddBmp->nID);
nIndex = ImageList_AddMasked (himlDef, hbmLoad,
comctl32_color.clrBtnFace);
DeleteObject (hbmLoad);
}
@@ -4463,32 +4472,12 @@
if (hBitmap)
{
- BITMAP bmp;
- HBITMAP hOldBitmapBitmap, hOldBitmapLoad, hbmLoad;
- HDC hdcImage, hdcBitmap;
-
- /* copy the bitmap before adding it so that the user's bitmap
- * doesn't get modified.
- */
- GetObjectW (hBitmap, sizeof(BITMAP), (LPVOID)&bmp);
-
- hdcImage = CreateCompatibleDC(0);
- hdcBitmap = CreateCompatibleDC(0);
-
- /* create new bitmap */
- hbmLoad = CreateBitmap (bmp.bmWidth, bmp.bmHeight,
bmp.bmPlanes, bmp.bmBitsPixel, NULL);
- hOldBitmapBitmap = SelectObject(hdcBitmap, hBitmap);
- hOldBitmapLoad = SelectObject(hdcImage, hbmLoad);
-
- /* Copy the user's image */
- BitBlt (hdcImage, 0, 0, bmp.bmWidth, bmp.bmHeight,
- hdcBitmap, 0, 0, SRCCOPY);
-
- SelectObject (hdcImage, hOldBitmapLoad);
- SelectObject (hdcBitmap, hOldBitmapBitmap);
- DeleteDC (hdcImage);
- DeleteDC (hdcBitmap);
+ HBITMAP hbmLoad;
+ /* copy the bitmap before adding it so that the user's bitmap
+ * doesn't get modified.
+ */
+ hbmLoad = CopyBitmap(hBitmap);
ImageList_AddMasked (himlDef, hbmLoad, comctl32_color.clrBtnFace);
nNewBitmaps = ImageList_GetImageCount(himlDef);
DeleteObject (hbmLoad);
More information about the wine-patches
mailing list