Alexandre Julliard : gdi32: Add a null driver entry point for PatBlt.

Alexandre Julliard julliard at winehq.org
Thu Mar 17 12:27:02 CDT 2011


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Mar 17 14:54:56 2011 +0100

gdi32: Add a null driver entry point for PatBlt.

---

 dlls/gdi32/bitblt.c |   44 ++++++++++++++------------------------------
 dlls/gdi32/driver.c |    7 ++++++-
 2 files changed, 20 insertions(+), 31 deletions(-)

diff --git a/dlls/gdi32/bitblt.c b/dlls/gdi32/bitblt.c
index f32ae98..6586f41 100644
--- a/dlls/gdi32/bitblt.c
+++ b/dlls/gdi32/bitblt.c
@@ -43,28 +43,21 @@ static inline BOOL rop_uses_src( DWORD rop )
 /***********************************************************************
  *           PatBlt    (GDI32.@)
  */
-BOOL WINAPI PatBlt( HDC hdc, INT left, INT top,
-                        INT width, INT height, DWORD rop)
+BOOL WINAPI PatBlt( HDC hdc, INT left, INT top, INT width, INT height, DWORD rop)
 {
     DC * dc;
     BOOL bRet = FALSE;
 
-    if (rop_uses_src( rop )) return FALSE;
-    if (!(dc = get_dc_ptr( hdc ))) return FALSE;
-
     TRACE("%p %d,%d %dx%d %06x\n", hdc, left, top, width, height, rop );
 
-    if (dc->funcs->pPatBlt)
-    {
-        update_dc( dc );
-        bRet = dc->funcs->pPatBlt( dc->physDev, left, top, width, height, rop );
-    }
-    else if (dc->funcs->pStretchBlt)
+    if (rop_uses_src( rop )) return FALSE;
+    if ((dc = get_dc_ptr( hdc )))
     {
+        PHYSDEV physdev = GET_DC_PHYSDEV( dc, pPatBlt );
         update_dc( dc );
-        bRet = dc->funcs->pStretchBlt( dc->physDev, left, top, width, height, NULL, 0, 0, 0, 0, rop );
+        bRet = physdev->funcs->pPatBlt( physdev, left, top, width, height, rop );
+        release_dc_ptr( dc );
     }
-    release_dc_ptr( dc );
     return bRet;
 }
 
@@ -78,18 +71,15 @@ BOOL WINAPI BitBlt( HDC hdcDst, INT xDst, INT yDst, INT width,
     BOOL ret = FALSE;
     DC *dcDst, *dcSrc;
 
+    if (!rop_uses_src( rop )) return PatBlt( hdcDst, xDst, yDst, width, height, rop );
+
     TRACE("hdcSrc=%p %d,%d -> hdcDest=%p %d,%d %dx%d rop=%06x\n",
           hdcSrc, xSrc, ySrc, hdcDst, xDst, yDst, width, height, rop);
 
     if (!(dcDst = get_dc_ptr( hdcDst ))) return FALSE;
     update_dc( dcDst );
 
-    if (!rop_uses_src( rop ) && dcDst->funcs->pPatBlt)
-    {
-        ret = dcDst->funcs->pPatBlt( dcDst->physDev, xDst, yDst, width, height, rop );
-        release_dc_ptr( dcDst );
-    }
-    else if (dcDst->funcs->pBitBlt || dcDst->funcs->pStretchBlt)
+    if (dcDst->funcs->pBitBlt || dcDst->funcs->pStretchBlt)
     {
         dcSrc = get_dc_ptr( hdcSrc );
         if (dcSrc) update_dc( dcSrc );
@@ -158,15 +148,14 @@ BOOL WINAPI BitBlt( HDC hdcDst, INT xDst, INT yDst, INT width,
 /***********************************************************************
  *           StretchBlt    (GDI32.@)
  */
-BOOL WINAPI StretchBlt( HDC hdcDst, INT xDst, INT yDst,
-                            INT widthDst, INT heightDst,
-                            HDC hdcSrc, INT xSrc, INT ySrc,
-                            INT widthSrc, INT heightSrc,
-			DWORD rop )
+BOOL WINAPI StretchBlt( HDC hdcDst, INT xDst, INT yDst, INT widthDst, INT heightDst,
+                        HDC hdcSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc, DWORD rop )
 {
     BOOL ret = FALSE;
     DC *dcDst, *dcSrc;
 
+    if (!rop_uses_src( rop )) return PatBlt( hdcDst, xDst, yDst, widthDst, heightDst, rop );
+
     TRACE("%p %d,%d %dx%d -> %p %d,%d %dx%d rop=%06x\n",
           hdcSrc, xSrc, ySrc, widthSrc, heightSrc,
           hdcDst, xDst, yDst, widthDst, heightDst, rop );
@@ -175,12 +164,7 @@ BOOL WINAPI StretchBlt( HDC hdcDst, INT xDst, INT yDst,
     if (!(dcDst = get_dc_ptr( hdcDst ))) return FALSE;
     update_dc( dcDst );
 
-    if (!rop_uses_src( rop ) && dcDst->funcs->pPatBlt)
-    {
-        ret = dcDst->funcs->pPatBlt( dcDst->physDev, xDst, yDst, widthDst, heightDst, rop );
-        release_dc_ptr( dcDst );
-    }
-    else if (dcDst->funcs->pStretchBlt)
+    if (dcDst->funcs->pStretchBlt)
     {
         if ((dcSrc = get_dc_ptr( hdcSrc )))
         {
diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index f040bde..57f3117 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -514,6 +514,11 @@ static BOOL CDECL nulldrv_PaintRgn( PHYSDEV dev, HRGN rgn )
     return TRUE;
 }
 
+static BOOL CDECL nulldrv_PatBlt( PHYSDEV dev, INT x, INT y, INT width, INT height, DWORD rop )
+{
+    return TRUE;
+}
+
 static BOOL CDECL nulldrv_Pie( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
                                INT xstart, INT ystart, INT xend, INT yend )
 {
@@ -839,7 +844,7 @@ const DC_FUNCTIONS null_driver =
     nulldrv_OffsetViewportOrgEx,        /* pOffsetViewportOrg */
     nulldrv_OffsetWindowOrgEx,          /* pOffsetWindowOrg */
     nulldrv_PaintRgn,                   /* pPaintRgn */
-    NULL,                               /* pPatBlt */
+    nulldrv_PatBlt,                     /* pPatBlt */
     nulldrv_Pie,                        /* pPie */
     nulldrv_PolyBezier,                 /* pPolyBezier */
     nulldrv_PolyBezierTo,               /* pPolyBezierTo */




More information about the wine-cvs mailing list