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