winex11: Directly use win32u for GDI functions in bitblt.c.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Jacek Caban 2022-04-12 13:09:19 +02:00 committed by Alexandre Julliard
parent 43126a5053
commit c3ed3403ba
2 changed files with 31 additions and 22 deletions

View File

@ -44,8 +44,6 @@
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
#include "x11drv.h"
#include "winternl.h"
#include "wine/debug.h"
@ -849,8 +847,14 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst,
}
if (physDevSrc->depth == 1)
{
int text_pixel = X11DRV_PALETTE_ToPhysical( physDevDst, GetTextColor(physDevDst->dev.hdc) );
int bkgnd_pixel = X11DRV_PALETTE_ToPhysical( physDevDst, GetBkColor(physDevDst->dev.hdc) );
DWORD text_color, bk_color;
int text_pixel, bkgnd_pixel;
NtGdiGetDCDword( physDevDst->dev.hdc, NtGdiGetTextColor, &text_color );
text_pixel = X11DRV_PALETTE_ToPhysical( physDevDst, text_color );
NtGdiGetDCDword( physDevDst->dev.hdc, NtGdiGetBkColor, &bk_color );
bkgnd_pixel = X11DRV_PALETTE_ToPhysical( physDevDst, bk_color );
XSetBackground( gdi_display, physDevDst->gc, text_pixel );
XSetForeground( gdi_display, physDevDst->gc, bkgnd_pixel );
@ -880,8 +884,14 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst,
to color or vice versa, the foreground and background color of
the device context are used. In fact, it also applies to the
case when it is converted from mono to mono. */
int text_pixel = X11DRV_PALETTE_ToPhysical( physDevDst, GetTextColor(physDevDst->dev.hdc) );
int bkgnd_pixel = X11DRV_PALETTE_ToPhysical( physDevDst, GetBkColor(physDevDst->dev.hdc) );
DWORD text_color, bk_color;
int text_pixel, bkgnd_pixel;
NtGdiGetDCDword( physDevDst->dev.hdc, NtGdiGetTextColor, &text_color );
text_pixel = X11DRV_PALETTE_ToPhysical( physDevDst, text_color );
NtGdiGetDCDword( physDevDst->dev.hdc, NtGdiGetBkColor, &bk_color );
bkgnd_pixel = X11DRV_PALETTE_ToPhysical( physDevDst, bk_color );
if (X11DRV_PALETTE_XPixelToPalette && physDevDst->depth != 1)
{
@ -1480,7 +1490,7 @@ Pixmap create_pixmap_from_image( HDC hdc, const XVisualInfo *vis, const BITMAPIN
{
if (dst_info->bmiHeader.biBitCount == 1) /* set a default color table for 1-bpp */
memcpy( dst_info->bmiColors, default_colortable, sizeof(default_colortable) );
dib = CreateDIBSection( hdc, dst_info, coloruse, &dst_bits.ptr, 0, 0 );
dib = NtGdiCreateDIBSection( hdc, 0, 0, dst_info, coloruse, 0, 0, 0, &dst_bits.ptr );
if (dib)
{
if (src_info->bmiHeader.biBitCount == 1 && !src_info->bmiHeader.biClrUsed)
@ -1489,7 +1499,7 @@ Pixmap create_pixmap_from_image( HDC hdc, const XVisualInfo *vis, const BITMAPIN
dst_bits.free = NULL;
dst_bits.is_copy = TRUE;
err = put_pixmap_image( pixmap, vis, dst_info, &dst_bits );
DeleteObject( dib );
NtGdiDeleteObjectApp( dib );
}
else err = ERROR_OUTOFMEMORY;
}
@ -1592,9 +1602,9 @@ static inline UINT get_color_component( UINT color, UINT mask )
#ifdef HAVE_LIBXSHAPE
static inline void flush_rgn_data( HRGN rgn, RGNDATA *data )
{
HRGN tmp = ExtCreateRegion( NULL, data->rdh.dwSize + data->rdh.nRgnSize, data );
CombineRgn( rgn, rgn, tmp, RGN_OR );
DeleteObject( tmp );
HRGN tmp = NtGdiExtCreateRegion( NULL, data->rdh.dwSize + data->rdh.nRgnSize, data );
NtGdiCombineRgn( rgn, rgn, tmp, RGN_OR );
NtGdiDeleteObjectApp( tmp );
data->rdh.nCount = 0;
}
@ -1639,7 +1649,7 @@ static void update_surface_region( struct x11drv_window_surface *surface )
data->rdh.nCount = 0;
data->rdh.nRgnSize = sizeof(buffer) - sizeof(data->rdh);
rgn = CreateRectRgn( 0, 0, 0, 0 );
rgn = NtGdiCreateRectRgn( 0, 0, 0, 0 );
width = surface->header.rect.right - surface->header.rect.left;
switch (info->bmiHeader.biBitCount)
@ -1741,7 +1751,7 @@ static void update_surface_region( struct x11drv_window_surface *surface )
HeapFree( GetProcessHeap(), 0, data );
}
DeleteObject( rgn );
NtGdiDeleteObjectApp( rgn );
#endif
}
@ -1868,14 +1878,14 @@ static void x11drv_surface_set_region( struct window_surface *window_surface, HR
window_surface->funcs->lock( window_surface );
if (!region)
{
if (surface->region) DeleteObject( surface->region );
if (surface->region) NtGdiDeleteObjectApp( surface->region );
surface->region = 0;
XSetClipMask( gdi_display, surface->gc, None );
}
else
{
if (!surface->region) surface->region = CreateRectRgn( 0, 0, 0, 0 );
CombineRgn( surface->region, region, 0, RGN_COPY );
if (!surface->region) surface->region = NtGdiCreateRectRgn( 0, 0, 0, 0 );
NtGdiCombineRgn( surface->region, region, 0, RGN_COPY );
if ((data = X11DRV_GetRegionData( surface->region, 0 )))
{
XSetClipRectangles( gdi_display, surface->gc, 0, 0,
@ -1979,7 +1989,7 @@ static void x11drv_surface_destroy( struct window_surface *window_surface )
}
surface->crit.DebugInfo->Spare[0] = 0;
DeleteCriticalSection( &surface->crit );
if (surface->region) DeleteObject( surface->region );
if (surface->region) NtGdiDeleteObjectApp( surface->region );
HeapFree( GetProcessHeap(), 0, surface );
}
@ -2099,10 +2109,10 @@ HRGN expose_surface( struct window_surface *window_surface, const RECT *rect )
add_bounds_rect( &surface->bounds, &rc );
if (surface->region)
{
region = CreateRectRgnIndirect( rect );
if (CombineRgn( region, region, surface->region, RGN_DIFF ) <= NULLREGION)
region = NtGdiCreateRectRgn( rect->left, rect->top, rect->right, rect->bottom );
if (NtGdiCombineRgn( region, region, surface->region, RGN_DIFF ) <= NULLREGION)
{
DeleteObject( region );
NtGdiDeleteObjectApp( region );
region = 0;
}
}

View File

@ -57,8 +57,7 @@ typedef int Status;
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
#include "ntgdi.h"
#include "wine/gdi_driver.h"
#include "wine/list.h"