winex11.drv: SetDIBits fails when startscan != 0

Alexandre Julliard julliard at winehq.org
Wed Mar 25 06:07:09 CDT 2009


Massimo Del Fedele <max at veneto.com> writes:

> diff --git a/dlls/winex11.drv/dib.c b/dlls/winex11.drv/dib.c
> index 6df4137..42d9082 100644
> --- a/dlls/winex11.drv/dib.c
> +++ b/dlls/winex11.drv/dib.c
> @@ -3927,6 +3927,7 @@ INT CDECL X11DRV_SetDIBits( X11DRV_PDEVICE *physDev, HBITMAP hbitmap, UINT start
>    X11DRV_DIB_IMAGEBITS_DESCR descr;
>    DIBSECTION ds;
>    LONG width, height, tmpheight;
> +  LONG widthBytes;
>    INT result;
>  
>    descr.physDev = physDev;
> @@ -3936,6 +3937,7 @@ INT CDECL X11DRV_SetDIBits( X11DRV_PDEVICE *physDev, HBITMAP hbitmap, UINT start
>    if (DIB_GetBitmapInfo( &info->bmiHeader, &width, &height,
>  			 &descr.infoBpp, &descr.compression ) == -1)
>        return 0;
> +  widthBytes = ((width * descr.infoBpp +31) &~31) / 8;
>  
>    tmpheight = height;
>    if (height < 0) height = -height;
> @@ -3977,7 +3979,7 @@ INT CDECL X11DRV_SetDIBits( X11DRV_PDEVICE *physDev, HBITMAP hbitmap, UINT start
>         default: break;
>    }
>  
> -  descr.bits      = bits;
> +  descr.bits      = (BYTE *)bits + widthBytes * (tmpheight > 0 ? (height - startscan - lines) : startscan);

You shouldn't need to change the bits address.

-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list