Jacek Caban : gdi32: Access stretch mode directly from DC in NtGdiTransparentBlt.

Alexandre Julliard julliard at winehq.org
Fri Sep 17 16:03:09 CDT 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Sep 17 13:44:16 2021 +0200

gdi32: Access stretch mode directly from DC in NtGdiTransparentBlt.

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/bitblt.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/dlls/gdi32/bitblt.c b/dlls/gdi32/bitblt.c
index 83ef949ec3f..cf56f39da4c 100644
--- a/dlls/gdi32/bitblt.c
+++ b/dlls/gdi32/bitblt.c
@@ -852,19 +852,22 @@ BOOL WINAPI NtGdiTransparentBlt( HDC hdcDest, int xDest, int yDest, int widthDes
     COLORREF oldForeground;
     int oldStretchMode;
     DIBSECTION dib;
+    DC *dc_src;
 
     if(widthDest < 0 || heightDest < 0 || widthSrc < 0 || heightSrc < 0) {
         TRACE("Cannot mirror\n");
         return FALSE;
     }
 
+    if (!(dc_src = get_dc_ptr( hdcSrc ))) return FALSE;
+
     NtGdiGetAndSetDCDword( hdcDest, NtGdiSetBkColor, RGB(255,255,255), &oldBackground );
     NtGdiGetAndSetDCDword( hdcDest, NtGdiSetTextColor, RGB(0,0,0), &oldForeground );
 
     /* Stretch bitmap */
-    oldStretchMode = GetStretchBltMode(hdcSrc);
-    if(oldStretchMode == BLACKONWHITE || oldStretchMode == WHITEONBLACK)
-        SetStretchBltMode(hdcSrc, COLORONCOLOR);
+    oldStretchMode = dc_src->attr->stretch_blt_mode;
+    if (oldStretchMode == BLACKONWHITE || oldStretchMode == WHITEONBLACK)
+        dc_src->attr->stretch_blt_mode = COLORONCOLOR;
     hdcWork = NtGdiCreateCompatibleDC( hdcDest );
     if ((get_gdi_object_type( hdcDest ) != NTGDI_OBJ_MEMDC ||
          NtGdiExtGetObjectW( NtGdiGetDCObject( hdcDest, NTGDI_OBJ_SURF ),
@@ -926,7 +929,8 @@ BOOL WINAPI NtGdiTransparentBlt( HDC hdcDest, int xDest, int yDest, int widthDes
 
     ret = TRUE;
 error:
-    SetStretchBltMode(hdcSrc, oldStretchMode);
+    dc_src->attr->stretch_blt_mode = oldStretchMode;
+    release_dc_ptr( dc_src );
     NtGdiGetAndSetDCDword( hdcDest, NtGdiSetBkColor, oldBackground, NULL );
     NtGdiGetAndSetDCDword( hdcDest, NtGdiSetTextColor, oldForeground, NULL );
     if(hdcWork) {




More information about the wine-cvs mailing list