Alexandre Julliard : gdi32: Implement the CopyBitmap entry point in the null driver.
Alexandre Julliard
julliard at winehq.org
Wed Nov 9 13:29:41 CST 2011
Module: wine
Branch: master
Commit: 26f5e2c6e74832bcbdcf9fc0e0718b73be204201
URL: http://source.winehq.org/git/wine.git/?a=commit;h=26f5e2c6e74832bcbdcf9fc0e0718b73be204201
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Nov 7 22:14:50 2011 +0100
gdi32: Implement the CopyBitmap entry point in the null driver.
---
dlls/gdi32/bitmap.c | 21 +++++++++++++++++++++
dlls/gdi32/dibdrv/dc.c | 10 +++++++++-
dlls/gdi32/driver.c | 5 -----
dlls/gdi32/gdi_private.h | 1 +
4 files changed, 31 insertions(+), 6 deletions(-)
diff --git a/dlls/gdi32/bitmap.c b/dlls/gdi32/bitmap.c
index 7407906..9042b88 100644
--- a/dlls/gdi32/bitmap.c
+++ b/dlls/gdi32/bitmap.c
@@ -65,6 +65,27 @@ DWORD nulldrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *inf
return dib_driver.pPutImage( NULL, hbitmap, clip, info, bits, src, dst, rop );
}
+BOOL nulldrv_CopyBitmap( HBITMAP src, HBITMAP dst )
+{
+ BOOL ret = TRUE;
+ BITMAPOBJ *src_bmp = GDI_GetObjPtr( src, OBJ_BITMAP );
+
+ if (!src_bmp) return FALSE;
+ if (src_bmp->bitmap.bmBits)
+ {
+ BITMAPOBJ *dst_bmp = GDI_GetObjPtr( dst, OBJ_BITMAP );
+ int stride = get_dib_stride( dst_bmp->bitmap.bmWidth, dst_bmp->bitmap.bmBitsPixel );
+ dst_bmp->bitmap.bmBits = HeapAlloc( GetProcessHeap(), 0, dst_bmp->bitmap.bmHeight * stride );
+ if (dst_bmp->bitmap.bmBits)
+ memcpy( dst_bmp->bitmap.bmBits, src_bmp->bitmap.bmBits, dst_bmp->bitmap.bmHeight * stride );
+ else
+ ret = FALSE;
+ GDI_ReleaseObj( dst );
+ }
+ GDI_ReleaseObj( src );
+ return ret;
+}
+
/******************************************************************************
* CreateBitmap [GDI32.@]
diff --git a/dlls/gdi32/dibdrv/dc.c b/dlls/gdi32/dibdrv/dc.c
index 3adf246..a91de78 100644
--- a/dlls/gdi32/dibdrv/dc.c
+++ b/dlls/gdi32/dibdrv/dc.c
@@ -391,6 +391,14 @@ static BOOL dibdrv_DeleteDC( PHYSDEV dev )
}
/***********************************************************************
+ * dibdrv_CopyBitmap
+ */
+static BOOL dibdrv_CopyBitmap( HBITMAP src, HBITMAP dst )
+{
+ return nulldrv_CopyBitmap( src, dst );
+}
+
+/***********************************************************************
* dibdrv_DeleteBitmap
*/
static BOOL dibdrv_DeleteBitmap( HBITMAP bitmap )
@@ -523,7 +531,7 @@ const struct gdi_dc_funcs dib_driver =
NULL, /* pChoosePixelFormat */
NULL, /* pChord */
NULL, /* pCloseFigure */
- NULL, /* pCopyBitmap */
+ dibdrv_CopyBitmap, /* pCopyBitmap */
NULL, /* pCreateBitmap */
NULL, /* pCreateCompatibleDC */
dibdrv_CreateDC, /* pCreateDC */
diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index b72d6d7..9b951d0 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -209,11 +209,6 @@ static BOOL nulldrv_Chord( PHYSDEV dev, INT left, INT top, INT right, INT bottom
return TRUE;
}
-static BOOL nulldrv_CopyBitmap( HBITMAP src, HBITMAP dst )
-{
- return TRUE;
-}
-
static BOOL nulldrv_CreateBitmap( PHYSDEV dev, HBITMAP bitmap )
{
return TRUE;
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index 9e40fc5..ab5cf25 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -357,6 +357,7 @@ extern BOOL nulldrv_BeginPath( PHYSDEV dev ) DECLSPEC_HIDDEN;
extern DWORD nulldrv_BlendImage( PHYSDEV dev, BITMAPINFO *info, const struct gdi_image_bits *bits,
struct bitblt_coords *src, struct bitblt_coords *dst, BLENDFUNCTION func ) DECLSPEC_HIDDEN;
extern BOOL nulldrv_CloseFigure( PHYSDEV dev ) DECLSPEC_HIDDEN;
+extern BOOL nulldrv_CopyBitmap( HBITMAP src, HBITMAP dst ) DECLSPEC_HIDDEN;
extern BOOL nulldrv_EndPath( PHYSDEV dev ) DECLSPEC_HIDDEN;
extern INT nulldrv_ExcludeClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN;
extern INT nulldrv_ExtSelectClipRgn( PHYSDEV dev, HRGN rgn, INT mode ) DECLSPEC_HIDDEN;
More information about the wine-cvs
mailing list