Alexandre Julliard : gdi32: Fall back to StretchBlt if the driver doesn' t export PatBlt or BitBlt.

Alexandre Julliard julliard at winehq.org
Thu Oct 1 09:48:17 CDT 2009


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Sep 30 20:55:26 2009 +0200

gdi32: Fall back to StretchBlt if the driver doesn't export PatBlt or BitBlt.

---

 dlls/gdi32/bitblt.c            |   19 +++++++++++++++----
 dlls/gdi32/mfdrv/bitblt.c      |   12 ------------
 dlls/gdi32/mfdrv/init.c        |    2 +-
 dlls/gdi32/mfdrv/metafiledrv.h |    3 ---
 4 files changed, 16 insertions(+), 20 deletions(-)

diff --git a/dlls/gdi32/bitblt.c b/dlls/gdi32/bitblt.c
index 46c7f6f..f638a73 100644
--- a/dlls/gdi32/bitblt.c
+++ b/dlls/gdi32/bitblt.c
@@ -47,12 +47,18 @@ BOOL WINAPI PatBlt( HDC hdc, INT left, INT top,
 
     if (!dc) return FALSE;
 
+    TRACE("%p %d,%d %dx%d %06x\n", hdc, left, top, width, height, rop );
+
     if (dc->funcs->pPatBlt)
     {
-        TRACE("%p %d,%d %dx%d %06x\n", hdc, left, top, width, height, rop );
         update_dc( dc );
         bRet = dc->funcs->pPatBlt( dc->physDev, left, top, width, height, rop );
     }
+    else if (dc->funcs->pStretchBlt)
+    {
+        update_dc( dc );
+        bRet = dc->funcs->pStretchBlt( dc->physDev, left, top, width, height, NULL, 0, 0, 0, 0, rop );
+    }
     release_dc_ptr( dc );
     return bRet;
 }
@@ -72,14 +78,19 @@ BOOL WINAPI BitBlt( HDC hdcDst, INT xDst, INT yDst, INT width,
 
     if (!(dcDst = get_dc_ptr( hdcDst ))) return FALSE;
 
-    if (dcDst->funcs->pBitBlt)
+    if (dcDst->funcs->pBitBlt || dcDst->funcs->pStretchBlt)
     {
         update_dc( dcDst );
         dcSrc = get_dc_ptr( hdcSrc );
         if (dcSrc) update_dc( dcSrc );
 
-        ret = dcDst->funcs->pBitBlt( dcDst->physDev, xDst, yDst, width, height,
-                                     dcSrc ? dcSrc->physDev : NULL, xSrc, ySrc, rop );
+        if (dcDst->funcs->pBitBlt)
+            ret = dcDst->funcs->pBitBlt( dcDst->physDev, xDst, yDst, width, height,
+                                         dcSrc ? dcSrc->physDev : NULL, xSrc, ySrc, rop );
+        else
+            ret = dcDst->funcs->pStretchBlt( dcDst->physDev, xDst, yDst, width, height,
+                                             dcSrc ? dcSrc->physDev : NULL, xSrc, ySrc,
+                                             width, height, rop );
 
         release_dc_ptr( dcDst );
         if (dcSrc) release_dc_ptr( dcSrc );
diff --git a/dlls/gdi32/mfdrv/bitblt.c b/dlls/gdi32/mfdrv/bitblt.c
index 85d4b16..c09148f 100644
--- a/dlls/gdi32/mfdrv/bitblt.c
+++ b/dlls/gdi32/mfdrv/bitblt.c
@@ -36,18 +36,6 @@ BOOL  CDECL MFDRV_PatBlt( PHYSDEV dev, INT left, INT top, INT width, INT height,
 
 
 /***********************************************************************
- *           MFDRV_BitBlt
- */
-BOOL  CDECL MFDRV_BitBlt( PHYSDEV devDst, INT xDst, INT yDst, INT width, INT height,
-                          PHYSDEV devSrc, INT xSrc, INT ySrc, DWORD rop )
-{
-    return MFDRV_StretchBlt(devDst, xDst, yDst, width, height, devSrc,
-                            xSrc, ySrc, width, height, rop);
-}
-
-
-
-/***********************************************************************
  *           MFDRV_StretchBlt
  * this function contains TWO ways for processing StretchBlt in metafiles,
  * decide between rdFunction values  META_STRETCHBLT or META_DIBSTRETCHBLT
diff --git a/dlls/gdi32/mfdrv/init.c b/dlls/gdi32/mfdrv/init.c
index b6cf549..59c973a 100644
--- a/dlls/gdi32/mfdrv/init.c
+++ b/dlls/gdi32/mfdrv/init.c
@@ -38,7 +38,7 @@ static const DC_FUNCTIONS MFDRV_Funcs =
     MFDRV_Arc,                       /* pArc */
     NULL,                            /* pArcTo */
     MFDRV_BeginPath,                 /* pBeginPath */
-    MFDRV_BitBlt,                    /* pBitBlt */
+    NULL,                            /* pBitBlt */
     NULL,                            /* pChoosePixelFormat */
     MFDRV_Chord,                     /* pChord */
     MFDRV_CloseFigure,               /* pCloseFigure */
diff --git a/dlls/gdi32/mfdrv/metafiledrv.h b/dlls/gdi32/mfdrv/metafiledrv.h
index bdef966..b15864c 100644
--- a/dlls/gdi32/mfdrv/metafiledrv.h
+++ b/dlls/gdi32/mfdrv/metafiledrv.h
@@ -64,9 +64,6 @@ extern BOOL CDECL MFDRV_AbortPath( PHYSDEV dev ) DECLSPEC_HIDDEN;
 extern BOOL CDECL MFDRV_Arc( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
                              INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN;
 extern BOOL CDECL MFDRV_BeginPath( PHYSDEV dev ) DECLSPEC_HIDDEN;
-extern BOOL CDECL MFDRV_BitBlt( PHYSDEV devDst, INT xDst, INT yDst,  INT width,
-                                INT height, PHYSDEV devSrc, INT xSrc, INT ySrc,
-                                DWORD rop ) DECLSPEC_HIDDEN;
 extern BOOL CDECL MFDRV_Chord( PHYSDEV dev, INT left, INT top, INT right,
                                INT bottom, INT xstart, INT ystart, INT xend,
                                INT yend ) DECLSPEC_HIDDEN;




More information about the wine-cvs mailing list