Commit 1416d0e6 authored by Alexandre Julliard's avatar Alexandre Julliard

gdi32: Remove the bitmap parameter from the Get/PutImage entry points.

parent 6fe6a43a
...@@ -256,13 +256,13 @@ BOOL nulldrv_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst, ...@@ -256,13 +256,13 @@ BOOL nulldrv_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst,
if (!(dc_src = get_dc_ptr( src_dev->hdc ))) return FALSE; if (!(dc_src = get_dc_ptr( src_dev->hdc ))) return FALSE;
src_dev = GET_DC_PHYSDEV( dc_src, pGetImage ); src_dev = GET_DC_PHYSDEV( dc_src, pGetImage );
err = src_dev->funcs->pGetImage( src_dev, 0, src_info, &bits, src ); err = src_dev->funcs->pGetImage( src_dev, src_info, &bits, src );
release_dc_ptr( dc_src ); release_dc_ptr( dc_src );
if (err) return FALSE; if (err) return FALSE;
dst_dev = GET_DC_PHYSDEV( dc_dst, pPutImage ); dst_dev = GET_DC_PHYSDEV( dc_dst, pPutImage );
copy_bitmapinfo( dst_info, src_info ); copy_bitmapinfo( dst_info, src_info );
err = dst_dev->funcs->pPutImage( dst_dev, 0, 0, dst_info, &bits, src, dst, rop ); err = dst_dev->funcs->pPutImage( dst_dev, 0, dst_info, &bits, src, dst, rop );
if (err == ERROR_BAD_FORMAT) if (err == ERROR_BAD_FORMAT)
{ {
DWORD dst_colors = dst_info->bmiHeader.biClrUsed; DWORD dst_colors = dst_info->bmiHeader.biClrUsed;
...@@ -286,7 +286,7 @@ BOOL nulldrv_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst, ...@@ -286,7 +286,7 @@ BOOL nulldrv_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst,
{ {
/* get rid of the fake destination table */ /* get rid of the fake destination table */
dst_info->bmiHeader.biClrUsed = dst_colors; dst_info->bmiHeader.biClrUsed = dst_colors;
err = dst_dev->funcs->pPutImage( dst_dev, 0, 0, dst_info, &bits, src, dst, rop ); err = dst_dev->funcs->pPutImage( dst_dev, 0, dst_info, &bits, src, dst, rop );
} }
} }
...@@ -295,7 +295,7 @@ BOOL nulldrv_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst, ...@@ -295,7 +295,7 @@ BOOL nulldrv_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst,
{ {
copy_bitmapinfo( src_info, dst_info ); copy_bitmapinfo( src_info, dst_info );
err = stretch_bits( src_info, src, dst_info, dst, &bits, GetStretchBltMode( dst_dev->hdc )); err = stretch_bits( src_info, src, dst_info, dst, &bits, GetStretchBltMode( dst_dev->hdc ));
if (!err) err = dst_dev->funcs->pPutImage( dst_dev, 0, 0, dst_info, &bits, src, dst, rop ); if (!err) err = dst_dev->funcs->pPutImage( dst_dev, 0, dst_info, &bits, src, dst, rop );
} }
if (bits.free) bits.free( &bits ); if (bits.free) bits.free( &bits );
...@@ -316,7 +316,7 @@ BOOL nulldrv_AlphaBlend( PHYSDEV dst_dev, struct bitblt_coords *dst, ...@@ -316,7 +316,7 @@ BOOL nulldrv_AlphaBlend( PHYSDEV dst_dev, struct bitblt_coords *dst,
if (!(dc_src = get_dc_ptr( src_dev->hdc ))) return FALSE; if (!(dc_src = get_dc_ptr( src_dev->hdc ))) return FALSE;
src_dev = GET_DC_PHYSDEV( dc_src, pGetImage ); src_dev = GET_DC_PHYSDEV( dc_src, pGetImage );
err = src_dev->funcs->pGetImage( src_dev, 0, src_info, &bits, src ); err = src_dev->funcs->pGetImage( src_dev, src_info, &bits, src );
release_dc_ptr( dc_src ); release_dc_ptr( dc_src );
if (err) goto done; if (err) goto done;
...@@ -368,12 +368,12 @@ DWORD nulldrv_BlendImage( PHYSDEV dev, BITMAPINFO *info, const struct gdi_image_ ...@@ -368,12 +368,12 @@ DWORD nulldrv_BlendImage( PHYSDEV dev, BITMAPINFO *info, const struct gdi_image_
dev = GET_DC_PHYSDEV( dc, pGetImage ); dev = GET_DC_PHYSDEV( dc, pGetImage );
orig_dst = *dst; orig_dst = *dst;
err = dev->funcs->pGetImage( dev, 0, dst_info, &dst_bits, dst ); err = dev->funcs->pGetImage( dev, dst_info, &dst_bits, dst );
if (err) return err; if (err) return err;
dev = GET_DC_PHYSDEV( dc, pPutImage ); dev = GET_DC_PHYSDEV( dc, pPutImage );
err = blend_bits( info, bits, src, dst_info, &dst_bits, dst, blend ); err = blend_bits( info, bits, src, dst_info, &dst_bits, dst, blend );
if (!err) err = dev->funcs->pPutImage( dev, 0, 0, dst_info, &dst_bits, dst, &orig_dst, SRCCOPY ); if (!err) err = dev->funcs->pPutImage( dev, 0, dst_info, &dst_bits, dst, &orig_dst, SRCCOPY );
if (dst_bits.free) dst_bits.free( &dst_bits ); if (dst_bits.free) dst_bits.free( &dst_bits );
return err; return err;
...@@ -441,7 +441,7 @@ BOOL nulldrv_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, ULONG nvert, ...@@ -441,7 +441,7 @@ BOOL nulldrv_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, ULONG nvert,
info->bmiHeader.biHeight = dst.visrect.bottom - dst.visrect.top; info->bmiHeader.biHeight = dst.visrect.bottom - dst.visrect.top;
info->bmiHeader.biSizeImage = 0; info->bmiHeader.biSizeImage = 0;
dev = GET_DC_PHYSDEV( dc, pPutImage ); dev = GET_DC_PHYSDEV( dc, pPutImage );
err = dev->funcs->pPutImage( dev, 0, 0, info, NULL, NULL, NULL, 0 ); err = dev->funcs->pPutImage( dev, 0, info, NULL, NULL, NULL, 0 );
if (err && err != ERROR_BAD_FORMAT) goto done; if (err && err != ERROR_BAD_FORMAT) goto done;
info->bmiHeader.biSizeImage = get_dib_image_size( info ); info->bmiHeader.biSizeImage = get_dib_image_size( info );
...@@ -464,7 +464,7 @@ BOOL nulldrv_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, ULONG nvert, ...@@ -464,7 +464,7 @@ BOOL nulldrv_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, ULONG nvert,
rgn = CreateRectRgn( 0, 0, 0, 0 ); rgn = CreateRectRgn( 0, 0, 0, 0 );
gradient_bitmapinfo( info, bits.ptr, vert_array, nvert, grad_array, ngrad, mode, pts, rgn ); gradient_bitmapinfo( info, bits.ptr, vert_array, nvert, grad_array, ngrad, mode, pts, rgn );
OffsetRgn( rgn, dst.visrect.left, dst.visrect.top ); OffsetRgn( rgn, dst.visrect.left, dst.visrect.top );
ret = !dev->funcs->pPutImage( dev, 0, rgn, info, &bits, &src, &dst, SRCCOPY ); ret = !dev->funcs->pPutImage( dev, rgn, info, &bits, &src, &dst, SRCCOPY );
if (bits.free) bits.free( &bits ); if (bits.free) bits.free( &bits );
DeleteObject( rgn ); DeleteObject( rgn );
...@@ -495,7 +495,7 @@ COLORREF nulldrv_GetPixel( PHYSDEV dev, INT x, INT y ) ...@@ -495,7 +495,7 @@ COLORREF nulldrv_GetPixel( PHYSDEV dev, INT x, INT y )
if (!clip_visrect( dc, &src.visrect, &src.visrect )) return CLR_INVALID; if (!clip_visrect( dc, &src.visrect, &src.visrect )) return CLR_INVALID;
dev = GET_DC_PHYSDEV( dc, pGetImage ); dev = GET_DC_PHYSDEV( dc, pGetImage );
if (dev->funcs->pGetImage( dev, 0, info, &bits, &src )) return CLR_INVALID; if (dev->funcs->pGetImage( dev, info, &bits, &src )) return CLR_INVALID;
ret = get_pixel_bitmapinfo( info, bits.ptr, &src ); ret = get_pixel_bitmapinfo( info, bits.ptr, &src );
if (bits.free) bits.free( &bits ); if (bits.free) bits.free( &bits );
......
...@@ -554,7 +554,7 @@ INT nulldrv_StretchDIBits( PHYSDEV dev, INT xDst, INT yDst, INT widthDst, INT he ...@@ -554,7 +554,7 @@ INT nulldrv_StretchDIBits( PHYSDEV dev, INT xDst, INT yDst, INT widthDst, INT he
dev = GET_DC_PHYSDEV( dc, pPutImage ); dev = GET_DC_PHYSDEV( dc, pPutImage );
copy_bitmapinfo( dst_info, src_info ); copy_bitmapinfo( dst_info, src_info );
err = dev->funcs->pPutImage( dev, 0, clip, dst_info, &src_bits, &src, &dst, rop ); err = dev->funcs->pPutImage( dev, clip, dst_info, &src_bits, &src, &dst, rop );
if (err == ERROR_BAD_FORMAT) if (err == ERROR_BAD_FORMAT)
{ {
/* 1-bpp destination without a color table requires a fake 1-entry table /* 1-bpp destination without a color table requires a fake 1-entry table
...@@ -573,7 +573,7 @@ INT nulldrv_StretchDIBits( PHYSDEV dev, INT xDst, INT yDst, INT widthDst, INT he ...@@ -573,7 +573,7 @@ INT nulldrv_StretchDIBits( PHYSDEV dev, INT xDst, INT yDst, INT widthDst, INT he
{ {
/* get rid of the fake 1-bpp table */ /* get rid of the fake 1-bpp table */
if (dst_info->bmiHeader.biClrUsed == 1) dst_info->bmiHeader.biClrUsed = 0; if (dst_info->bmiHeader.biClrUsed == 1) dst_info->bmiHeader.biClrUsed = 0;
err = dev->funcs->pPutImage( dev, 0, clip, dst_info, &src_bits, &src, &dst, rop ); err = dev->funcs->pPutImage( dev, clip, dst_info, &src_bits, &src, &dst, rop );
} }
} }
...@@ -581,7 +581,7 @@ INT nulldrv_StretchDIBits( PHYSDEV dev, INT xDst, INT yDst, INT widthDst, INT he ...@@ -581,7 +581,7 @@ INT nulldrv_StretchDIBits( PHYSDEV dev, INT xDst, INT yDst, INT widthDst, INT he
{ {
copy_bitmapinfo( src_info, dst_info ); copy_bitmapinfo( src_info, dst_info );
err = stretch_bits( src_info, &src, dst_info, &dst, &src_bits, GetStretchBltMode( dev->hdc ) ); err = stretch_bits( src_info, &src, dst_info, &dst, &src_bits, GetStretchBltMode( dev->hdc ) );
if (!err) err = dev->funcs->pPutImage( dev, 0, NULL, dst_info, &src_bits, &src, &dst, rop ); if (!err) err = dev->funcs->pPutImage( dev, NULL, dst_info, &src_bits, &src, &dst, rop );
} }
if (err) ret = 0; if (err) ret = 0;
else if (rop == SRCCOPY) ret = height; else if (rop == SRCCOPY) ret = height;
...@@ -850,11 +850,11 @@ INT nulldrv_SetDIBitsToDevice( PHYSDEV dev, INT x_dst, INT y_dst, DWORD cx, DWOR ...@@ -850,11 +850,11 @@ INT nulldrv_SetDIBitsToDevice( PHYSDEV dev, INT x_dst, INT y_dst, DWORD cx, DWOR
dev = GET_DC_PHYSDEV( dc, pPutImage ); dev = GET_DC_PHYSDEV( dc, pPutImage );
copy_bitmapinfo( dst_info, src_info ); copy_bitmapinfo( dst_info, src_info );
err = dev->funcs->pPutImage( dev, 0, clip, dst_info, &src_bits, &src, &dst, SRCCOPY ); err = dev->funcs->pPutImage( dev, clip, dst_info, &src_bits, &src, &dst, SRCCOPY );
if (err == ERROR_BAD_FORMAT) if (err == ERROR_BAD_FORMAT)
{ {
err = convert_bits( src_info, &src, dst_info, &src_bits, FALSE ); err = convert_bits( src_info, &src, dst_info, &src_bits, FALSE );
if (!err) err = dev->funcs->pPutImage( dev, 0, clip, dst_info, &src_bits, &src, &dst, SRCCOPY ); if (!err) err = dev->funcs->pPutImage( dev, clip, dst_info, &src_bits, &src, &dst, SRCCOPY );
} }
if (err) lines = 0; if (err) lines = 0;
......
...@@ -850,22 +850,12 @@ DWORD get_image_from_bitmap( BITMAPOBJ *bmp, BITMAPINFO *info, ...@@ -850,22 +850,12 @@ DWORD get_image_from_bitmap( BITMAPOBJ *bmp, BITMAPINFO *info,
/*********************************************************************** /***********************************************************************
* dibdrv_GetImage * dibdrv_GetImage
*/ */
DWORD dibdrv_GetImage( PHYSDEV dev, HBITMAP hbitmap, BITMAPINFO *info, DWORD dibdrv_GetImage( PHYSDEV dev, BITMAPINFO *info, struct gdi_image_bits *bits,
struct gdi_image_bits *bits, struct bitblt_coords *src ) struct bitblt_coords *src )
{ {
dibdrv_physdev *pdev = get_dibdrv_pdev(dev); dibdrv_physdev *pdev = get_dibdrv_pdev(dev);
TRACE( "%p %p %p\n", dev, hbitmap, info ); TRACE( "%p %p\n", dev, info );
if (hbitmap)
{
DWORD ret;
BITMAPOBJ *bmp = GDI_GetObjPtr( hbitmap, OBJ_BITMAP );
if (!bmp) return ERROR_INVALID_HANDLE;
ret = get_image_from_bitmap( bmp, info, bits, src );
GDI_ReleaseObj( hbitmap );
return ret;
}
return get_image_dib_info( &pdev->dib, info, bits, src ); return get_image_dib_info( &pdev->dib, info, bits, src );
} }
...@@ -956,7 +946,7 @@ static inline BOOL rop_uses_pat(DWORD rop) ...@@ -956,7 +946,7 @@ static inline BOOL rop_uses_pat(DWORD rop)
/*********************************************************************** /***********************************************************************
* dibdrv_PutImage * dibdrv_PutImage
*/ */
DWORD dibdrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info, DWORD dibdrv_PutImage( PHYSDEV dev, HRGN clip, BITMAPINFO *info,
const struct gdi_image_bits *bits, struct bitblt_coords *src, const struct gdi_image_bits *bits, struct bitblt_coords *src,
struct bitblt_coords *dst, DWORD rop ) struct bitblt_coords *dst, DWORD rop )
{ {
...@@ -966,17 +956,7 @@ DWORD dibdrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info ...@@ -966,17 +956,7 @@ DWORD dibdrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info
HRGN tmp_rgn = 0; HRGN tmp_rgn = 0;
dibdrv_physdev *pdev = get_dibdrv_pdev( dev ); dibdrv_physdev *pdev = get_dibdrv_pdev( dev );
TRACE( "%p %p %p\n", dev, hbitmap, info ); TRACE( "%p %p\n", dev, info );
if (hbitmap)
{
DWORD ret;
BITMAPOBJ *bmp = GDI_GetObjPtr( hbitmap, OBJ_BITMAP );
if (!bmp) return ERROR_INVALID_HANDLE;
ret = put_image_into_bitmap( bmp, clip, info, bits, src, dst );
GDI_ReleaseObj( hbitmap );
return ret;
}
if (!matching_color_info( &pdev->dib, info )) goto update_format; if (!matching_color_info( &pdev->dib, info )) goto update_format;
if (!bits) return ERROR_SUCCESS; if (!bits) return ERROR_SUCCESS;
......
...@@ -118,8 +118,8 @@ extern BOOL dibdrv_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT b ...@@ -118,8 +118,8 @@ extern BOOL dibdrv_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT b
extern BOOL dibdrv_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT type ) DECLSPEC_HIDDEN; extern BOOL dibdrv_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT type ) DECLSPEC_HIDDEN;
extern BOOL dibdrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, extern BOOL dibdrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags,
const RECT *rect, LPCWSTR str, UINT count, const INT *dx ) DECLSPEC_HIDDEN; const RECT *rect, LPCWSTR str, UINT count, const INT *dx ) DECLSPEC_HIDDEN;
extern DWORD dibdrv_GetImage( PHYSDEV dev, HBITMAP hbitmap, BITMAPINFO *info, extern DWORD dibdrv_GetImage( PHYSDEV dev, BITMAPINFO *info, struct gdi_image_bits *bits,
struct gdi_image_bits *bits, struct bitblt_coords *src ) DECLSPEC_HIDDEN; struct bitblt_coords *src ) DECLSPEC_HIDDEN;
extern COLORREF dibdrv_GetNearestColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN; extern COLORREF dibdrv_GetNearestColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
extern COLORREF dibdrv_GetPixel( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern COLORREF dibdrv_GetPixel( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN;
extern BOOL dibdrv_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, ULONG nvert, extern BOOL dibdrv_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, ULONG nvert,
...@@ -134,7 +134,7 @@ extern BOOL dibdrv_PolyPolyline( PHYSDEV dev, const POINT* pt, const DWORD* ...@@ -134,7 +134,7 @@ extern BOOL dibdrv_PolyPolyline( PHYSDEV dev, const POINT* pt, const DWORD*
DWORD polylines ) DECLSPEC_HIDDEN; DWORD polylines ) DECLSPEC_HIDDEN;
extern BOOL dibdrv_Polygon( PHYSDEV dev, const POINT *pt, INT count ) DECLSPEC_HIDDEN; extern BOOL dibdrv_Polygon( PHYSDEV dev, const POINT *pt, INT count ) DECLSPEC_HIDDEN;
extern BOOL dibdrv_Polyline( PHYSDEV dev, const POINT* pt, INT count ) DECLSPEC_HIDDEN; extern BOOL dibdrv_Polyline( PHYSDEV dev, const POINT* pt, INT count ) DECLSPEC_HIDDEN;
extern DWORD dibdrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info, extern DWORD dibdrv_PutImage( PHYSDEV dev, HRGN clip, BITMAPINFO *info,
const struct gdi_image_bits *bits, struct bitblt_coords *src, const struct gdi_image_bits *bits, struct bitblt_coords *src,
struct bitblt_coords *dst, DWORD rop ) DECLSPEC_HIDDEN; struct bitblt_coords *dst, DWORD rop ) DECLSPEC_HIDDEN;
extern BOOL dibdrv_Rectangle( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN; extern BOOL dibdrv_Rectangle( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN;
......
...@@ -385,8 +385,8 @@ static BOOL nulldrv_GetICMProfile( PHYSDEV dev, LPDWORD size, LPWSTR filename ) ...@@ -385,8 +385,8 @@ static BOOL nulldrv_GetICMProfile( PHYSDEV dev, LPDWORD size, LPWSTR filename )
return FALSE; return FALSE;
} }
static DWORD nulldrv_GetImage( PHYSDEV dev, HBITMAP hbitmap, BITMAPINFO *info, static DWORD nulldrv_GetImage( PHYSDEV dev, BITMAPINFO *info, struct gdi_image_bits *bits,
struct gdi_image_bits *bits, struct bitblt_coords *src ) struct bitblt_coords *src )
{ {
return ERROR_NOT_SUPPORTED; return ERROR_NOT_SUPPORTED;
} }
...@@ -502,7 +502,7 @@ static BOOL nulldrv_Polyline( PHYSDEV dev, const POINT *points, INT count ) ...@@ -502,7 +502,7 @@ static BOOL nulldrv_Polyline( PHYSDEV dev, const POINT *points, INT count )
return PolyPolyline( dev->hdc, points, counts, 1 ); return PolyPolyline( dev->hdc, points, counts, 1 );
} }
static DWORD nulldrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info, static DWORD nulldrv_PutImage( PHYSDEV dev, HRGN clip, BITMAPINFO *info,
const struct gdi_image_bits *bits, struct bitblt_coords *src, const struct gdi_image_bits *bits, struct bitblt_coords *src,
struct bitblt_coords *dst, DWORD rop ) struct bitblt_coords *dst, DWORD rop )
{ {
......
...@@ -1896,7 +1896,7 @@ BOOL nulldrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, const RECT *rect ...@@ -1896,7 +1896,7 @@ BOOL nulldrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, const RECT *rect
info->bmiHeader.biSize = sizeof(info->bmiHeader); info->bmiHeader.biSize = sizeof(info->bmiHeader);
info->bmiHeader.biWidth = src.width; info->bmiHeader.biWidth = src.width;
info->bmiHeader.biHeight = -src.height; info->bmiHeader.biHeight = -src.height;
err = dst_dev->funcs->pPutImage( dst_dev, 0, 0, info, NULL, NULL, NULL, 0 ); err = dst_dev->funcs->pPutImage( dst_dev, 0, info, NULL, NULL, NULL, 0 );
if (!err || err == ERROR_BAD_FORMAT) if (!err || err == ERROR_BAD_FORMAT)
{ {
/* make the source rectangle relative to the source bits */ /* make the source rectangle relative to the source bits */
...@@ -1915,7 +1915,7 @@ BOOL nulldrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, const RECT *rect ...@@ -1915,7 +1915,7 @@ BOOL nulldrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, const RECT *rect
else else
{ {
PHYSDEV src_dev = GET_DC_PHYSDEV( dc, pGetImage ); PHYSDEV src_dev = GET_DC_PHYSDEV( dc, pGetImage );
err = src_dev->funcs->pGetImage( src_dev, 0, info, &bits, &src ); err = src_dev->funcs->pGetImage( src_dev, info, &bits, &src );
if (!err && !bits.is_copy) if (!err && !bits.is_copy)
{ {
void *ptr = HeapAlloc( GetProcessHeap(), 0, get_dib_image_size( info )); void *ptr = HeapAlloc( GetProcessHeap(), 0, get_dib_image_size( info ));
...@@ -1938,7 +1938,7 @@ BOOL nulldrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, const RECT *rect ...@@ -1938,7 +1938,7 @@ BOOL nulldrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, const RECT *rect
y += src.visrect.top - dst.visrect.top; y += src.visrect.top - dst.visrect.top;
render_aa_text_bitmapinfo( dev->hdc, info, &bits, &src, x, y, flags, render_aa_text_bitmapinfo( dev->hdc, info, &bits, &src, x, y, flags,
aa_flags, str, count, dx ); aa_flags, str, count, dx );
err = dst_dev->funcs->pPutImage( dst_dev, 0, 0, info, &bits, &src, &dst, SRCCOPY ); err = dst_dev->funcs->pPutImage( dst_dev, 0, info, &bits, &src, &dst, SRCCOPY );
if (bits.free) bits.free( &bits ); if (bits.free) bits.free( &bits );
return !err; return !err;
} }
......
...@@ -167,7 +167,7 @@ static void PSDRV_WriteImageBits( PHYSDEV dev, const BITMAPINFO *info, INT xDst, ...@@ -167,7 +167,7 @@ static void PSDRV_WriteImageBits( PHYSDEV dev, const BITMAPINFO *info, INT xDst,
/*********************************************************************** /***********************************************************************
* PSDRV_PutImage * PSDRV_PutImage
*/ */
DWORD PSDRV_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info, DWORD PSDRV_PutImage( PHYSDEV dev, HRGN clip, BITMAPINFO *info,
const struct gdi_image_bits *bits, struct bitblt_coords *src, const struct gdi_image_bits *bits, struct bitblt_coords *src,
struct bitblt_coords *dst, DWORD rop ) struct bitblt_coords *dst, DWORD rop )
{ {
...@@ -176,8 +176,6 @@ DWORD PSDRV_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info, ...@@ -176,8 +176,6 @@ DWORD PSDRV_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info,
unsigned char *src_ptr, *dst_ptr; unsigned char *src_ptr, *dst_ptr;
struct gdi_image_bits dst_bits; struct gdi_image_bits dst_bits;
if (hbitmap) return ERROR_NOT_SUPPORTED;
if (info->bmiHeader.biPlanes != 1) goto update_format; if (info->bmiHeader.biPlanes != 1) goto update_format;
if (info->bmiHeader.biCompression != BI_RGB) goto update_format; if (info->bmiHeader.biCompression != BI_RGB) goto update_format;
if (info->bmiHeader.biBitCount == 16 || info->bmiHeader.biBitCount == 32) goto update_format; if (info->bmiHeader.biBitCount == 16 || info->bmiHeader.biBitCount == 32) goto update_format;
......
...@@ -437,7 +437,7 @@ extern BOOL PSDRV_PolyBezier( PHYSDEV dev, const POINT *pts, DWORD count ) DECLS ...@@ -437,7 +437,7 @@ extern BOOL PSDRV_PolyBezier( PHYSDEV dev, const POINT *pts, DWORD count ) DECLS
extern BOOL PSDRV_PolyBezierTo( PHYSDEV dev, const POINT *pts, DWORD count ) DECLSPEC_HIDDEN; extern BOOL PSDRV_PolyBezierTo( PHYSDEV dev, const POINT *pts, DWORD count ) DECLSPEC_HIDDEN;
extern BOOL PSDRV_PolyPolygon( PHYSDEV dev, const POINT* pts, const INT* counts, UINT polygons ) DECLSPEC_HIDDEN; extern BOOL PSDRV_PolyPolygon( PHYSDEV dev, const POINT* pts, const INT* counts, UINT polygons ) DECLSPEC_HIDDEN;
extern BOOL PSDRV_PolyPolyline( PHYSDEV dev, const POINT* pts, const DWORD* counts, DWORD polylines ) DECLSPEC_HIDDEN; extern BOOL PSDRV_PolyPolyline( PHYSDEV dev, const POINT* pts, const DWORD* counts, DWORD polylines ) DECLSPEC_HIDDEN;
extern DWORD PSDRV_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info, extern DWORD PSDRV_PutImage( PHYSDEV dev, HRGN clip, BITMAPINFO *info,
const struct gdi_image_bits *bits, struct bitblt_coords *src, const struct gdi_image_bits *bits, struct bitblt_coords *src,
struct bitblt_coords *dst, DWORD rop ) DECLSPEC_HIDDEN; struct bitblt_coords *dst, DWORD rop ) DECLSPEC_HIDDEN;
extern BOOL PSDRV_Rectangle( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN; extern BOOL PSDRV_Rectangle( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN;
......
...@@ -180,7 +180,7 @@ extern INT X11DRV_EnumICMProfiles( PHYSDEV dev, ICMENUMPROCW proc, LPARAM lparam ...@@ -180,7 +180,7 @@ extern INT X11DRV_EnumICMProfiles( PHYSDEV dev, ICMENUMPROCW proc, LPARAM lparam
extern BOOL X11DRV_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT fillType ) DECLSPEC_HIDDEN; extern BOOL X11DRV_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT fillType ) DECLSPEC_HIDDEN;
extern BOOL X11DRV_GetDeviceGammaRamp( PHYSDEV dev, LPVOID ramp ) DECLSPEC_HIDDEN; extern BOOL X11DRV_GetDeviceGammaRamp( PHYSDEV dev, LPVOID ramp ) DECLSPEC_HIDDEN;
extern BOOL X11DRV_GetICMProfile( PHYSDEV dev, LPDWORD size, LPWSTR filename ) DECLSPEC_HIDDEN; extern BOOL X11DRV_GetICMProfile( PHYSDEV dev, LPDWORD size, LPWSTR filename ) DECLSPEC_HIDDEN;
extern DWORD X11DRV_GetImage( PHYSDEV dev, HBITMAP hbitmap, BITMAPINFO *info, extern DWORD X11DRV_GetImage( PHYSDEV dev, BITMAPINFO *info,
struct gdi_image_bits *bits, struct bitblt_coords *src ) DECLSPEC_HIDDEN; struct gdi_image_bits *bits, struct bitblt_coords *src ) DECLSPEC_HIDDEN;
extern COLORREF X11DRV_GetNearestColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN; extern COLORREF X11DRV_GetNearestColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
extern UINT X11DRV_GetSystemPaletteEntries( PHYSDEV dev, UINT start, UINT count, LPPALETTEENTRY entries ) DECLSPEC_HIDDEN; extern UINT X11DRV_GetSystemPaletteEntries( PHYSDEV dev, UINT start, UINT count, LPPALETTEENTRY entries ) DECLSPEC_HIDDEN;
...@@ -194,7 +194,7 @@ extern BOOL X11DRV_Pie( PHYSDEV dev, INT left, INT top, INT right, ...@@ -194,7 +194,7 @@ extern BOOL X11DRV_Pie( PHYSDEV dev, INT left, INT top, INT right,
extern BOOL X11DRV_Polygon( PHYSDEV dev, const POINT* pt, INT count ) DECLSPEC_HIDDEN; extern BOOL X11DRV_Polygon( PHYSDEV dev, const POINT* pt, INT count ) DECLSPEC_HIDDEN;
extern BOOL X11DRV_PolyPolygon( PHYSDEV dev, const POINT* pt, const INT* counts, UINT polygons) DECLSPEC_HIDDEN; extern BOOL X11DRV_PolyPolygon( PHYSDEV dev, const POINT* pt, const INT* counts, UINT polygons) DECLSPEC_HIDDEN;
extern BOOL X11DRV_PolyPolyline( PHYSDEV dev, const POINT* pt, const DWORD* counts, DWORD polylines) DECLSPEC_HIDDEN; extern BOOL X11DRV_PolyPolyline( PHYSDEV dev, const POINT* pt, const DWORD* counts, DWORD polylines) DECLSPEC_HIDDEN;
extern DWORD X11DRV_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info, extern DWORD X11DRV_PutImage( PHYSDEV dev, HRGN clip, BITMAPINFO *info,
const struct gdi_image_bits *bits, struct bitblt_coords *src, const struct gdi_image_bits *bits, struct bitblt_coords *src,
struct bitblt_coords *dst, DWORD rop ) DECLSPEC_HIDDEN; struct bitblt_coords *dst, DWORD rop ) DECLSPEC_HIDDEN;
extern UINT X11DRV_RealizeDefaultPalette( PHYSDEV dev ) DECLSPEC_HIDDEN; extern UINT X11DRV_RealizeDefaultPalette( PHYSDEV dev ) DECLSPEC_HIDDEN;
......
...@@ -1317,17 +1317,6 @@ static HBITMAP xrenderdrv_SelectBitmap( PHYSDEV dev, HBITMAP hbitmap ) ...@@ -1317,17 +1317,6 @@ static HBITMAP xrenderdrv_SelectBitmap( PHYSDEV dev, HBITMAP hbitmap )
} }
/*********************************************************************** /***********************************************************************
* xrenderdrv_GetImage
*/
static DWORD xrenderdrv_GetImage( PHYSDEV dev, HBITMAP hbitmap, BITMAPINFO *info,
struct gdi_image_bits *bits, struct bitblt_coords *src )
{
if (hbitmap) return X11DRV_GetImage( dev, hbitmap, info, bits, src );
dev = GET_NEXT_PHYSDEV( dev, pGetImage );
return dev->funcs->pGetImage( dev, hbitmap, info, bits, src );
}
/***********************************************************************
* xrenderdrv_SetDeviceClipping * xrenderdrv_SetDeviceClipping
*/ */
static void xrenderdrv_SetDeviceClipping( PHYSDEV dev, HRGN rgn ) static void xrenderdrv_SetDeviceClipping( PHYSDEV dev, HRGN rgn )
...@@ -2183,12 +2172,11 @@ x11drv_fallback: ...@@ -2183,12 +2172,11 @@ x11drv_fallback:
/*********************************************************************** /***********************************************************************
* xrenderdrv_PutImage * xrenderdrv_PutImage
*/ */
static DWORD xrenderdrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info, static DWORD xrenderdrv_PutImage( PHYSDEV dev, HRGN clip, BITMAPINFO *info,
const struct gdi_image_bits *bits, struct bitblt_coords *src, const struct gdi_image_bits *bits, struct bitblt_coords *src,
struct bitblt_coords *dst, DWORD rop ) struct bitblt_coords *dst, DWORD rop )
{ {
struct xrender_physdev *physdev; struct xrender_physdev *physdev = get_xrender_dev( dev );
X_PHYSBITMAP *bitmap;
DWORD ret; DWORD ret;
Pixmap tmp_pixmap; Pixmap tmp_pixmap;
GC gc; GC gc;
...@@ -2198,19 +2186,7 @@ static DWORD xrenderdrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMA ...@@ -2198,19 +2186,7 @@ static DWORD xrenderdrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMA
Picture src_pict, mask_pict = 0; Picture src_pict, mask_pict = 0;
BOOL use_repeat; BOOL use_repeat;
if (hbitmap) dst_format = physdev->format;
{
if (!(bitmap = X11DRV_get_phys_bitmap( hbitmap ))) return ERROR_INVALID_HANDLE;
physdev = NULL;
dst_format = bitmap->format;
}
else
{
physdev = get_xrender_dev( dev );
bitmap = NULL;
dst_format = physdev->format;
}
src_format = get_xrender_format_from_bitmapinfo( info ); src_format = get_xrender_format_from_bitmapinfo( info );
if (!(pict_format = pict_formats[src_format])) goto update_format; if (!(pict_format = pict_formats[src_format])) goto update_format;
...@@ -2231,53 +2207,41 @@ static DWORD xrenderdrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMA ...@@ -2231,53 +2207,41 @@ static DWORD xrenderdrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMA
{ {
struct bitblt_coords tmp; struct bitblt_coords tmp;
if (bitmap) if (rop != SRCCOPY)
{ {
HRGN rgn = CreateRectRgnIndirect( &dst->visrect ); BOOL restore_region = add_extra_clipping_region( physdev->x11dev, clip );
if (clip) CombineRgn( rgn, rgn, clip, RGN_AND );
xrender_put_image( src_pixmap, src_pict, mask_pict, rgn, /* make coordinates relative to tmp pixmap */
pict_formats[dst_format], NULL, bitmap->pixmap, src, dst, use_repeat ); tmp = *dst;
DeleteObject( rgn ); tmp.x -= tmp.visrect.left;
} tmp.y -= tmp.visrect.top;
else OffsetRect( &tmp.visrect, -tmp.visrect.left, -tmp.visrect.top );
{
if (rop != SRCCOPY) wine_tsx11_lock();
{ gc = XCreateGC( gdi_display, physdev->x11dev->drawable, 0, NULL );
BOOL restore_region = add_extra_clipping_region( physdev->x11dev, clip ); XSetSubwindowMode( gdi_display, gc, IncludeInferiors );
XSetGraphicsExposures( gdi_display, gc, False );
/* make coordinates relative to tmp pixmap */ tmp_pixmap = XCreatePixmap( gdi_display, root_window,
tmp = *dst; tmp.visrect.right - tmp.visrect.left,
tmp.x -= tmp.visrect.left; tmp.visrect.bottom - tmp.visrect.top,
tmp.y -= tmp.visrect.top; physdev->pict_format->depth );
OffsetRect( &tmp.visrect, -tmp.visrect.left, -tmp.visrect.top ); wine_tsx11_unlock();
wine_tsx11_lock();
gc = XCreateGC( gdi_display, physdev->x11dev->drawable, 0, NULL );
XSetSubwindowMode( gdi_display, gc, IncludeInferiors );
XSetGraphicsExposures( gdi_display, gc, False );
tmp_pixmap = XCreatePixmap( gdi_display, root_window,
tmp.visrect.right - tmp.visrect.left,
tmp.visrect.bottom - tmp.visrect.top,
physdev->pict_format->depth );
wine_tsx11_unlock();
xrender_put_image( src_pixmap, src_pict, mask_pict, NULL, physdev->pict_format,
NULL, tmp_pixmap, src, &tmp, use_repeat );
execute_rop( physdev->x11dev, tmp_pixmap, gc, &dst->visrect, rop );
wine_tsx11_lock();
XFreePixmap( gdi_display, tmp_pixmap );
XFreeGC( gdi_display, gc );
wine_tsx11_unlock();
if (restore_region) restore_clipping_region( physdev->x11dev );
}
else xrender_put_image( src_pixmap, src_pict, mask_pict, clip,
physdev->pict_format, physdev, 0, src, dst, use_repeat );
add_device_bounds( physdev->x11dev, &dst->visrect ); xrender_put_image( src_pixmap, src_pict, mask_pict, NULL, physdev->pict_format,
NULL, tmp_pixmap, src, &tmp, use_repeat );
execute_rop( physdev->x11dev, tmp_pixmap, gc, &dst->visrect, rop );
wine_tsx11_lock();
XFreePixmap( gdi_display, tmp_pixmap );
XFreeGC( gdi_display, gc );
wine_tsx11_unlock();
if (restore_region) restore_clipping_region( physdev->x11dev );
} }
else xrender_put_image( src_pixmap, src_pict, mask_pict, clip,
physdev->pict_format, physdev, 0, src, dst, use_repeat );
add_device_bounds( physdev->x11dev, &dst->visrect );
wine_tsx11_lock(); wine_tsx11_lock();
pXRenderFreePicture( gdi_display, src_pict ); pXRenderFreePicture( gdi_display, src_pict );
...@@ -2292,9 +2256,8 @@ update_format: ...@@ -2292,9 +2256,8 @@ update_format:
return ERROR_BAD_FORMAT; return ERROR_BAD_FORMAT;
x11drv_fallback: x11drv_fallback:
if (hbitmap) return X11DRV_PutImage( dev, hbitmap, clip, info, bits, src, dst, rop );
dev = GET_NEXT_PHYSDEV( dev, pPutImage ); dev = GET_NEXT_PHYSDEV( dev, pPutImage );
return dev->funcs->pPutImage( dev, hbitmap, clip, info, bits, src, dst, rop ); return dev->funcs->pPutImage( dev, clip, info, bits, src, dst, rop );
} }
...@@ -2665,7 +2628,7 @@ static const struct gdi_dc_funcs xrender_funcs = ...@@ -2665,7 +2628,7 @@ static const struct gdi_dc_funcs xrender_funcs =
NULL, /* pGetGlyphIndices */ NULL, /* pGetGlyphIndices */
NULL, /* pGetGlyphOutline */ NULL, /* pGetGlyphOutline */
NULL, /* pGetICMProfile */ NULL, /* pGetICMProfile */
xrenderdrv_GetImage, /* pGetImage */ NULL, /* pGetImage */
NULL, /* pGetKerningPairs */ NULL, /* pGetKerningPairs */
NULL, /* pGetNearestColor */ NULL, /* pGetNearestColor */
NULL, /* pGetOutlineTextMetrics */ NULL, /* pGetOutlineTextMetrics */
......
...@@ -110,7 +110,7 @@ struct gdi_dc_funcs ...@@ -110,7 +110,7 @@ struct gdi_dc_funcs
DWORD (*pGetGlyphIndices)(PHYSDEV,LPCWSTR,INT,LPWORD,DWORD); DWORD (*pGetGlyphIndices)(PHYSDEV,LPCWSTR,INT,LPWORD,DWORD);
DWORD (*pGetGlyphOutline)(PHYSDEV,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*); DWORD (*pGetGlyphOutline)(PHYSDEV,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*);
BOOL (*pGetICMProfile)(PHYSDEV,LPDWORD,LPWSTR); BOOL (*pGetICMProfile)(PHYSDEV,LPDWORD,LPWSTR);
DWORD (*pGetImage)(PHYSDEV,HBITMAP,BITMAPINFO*,struct gdi_image_bits*,struct bitblt_coords*); DWORD (*pGetImage)(PHYSDEV,BITMAPINFO*,struct gdi_image_bits*,struct bitblt_coords*);
DWORD (*pGetKerningPairs)(PHYSDEV,DWORD,LPKERNINGPAIR); DWORD (*pGetKerningPairs)(PHYSDEV,DWORD,LPKERNINGPAIR);
COLORREF (*pGetNearestColor)(PHYSDEV,COLORREF); COLORREF (*pGetNearestColor)(PHYSDEV,COLORREF);
UINT (*pGetOutlineTextMetrics)(PHYSDEV,UINT,LPOUTLINETEXTMETRICW); UINT (*pGetOutlineTextMetrics)(PHYSDEV,UINT,LPOUTLINETEXTMETRICW);
...@@ -142,7 +142,7 @@ struct gdi_dc_funcs ...@@ -142,7 +142,7 @@ struct gdi_dc_funcs
BOOL (*pPolygon)(PHYSDEV,const POINT*,INT); BOOL (*pPolygon)(PHYSDEV,const POINT*,INT);
BOOL (*pPolyline)(PHYSDEV,const POINT*,INT); BOOL (*pPolyline)(PHYSDEV,const POINT*,INT);
BOOL (*pPolylineTo)(PHYSDEV,const POINT*,INT); BOOL (*pPolylineTo)(PHYSDEV,const POINT*,INT);
DWORD (*pPutImage)(PHYSDEV,HBITMAP,HRGN,BITMAPINFO*,const struct gdi_image_bits*,struct bitblt_coords*,struct bitblt_coords*,DWORD); DWORD (*pPutImage)(PHYSDEV,HRGN,BITMAPINFO*,const struct gdi_image_bits*,struct bitblt_coords*,struct bitblt_coords*,DWORD);
UINT (*pRealizeDefaultPalette)(PHYSDEV); UINT (*pRealizeDefaultPalette)(PHYSDEV);
UINT (*pRealizePalette)(PHYSDEV,HPALETTE,BOOL); UINT (*pRealizePalette)(PHYSDEV,HPALETTE,BOOL);
BOOL (*pRectangle)(PHYSDEV,INT,INT,INT,INT); BOOL (*pRectangle)(PHYSDEV,INT,INT,INT,INT);
...@@ -211,7 +211,7 @@ struct gdi_dc_funcs ...@@ -211,7 +211,7 @@ struct gdi_dc_funcs
}; };
/* increment this when you change the DC function table */ /* increment this when you change the DC function table */
#define WINE_GDI_DRIVER_VERSION 29 #define WINE_GDI_DRIVER_VERSION 30
#define GDI_PRIORITY_NULL_DRV 0 /* null driver */ #define GDI_PRIORITY_NULL_DRV 0 /* null driver */
#define GDI_PRIORITY_FONT_DRV 100 /* any font driver */ #define GDI_PRIORITY_FONT_DRV 100 /* any font driver */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment