[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