Jacek Caban : gdi32: Don't use bitblt_coords in emfdrv_stretchblt.
Alexandre Julliard
julliard at winehq.org
Thu Aug 12 16:35:20 CDT 2021
Module: wine
Branch: master
Commit: 7659c6ff7dacc594c29916571c87fb6f349c9db7
URL: https://source.winehq.org/git/wine.git/?a=commit;h=7659c6ff7dacc594c29916571c87fb6f349c9db7
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Aug 12 11:59:59 2021 +0200
gdi32: Don't use bitblt_coords in emfdrv_stretchblt.
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/enhmfdrv/bitblt.c | 46 +++++++++++++++++++++++++-------------------
1 file changed, 26 insertions(+), 20 deletions(-)
diff --git a/dlls/gdi32/enhmfdrv/bitblt.c b/dlls/gdi32/enhmfdrv/bitblt.c
index e1d90c281c4..87c6fc22300 100644
--- a/dlls/gdi32/enhmfdrv/bitblt.c
+++ b/dlls/gdi32/enhmfdrv/bitblt.c
@@ -28,8 +28,9 @@
#include "enhmetafiledrv.h"
/* Generate an EMRBITBLT, EMRSTRETCHBLT or EMRALPHABLEND record depending on the type parameter */
-static BOOL emfdrv_stretchblt( PHYSDEV dev_dst, struct bitblt_coords *dst, HDC hdc_src,
- struct bitblt_coords *src, DWORD rop, DWORD type )
+static BOOL emfdrv_stretchblt( PHYSDEV dev_dst, INT x_dst, INT y_dst, INT width_dst, INT height_dst,
+ HDC hdc_src, INT x_src, INT y_src, INT width_src, INT height_src,
+ DWORD rop, DWORD type )
{
BITMAPINFO src_info = {{ sizeof( src_info.bmiHeader ) }};
UINT bmi_size, emr_size, size, bpp;
@@ -115,21 +116,21 @@ static BOOL emfdrv_stretchblt( PHYSDEV dev_dst, struct bitblt_coords *dst, HDC h
emr->emr.iType = type;
emr->emr.nSize = size;
- emr->rclBounds.left = dst->log_x;
- emr->rclBounds.top = dst->log_y;
- emr->rclBounds.right = dst->log_x + dst->log_width - 1;
- emr->rclBounds.bottom = dst->log_y + dst->log_height - 1;
- emr->xDest = dst->log_x;
- emr->yDest = dst->log_y;
- emr->cxDest = dst->log_width;
- emr->cyDest = dst->log_height;
- emr->xSrc = src->log_x;
- emr->ySrc = src->log_y;
+ emr->rclBounds.left = x_dst;
+ emr->rclBounds.top = y_dst;
+ emr->rclBounds.right = x_dst + width_dst - 1;
+ emr->rclBounds.bottom = y_dst + height_dst - 1;
+ emr->xDest = x_dst;
+ emr->yDest = y_dst;
+ emr->cxDest = width_dst;
+ emr->cyDest = height_dst;
+ emr->xSrc = x_src;
+ emr->ySrc = y_src;
if (type == EMR_STRETCHBLT || type == EMR_ALPHABLEND)
{
EMRSTRETCHBLT *emr_stretchblt = (EMRSTRETCHBLT *)emr;
- emr_stretchblt->cxSrc = src->log_width;
- emr_stretchblt->cySrc = src->log_height;
+ emr_stretchblt->cxSrc = width_src;
+ emr_stretchblt->cySrc = height_src;
}
emr->dwRop = rop;
NtGdiGetTransform( hdc_src, 0x204, &emr->xformSrc );
@@ -160,7 +161,9 @@ err:
BOOL CDECL EMFDRV_AlphaBlend( PHYSDEV dev_dst, struct bitblt_coords *dst,
PHYSDEV dev_src, struct bitblt_coords *src, BLENDFUNCTION func )
{
- return emfdrv_stretchblt( dev_dst, dst, dev_src->hdc, src, *(DWORD *)&func, EMR_ALPHABLEND );
+ return emfdrv_stretchblt( dev_dst, dst->log_x, dst->log_y, dst->log_width, dst->log_height,
+ dev_src->hdc, src->log_x, src->log_y, src->log_width, src->log_height,
+ *(DWORD *)&func, EMR_ALPHABLEND );
}
BOOL CDECL EMFDRV_PatBlt( PHYSDEV dev, struct bitblt_coords *dst, DWORD rop )
@@ -207,13 +210,16 @@ BOOL EMFDC_PatBlt( DC_ATTR *dc_attr, INT left, INT top, INT width, INT height, D
return ret;
}
-BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, struct bitblt_coords *dst,
- PHYSDEV devSrc, struct bitblt_coords *src, DWORD rop )
+BOOL CDECL EMFDRV_StretchBlt( PHYSDEV dev_dst, struct bitblt_coords *dst,
+ PHYSDEV dev_src, struct bitblt_coords *src, DWORD rop )
{
if (src->log_width == dst->log_width && src->log_height == dst->log_height)
- return emfdrv_stretchblt( devDst, dst, devSrc->hdc, src, rop, EMR_BITBLT );
- else
- return emfdrv_stretchblt( devDst, dst, devSrc->hdc, src, rop, EMR_STRETCHBLT );
+ return emfdrv_stretchblt( dev_dst, dst->log_x, dst->log_y, dst->log_width, dst->log_height,
+ dev_src->hdc, src->log_x, src->log_y, src->log_width, src->log_height,
+ rop, EMR_BITBLT );
+ return emfdrv_stretchblt( dev_dst, dst->log_x, dst->log_y, dst->log_width, dst->log_height,
+ dev_src->hdc, src->log_x, src->log_y, src->log_width, src->log_height,
+ rop, EMR_STRETCHBLT );
}
INT CDECL EMFDRV_StretchDIBits( PHYSDEV dev, INT xDst, INT yDst, INT widthDst, INT heightDst,
More information about the wine-cvs
mailing list