[PATCH v4 2/5] gdi32: Implement EMFDRV_AlphaBlend().
Huw Davies
huw at codeweavers.com
Tue Apr 20 03:11:37 CDT 2021
On Mon, Apr 19, 2021 at 05:41:47PM +0800, Zhiyi Zhang wrote:
> Fix a bug that Tally produces a blank print preview when images have to be scaled.
>
> Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
> ---
> dlls/gdi32/enhmfdrv/bitblt.c | 101 +++++++++++++++++++++++++++
> dlls/gdi32/enhmfdrv/enhmetafiledrv.h | 2 +
> dlls/gdi32/enhmfdrv/init.c | 2 +-
> dlls/gdi32/tests/metafile.c | 4 +-
> 4 files changed, 105 insertions(+), 4 deletions(-)
>
> diff --git a/dlls/gdi32/enhmfdrv/bitblt.c b/dlls/gdi32/enhmfdrv/bitblt.c
> index 1fc5c0b1040..794bb416dfa 100644
> --- a/dlls/gdi32/enhmfdrv/bitblt.c
> +++ b/dlls/gdi32/enhmfdrv/bitblt.c
> @@ -27,6 +27,107 @@
> #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 )
> +{
> + unsigned char src_buffer[FIELD_OFFSET(BITMAPINFO, bmiColors[256])];
> + BITMAPINFO *src_info = (BITMAPINFO *)src_buffer;
> + UINT bits_size, bmi_size, emr_size, size, bpp;
> + struct gdi_image_bits bits;
> + EMRALPHABLEND *emr;
> + BITMAPINFO *bmi;
> + DC *dc_src;
> + DWORD err;
> + BOOL ret;
> +
> + /* can't use a metafile DC as source */
> + if (dev_src->funcs == dev_dst->funcs)
> + return FALSE;
There's no need for this hack now since GetImage() will not succeed
in this case. I've fixed this up and sent in v5.
> +
> + dc_src = get_physdev_dc(dev_src);
> + dev_src = GET_DC_PHYSDEV(dc_src, pGetImage);
> + err = dev_src->funcs->pGetImage(dev_src, src_info, &bits, src);
> + if (err)
> + {
> + SetLastError(err);
> + return FALSE;
> + }
> +
Huw.
More information about the wine-devel
mailing list