Alexandre Julliard : gdi32: Add null driver entry points for the object selection functions.

Alexandre Julliard julliard at winehq.org
Thu Mar 10 11:30:24 CST 2011


Module: wine
Branch: master
Commit: adc63287b58592436dd599561d85d763cb3692df
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=adc63287b58592436dd599561d85d763cb3692df

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Mar  9 21:19:09 2011 +0100

gdi32: Add null driver entry points for the object selection functions.

---

 dlls/gdi32/bitmap.c  |    4 +++-
 dlls/gdi32/brush.c   |    4 +++-
 dlls/gdi32/dc.c      |    6 ++++--
 dlls/gdi32/driver.c  |   42 ++++++++++++++++++++++++++++++++++++------
 dlls/gdi32/font.c    |    4 +++-
 dlls/gdi32/gdiobj.c  |   10 ++++------
 dlls/gdi32/palette.c |   20 +++++++++++---------
 dlls/gdi32/pen.c     |    4 +++-
 8 files changed, 67 insertions(+), 27 deletions(-)

diff --git a/dlls/gdi32/bitmap.c b/dlls/gdi32/bitmap.c
index a5c53a9..33e5542 100644
--- a/dlls/gdi32/bitmap.c
+++ b/dlls/gdi32/bitmap.c
@@ -600,6 +600,7 @@ static HGDIOBJ BITMAP_SelectObject( HGDIOBJ handle, HDC hdc )
     HGDIOBJ ret;
     BITMAPOBJ *bitmap;
     DC *dc;
+    PHYSDEV physdev;
 
     if (!(dc = get_dc_ptr( hdc ))) return 0;
 
@@ -632,7 +633,8 @@ static HGDIOBJ BITMAP_SelectObject( HGDIOBJ handle, HDC hdc )
         goto done;
     }
 
-    if (dc->funcs->pSelectBitmap && !dc->funcs->pSelectBitmap( dc->physDev, handle ))
+    physdev = GET_DC_PHYSDEV( dc, pSelectBitmap );
+    if (!physdev->funcs->pSelectBitmap( physdev, handle ))
     {
         GDI_ReleaseObj( handle );
         ret = 0;
diff --git a/dlls/gdi32/brush.c b/dlls/gdi32/brush.c
index 0202033..02fb3a3 100644
--- a/dlls/gdi32/brush.c
+++ b/dlls/gdi32/brush.c
@@ -387,13 +387,15 @@ static HGDIOBJ BRUSH_SelectObject( HGDIOBJ handle, HDC hdc )
 
     if ((brush = GDI_GetObjPtr( handle, OBJ_BRUSH )))
     {
+        PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSelectBrush );
+
         if (brush->logbrush.lbStyle == BS_PATTERN)
             BITMAP_SetOwnerDC( (HBITMAP)brush->logbrush.lbHatch, dc );
 
         GDI_inc_ref_count( handle );
         GDI_ReleaseObj( handle );
 
-        if (dc->funcs->pSelectBrush && !dc->funcs->pSelectBrush( dc->physDev, handle ))
+        if (!physdev->funcs->pSelectBrush( physdev, handle ))
         {
             GDI_dec_ref_count( handle );
         }
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index f25eb8d..66cdc84 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -2057,7 +2057,8 @@ COLORREF WINAPI SetDCBrushColor(HDC hdc, COLORREF crColor)
         {
             /* If DC_BRUSH is selected, update driver pen color */
             HBRUSH hBrush = CreateSolidBrush( crColor );
-            dc->funcs->pSelectBrush( dc->physDev, hBrush );
+            PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSelectBrush );
+            physdev->funcs->pSelectBrush( physdev, hBrush );
 	    DeleteObject( hBrush );
 	}
 
@@ -2122,7 +2123,8 @@ COLORREF WINAPI SetDCPenColor(HDC hdc, COLORREF crColor)
             /* If DC_PEN is selected, update the driver pen color */
             LOGPEN logpen = { PS_SOLID, { 0, 0 }, crColor };
             HPEN hPen = CreatePenIndirect( &logpen );
-            dc->funcs->pSelectPen( dc->physDev, hPen );
+            PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSelectPen );
+            physdev->funcs->pSelectPen( physdev, hPen );
 	    DeleteObject( hPen );
 	}
 
diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index d20bf93..1863499 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -329,6 +329,11 @@ static BOOL CDECL nulldrv_Chord( PHYSDEV dev, INT left, INT top, INT right, INT
     return TRUE;
 }
 
+static BOOL CDECL nulldrv_DeleteObject( PHYSDEV dev, HGDIOBJ obj )
+{
+    return TRUE;
+}
+
 static BOOL CDECL nulldrv_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT bottom )
 {
     return TRUE;
@@ -408,6 +413,31 @@ static BOOL CDECL nulldrv_RoundRect( PHYSDEV dev, INT left, INT top, INT right,
     return TRUE;
 }
 
+static HBITMAP CDECL nulldrv_SelectBitmap( PHYSDEV dev, HBITMAP bitmap )
+{
+    return bitmap;
+}
+
+static HBRUSH CDECL nulldrv_SelectBrush( PHYSDEV dev, HBRUSH brush )
+{
+    return brush;
+}
+
+static HFONT CDECL nulldrv_SelectFont( PHYSDEV dev, HFONT font, HANDLE gdi_font )
+{
+    return 0;
+}
+
+static HPALETTE CDECL nulldrv_SelectPalette( PHYSDEV dev, HPALETTE palette, BOOL bkgnd )
+{
+    return palette;
+}
+
+static HPEN CDECL nulldrv_SelectPen( PHYSDEV dev, HPEN pen )
+{
+    return pen;
+}
+
 static void CDECL nulldrv_SetDeviceClipping( PHYSDEV dev, HRGN vis_rgn, HRGN clip_rgn )
 {
 }
@@ -506,7 +536,7 @@ const DC_FUNCTIONS null_driver =
     NULL,                               /* pCreateDIBSection */
     NULL,                               /* pDeleteBitmap */
     NULL,                               /* pDeleteDC */
-    NULL,                               /* pDeleteObject */
+    nulldrv_DeleteObject,               /* pDeleteObject */
     NULL,                               /* pDescribePixelFormat */
     NULL,                               /* pDeviceCapabilities */
     nulldrv_Ellipse,                    /* pEllipse */
@@ -566,12 +596,12 @@ const DC_FUNCTIONS null_driver =
     NULL,                               /* pSaveDC */
     nulldrv_ScaleViewportExtEx,         /* pScaleViewportExt */
     nulldrv_ScaleWindowExtEx,           /* pScaleWindowExt */
-    NULL,                               /* pSelectBitmap */
-    NULL,                               /* pSelectBrush */
+    nulldrv_SelectBitmap,               /* pSelectBitmap */
+    nulldrv_SelectBrush,                /* pSelectBrush */
     NULL,                               /* pSelectClipPath */
-    NULL,                               /* pSelectFont */
-    NULL,                               /* pSelectPalette */
-    NULL,                               /* pSelectPen */
+    nulldrv_SelectFont,                 /* pSelectFont */
+    nulldrv_SelectPalette,              /* pSelectPalette */
+    nulldrv_SelectPen,                  /* pSelectPen */
     NULL,                               /* pSetArcDirection */
     NULL,                               /* pSetBitmapBits */
     NULL,                               /* pSetBkColor */
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index c92b6e3..43abf42 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -529,6 +529,7 @@ static HGDIOBJ FONT_SelectObject( HGDIOBJ handle, HDC hdc )
 {
     HGDIOBJ ret = 0;
     DC *dc = get_dc_ptr( hdc );
+    PHYSDEV physdev;
 
     if (!dc) return 0;
 
@@ -541,7 +542,8 @@ static HGDIOBJ FONT_SelectObject( HGDIOBJ handle, HDC hdc )
     if (GetDeviceCaps( dc->hSelf, TEXTCAPS ) & TC_VA_ABLE)
         dc->gdiFont = WineEngCreateFontInstance( dc, handle );
 
-    if (dc->funcs->pSelectFont) ret = dc->funcs->pSelectFont( dc->physDev, handle, dc->gdiFont );
+    physdev = GET_DC_PHYSDEV( dc, pSelectFont );
+    ret = physdev->funcs->pSelectFont( physdev, handle, dc->gdiFont );
 
     if (ret && dc->gdiFont) dc->gdiFont = 0;
 
diff --git a/dlls/gdi32/gdiobj.c b/dlls/gdi32/gdiobj.c
index 196ebc9..35b8068 100644
--- a/dlls/gdi32/gdiobj.c
+++ b/dlls/gdi32/gdiobj.c
@@ -845,12 +845,10 @@ BOOL WINAPI DeleteObject( HGDIOBJ obj )
 
         if(dc)
         {
-            if(dc->funcs->pDeleteObject)
-            {
-                GDI_ReleaseObj( obj );  /* release the GDI lock */
-                dc->funcs->pDeleteObject( dc->physDev, obj );
-                header = GDI_GetObjPtr( obj, 0 );  /* and grab it again */
-            }
+            PHYSDEV physdev = GET_DC_PHYSDEV( dc, pDeleteObject );
+            GDI_ReleaseObj( obj );  /* release the GDI lock */
+            physdev->funcs->pDeleteObject( physdev, obj );
+            header = GDI_GetObjPtr( obj, 0 );  /* and grab it again */
             release_dc_ptr( dc );
         }
         HeapFree(GetProcessHeap(), 0, hdcs_head);
diff --git a/dlls/gdi32/palette.c b/dlls/gdi32/palette.c
index e941b10..e94ed7b 100644
--- a/dlls/gdi32/palette.c
+++ b/dlls/gdi32/palette.c
@@ -689,7 +689,7 @@ static BOOL PALETTE_DeleteObject( HGDIOBJ handle )
  */
 HPALETTE WINAPI GDISelectPalette( HDC hdc, HPALETTE hpal, WORD wBkg)
 {
-    HPALETTE ret;
+    HPALETTE ret = 0;
     DC *dc;
 
     TRACE("%p %p\n", hdc, hpal );
@@ -699,16 +699,18 @@ HPALETTE WINAPI GDISelectPalette( HDC hdc, HPALETTE hpal, WORD wBkg)
       WARN("invalid selected palette %p\n",hpal);
       return 0;
     }
-    if (!(dc = get_dc_ptr( hdc ))) return 0;
-    ret = dc->hPalette;
-    if (dc->funcs->pSelectPalette) hpal = dc->funcs->pSelectPalette( dc->physDev, hpal, FALSE );
-    if (hpal)
+    if ((dc = get_dc_ptr( hdc )))
     {
-        dc->hPalette = hpal;
-        if (!wBkg) hPrimaryPalette = hpal;
+        PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSelectPalette );
+        ret = dc->hPalette;
+        if (physdev->funcs->pSelectPalette( physdev, hpal, FALSE ))
+        {
+            dc->hPalette = hpal;
+            if (!wBkg) hPrimaryPalette = hpal;
+        }
+        else ret = 0;
+        release_dc_ptr( dc );
     }
-    else ret = 0;
-    release_dc_ptr( dc );
     return ret;
 }
 
diff --git a/dlls/gdi32/pen.c b/dlls/gdi32/pen.c
index a130b1f..61dd0e9 100644
--- a/dlls/gdi32/pen.c
+++ b/dlls/gdi32/pen.c
@@ -219,6 +219,7 @@ HPEN WINAPI ExtCreatePen( DWORD style, DWORD width,
  */
 static HGDIOBJ PEN_SelectObject( HGDIOBJ handle, HDC hdc )
 {
+    PHYSDEV physdev;
     HGDIOBJ ret = 0;
     DC *dc = get_dc_ptr( hdc );
 
@@ -234,7 +235,8 @@ static HGDIOBJ PEN_SelectObject( HGDIOBJ handle, HDC hdc )
         return 0;
     }
 
-    if (dc->funcs->pSelectPen && !dc->funcs->pSelectPen( dc->physDev, handle ))
+    physdev = GET_DC_PHYSDEV( dc, pSelectPen );
+    if (!physdev->funcs->pSelectPen( physdev, handle ))
     {
         GDI_dec_ref_count( handle );
     }




More information about the wine-cvs mailing list