On Mon, May 17, 2021 at 05:00:21PM +0800, Zhiyi Zhang wrote: The commit msg could be a bit better. Prehaps "gdi32: Use a common helper for StretchBlt and AlphaBlend"?
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com> --- dlls/gdi32/enhmfdrv/bitblt.c | 121 +++++------------------------------ dlls/gdi32/tests/metafile.c | 29 ++++----- 2 files changed, 27 insertions(+), 123 deletions(-)
diff --git a/dlls/gdi32/enhmfdrv/bitblt.c b/dlls/gdi32/enhmfdrv/bitblt.c index 597a6110abd..0fa6226ebaa 100644 --- a/dlls/gdi32/enhmfdrv/bitblt.c +++ b/dlls/gdi32/enhmfdrv/bitblt.c @@ -27,14 +27,15 @@ #include "enhmetafiledrv.h" #include "wine/debug.h"
-BOOL CDECL EMFDRV_AlphaBlend( PHYSDEV dev_dst, struct bitblt_coords *dst, - PHYSDEV dev_src, struct bitblt_coords *src, BLENDFUNCTION func ) +/* Generate an EMRSTRETCHBLT or EMRALPHABLEND record depending on the alpha_blend parameter */ +static BOOL emfdrv_stretchblt( PHYSDEV dev_dst, struct bitblt_coords *dst, PHYSDEV dev_src, + struct bitblt_coords *src, DWORD rop, BOOL alpha_blend )
I would change the final param to be DWORD type (i.e. explicitly pass EMR_STRETCHBLT/ALPHABLEND).
@@ -155,106 +163,7 @@ BOOL CDECL EMFDRV_PatBlt( PHYSDEV dev, struct bitblt_coords *dst, DWORD rop ) BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, struct bitblt_coords *dst, PHYSDEV devSrc, struct bitblt_coords *src, DWORD rop ) { - BOOL ret; - PEMRBITBLT pEMR; - UINT emrSize; - UINT bmiSize; - UINT bitsSize; - UINT size; - BITMAP BM; - WORD nBPP = 0; - LPBITMAPINFOHEADER lpBmiH; - HBITMAP hBitmap = NULL; - DWORD emrType; - - if (devSrc->funcs == devDst->funcs) return FALSE; /* can't use a metafile DC as source */ - - if (src->log_width == dst->log_width && src->log_height == dst->log_height) - { - emrType = EMR_BITBLT; - emrSize = sizeof(EMRBITBLT); - } - else - { - emrType = EMR_STRETCHBLT; - emrSize = sizeof(EMRSTRETCHBLT); - }
Presumably calls to BitBlt() get encoded as EMR_BITBLT (even if non-stretch StretchBlt()s don't). Assuming that's the case, I think it would make sense to retain what we did here and use EMR_BITBLT where we can (another reason for passing the type to the helper function). Huw.