Module: wine Branch: master Commit: 6b1cdd1b5ee0db822f350ffe95c7579f33a0a851 URL: https://source.winehq.org/git/wine.git/?a=commit;h=6b1cdd1b5ee0db822f350ffe9...
Author: Jacek Caban jacek@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@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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) {