[2/4] ole32: Support HBITMAP format in DataCache_GetExtent and DataCache_Draw
Huw Davies
huw at codeweavers.com
Thu Apr 27 06:57:21 CDT 2017
On Wed, Apr 26, 2017 at 03:44:01PM +0800, Wei Xie wrote:
> Fix cann't insert any HBITMAP in RichEdit control
> From 91b46bc9da357b76b8028d058a191743e9a31a32 Mon Sep 17 00:00:00 2001
> From: Wei xie <xiewei at linuxdeepin.com>
> Date: Wed, 26 Apr 2017 15:05:59 +0800
> Subject: [PATCH 2/4] ole32: Support HBITMAP format in DataCache_GetExtent and
> DataCache_Draw
>
> Fix cann't insert any HBITMAP in RichEdit control
>
> Signed-off-by: Wei xie <xiewei at linuxdeepin.com>
> ---
> dlls/ole32/datacache.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 52 insertions(+)
>
> @@ -1908,6 +1926,40 @@ static HRESULT WINAPI DataCache_GetExtent(
>
> return S_OK;
> }
> + case CF_BITMAP:
> + {
> + HDC hdc;
> + char dst_bmibuf[FIELD_OFFSET( BITMAPINFO, bmiColors[256] )];
> + BITMAPINFO *dst_info = (BITMAPINFO *)dst_bmibuf;
> + BITMAPINFOHEADER *info;
> + LONG x_pels_m, y_pels_m;
> +
> + if (cache_entry->stgmedium.tymed != TYMED_GDI)
> + continue;
> +
> + hdc = GetDC(NULL);
> + memset(dst_info, 0, sizeof(char)*FIELD_OFFSET( BITMAPINFO, bmiColors[256] ));
> + dst_info->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
> +
> + GetDIBits(hdc, cache_entry->stgmedium.u.hBitmap, 0, 1, NULL, dst_info, DIB_RGB_COLORS);
> +
> + info = &dst_info->bmiHeader;
I'm not convinced adding the info variable helps here. Just use dst_info->bmiHeader throughout.
Better still drop the 'dst_' and use BITMAPINFO *info = (BITMAPINFO *)bmibuf;
> + x_pels_m = info->biXPelsPerMeter;
> + y_pels_m = info->biYPelsPerMeter;
> +
> + /* Size in units of 0.01mm (ie. MM_HIMETRIC) */
> + if (x_pels_m != 0 && y_pels_m != 0)
> + {
> + lpsizel->cx = info->biWidth * 100000 / x_pels_m;
> + lpsizel->cy = info->biHeight * 100000 / y_pels_m;
> + }
> + else
> + {
> + lpsizel->cx = info->biWidth * 2540 / GetDeviceCaps( hdc, LOGPIXELSX );
> + lpsizel->cy = info->biHeight * 2540 / GetDeviceCaps( hdc, LOGPIXELSY );
> + }
You need a ReleaseDC(0, hdc);
> + return S_OK;
> + }
> }
> }
>
> --
> 2.10.2
>
>
More information about the wine-devel
mailing list