Jacek Caban : gdi32: Introduce NtGdiSelectBitmap.

Alexandre Julliard julliard at winehq.org
Fri Jul 2 14:46:39 CDT 2021


Module: wine
Branch: master
Commit: 30550d2e6da6d0a166e65372acb3c4d537834a3c
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=30550d2e6da6d0a166e65372acb3c4d537834a3c

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jul  2 12:38:34 2021 +0200

gdi32: Introduce NtGdiSelectBitmap.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdi32/bitmap.c | 15 ++++++++++++---
 dlls/gdi32/dib.c    | 54 +----------------------------------------------------
 2 files changed, 13 insertions(+), 56 deletions(-)

diff --git a/dlls/gdi32/bitmap.c b/dlls/gdi32/bitmap.c
index bb1d7d4eebd..3d2c2e365e1 100644
--- a/dlls/gdi32/bitmap.c
+++ b/dlls/gdi32/bitmap.c
@@ -423,9 +423,9 @@ LONG WINAPI SetBitmapBits(
 
 
 /***********************************************************************
- *           BITMAP_SelectObject
+ *           NtGdiSelectBitmap (win32u.@)
  */
-static HGDIOBJ BITMAP_SelectObject( HGDIOBJ handle, HDC hdc )
+HGDIOBJ WINAPI NtGdiSelectBitmap( HDC hdc, HGDIOBJ handle )
 {
     HGDIOBJ ret;
     BITMAPOBJ *bitmap;
@@ -456,7 +456,8 @@ static HGDIOBJ BITMAP_SelectObject( HGDIOBJ handle, HDC hdc )
         goto done;
     }
 
-    if (bitmap->dib.dsBm.bmBitsPixel != 1 &&
+    if (!is_bitmapobj_dib( bitmap ) &&
+        bitmap->dib.dsBm.bmBitsPixel != 1 &&
         bitmap->dib.dsBm.bmBitsPixel != GetDeviceCaps( hdc, BITSPIXEL ))
     {
         WARN( "Wrong format bitmap %u bpp\n", bitmap->dib.dsBm.bmBitsPixel );
@@ -491,6 +492,14 @@ static HGDIOBJ BITMAP_SelectObject( HGDIOBJ handle, HDC hdc )
     return ret;
 }
 
+/***********************************************************************
+ *           BITMAP_SelectObject
+ */
+static HGDIOBJ BITMAP_SelectObject( HGDIOBJ handle, HDC hdc )
+{
+    return NtGdiSelectBitmap( hdc, handle );
+}
+
 
 /***********************************************************************
  *           BITMAP_DeleteObject
diff --git a/dlls/gdi32/dib.c b/dlls/gdi32/dib.c
index 2e55579fb6e..fdd7c9bcfbc 100644
--- a/dlls/gdi32/dib.c
+++ b/dlls/gdi32/dib.c
@@ -1722,59 +1722,7 @@ NTSTATUS WINAPI D3DKMTDestroyDCFromMemory( const D3DKMT_DESTROYDCFROMMEMORY *des
  */
 static HGDIOBJ DIB_SelectObject( HGDIOBJ handle, HDC hdc )
 {
-    HGDIOBJ ret;
-    BITMAPOBJ *bitmap;
-    DC *dc;
-    PHYSDEV physdev;
-
-    if (!(dc = get_dc_ptr( hdc ))) return 0;
-
-    if (GetObjectType( hdc ) != OBJ_MEMDC)
-    {
-        ret = 0;
-        goto done;
-    }
-    ret = dc->hBitmap;
-    if (handle == dc->hBitmap) goto done;  /* nothing to do */
-
-    if (!(bitmap = GDI_GetObjPtr( handle, OBJ_BITMAP )))
-    {
-        ret = 0;
-        goto done;
-    }
-
-    if (GDI_get_ref_count( handle ))
-    {
-        WARN( "Bitmap already selected in another DC\n" );
-        GDI_ReleaseObj( handle );
-        ret = 0;
-        goto done;
-    }
-
-    physdev = GET_DC_PHYSDEV( dc, pSelectBitmap );
-    if (!physdev->funcs->pSelectBitmap( physdev, handle ))
-    {
-        GDI_ReleaseObj( handle );
-        ret = 0;
-    }
-    else
-    {
-        dc->hBitmap = handle;
-        GDI_inc_ref_count( handle );
-        dc->dirty = 0;
-        dc->vis_rect.left   = 0;
-        dc->vis_rect.top    = 0;
-        dc->vis_rect.right  = bitmap->dib.dsBm.bmWidth;
-        dc->vis_rect.bottom = bitmap->dib.dsBm.bmHeight;
-        dc->device_rect = dc->vis_rect;
-        GDI_ReleaseObj( handle );
-        DC_InitDC( dc );
-        GDI_dec_ref_count( ret );
-    }
-
- done:
-    release_dc_ptr( dc );
-    return ret;
+    return NtGdiSelectBitmap( hdc, handle );
 }
 
 




More information about the wine-cvs mailing list