From 6857cb56957d691bee76cfe28ef88714cca00f29 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Wed, 29 Sep 2021 14:09:21 +0200 Subject: [PATCH] gdi32: Move ntgdi functions to Unix library. Signed-off-by: Jacek Caban Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/gdi32/bitblt.c | 4 + dlls/gdi32/bitmap.c | 4 + dlls/gdi32/brush.c | 6 +- dlls/gdi32/clipping.c | 4 + dlls/gdi32/dc.c | 6 +- dlls/gdi32/dib.c | 4 + dlls/gdi32/dibdrv/bitblt.c | 4 + dlls/gdi32/dibdrv/dc.c | 6 +- dlls/gdi32/dibdrv/dibdrv.h | 2 + dlls/gdi32/dibdrv/graphics.c | 4 + dlls/gdi32/dibdrv/objects.c | 4 + dlls/gdi32/dibdrv/opengl.c | 11 +- dlls/gdi32/dibdrv/primitives.c | 4 + dlls/gdi32/driver.c | 14 +- dlls/gdi32/emfdrv.c | 6 +- dlls/gdi32/font.c | 20 +- dlls/gdi32/freetype.c | 28 +- dlls/gdi32/gdi_private.h | 12 +- dlls/gdi32/gdiobj.c | 237 +++++++- dlls/gdi32/mapping.c | 4 + dlls/gdi32/ntgdi_private.h | 19 +- dlls/gdi32/objects.c | 18 + dlls/gdi32/painting.c | 4 + dlls/gdi32/palette.c | 4 + dlls/gdi32/path.c | 4 + dlls/gdi32/pen.c | 4 + dlls/gdi32/printdrv.c | 4 + dlls/gdi32/region.c | 4 + dlls/gdi32/vertical.c | 4 + dlls/gdi32/vulkan.c | 4 + dlls/gdi32/win32u_private.h | 273 +++++++++ dlls/gdi32/wrappers.c | 1018 +++++++++++++++++++++++++++++++- tools/make_unicode | 14 +- 33 files changed, 1667 insertions(+), 91 deletions(-) diff --git a/dlls/gdi32/bitblt.c b/dlls/gdi32/bitblt.c index cf56f39da4c..c9486cb8961 100644 --- a/dlls/gdi32/bitblt.c +++ b/dlls/gdi32/bitblt.c @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include #include diff --git a/dlls/gdi32/bitmap.c b/dlls/gdi32/bitmap.c index cd54b7df77d..c0c4cd97611 100644 --- a/dlls/gdi32/bitmap.c +++ b/dlls/gdi32/bitmap.c @@ -19,6 +19,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include #include diff --git a/dlls/gdi32/brush.c b/dlls/gdi32/brush.c index f31dab0fdd4..5b92e6e5368 100644 --- a/dlls/gdi32/brush.c +++ b/dlls/gdi32/brush.c @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include @@ -140,7 +144,7 @@ void free_brush_pattern( struct brush_pattern *pattern ) HeapFree( GetProcessHeap(), 0, pattern->info ); } -BOOL get_brush_bitmap_info( HBRUSH handle, BITMAPINFO *info, void *bits, UINT *usage ) +BOOL CDECL get_brush_bitmap_info( HBRUSH handle, BITMAPINFO *info, void *bits, UINT *usage ) { BRUSHOBJ *brush; BOOL ret = FALSE; diff --git a/dlls/gdi32/clipping.c b/dlls/gdi32/clipping.c index 9436a91a43f..704d5142855 100644 --- a/dlls/gdi32/clipping.c +++ b/dlls/gdi32/clipping.c @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include #include "windef.h" diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index dbdc561c273..541081cb856 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include #include @@ -1255,7 +1259,7 @@ DWORD WINAPI NtGdiSetLayout( HDC hdc, LONG wox, DWORD layout ) /********************************************************************** * get_icm_profile (win32u.@) */ -BOOL get_icm_profile( HDC hdc, BOOL allow_default, DWORD *size, WCHAR *filename ) +BOOL CDECL get_icm_profile( HDC hdc, BOOL allow_default, DWORD *size, WCHAR *filename ) { PHYSDEV physdev; DC *dc; diff --git a/dlls/gdi32/dib.c b/dlls/gdi32/dib.c index 4d70e99a3c5..a8361235c77 100644 --- a/dlls/gdi32/dib.c +++ b/dlls/gdi32/dib.c @@ -59,6 +59,10 @@ Search for "Bitmap Structures" in MSDN */ +#if 0 +#pragma makedep unix +#endif + #include #include #include diff --git a/dlls/gdi32/dibdrv/bitblt.c b/dlls/gdi32/dibdrv/bitblt.c index 86390663f29..0218cd0eea5 100644 --- a/dlls/gdi32/dibdrv/bitblt.c +++ b/dlls/gdi32/dibdrv/bitblt.c @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include "ntgdi_private.h" diff --git a/dlls/gdi32/dibdrv/dc.c b/dlls/gdi32/dibdrv/dc.c index c3ebb6ab918..93f1ad8310c 100644 --- a/dlls/gdi32/dibdrv/dc.c +++ b/dlls/gdi32/dibdrv/dc.c @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include "ntgdi_private.h" @@ -608,7 +612,7 @@ static struct opengl_funcs * CDECL dibdrv_wine_get_wgl_driver( PHYSDEV dev, UINT ERR( "version mismatch, opengl32 wants %u but dibdrv has %u\n", version, WINE_WGL_DRIVER_VERSION ); return NULL; } - if (!osmesa_funcs && __wine_init_unix_lib( gdi32_module, DLL_PROCESS_ATTACH, NULL, &osmesa_funcs )) + if (!osmesa_funcs && !(osmesa_funcs = init_opengl_lib())) { static int warned; if (!warned++) ERR( "OSMesa not available, no OpenGL bitmap support\n" ); diff --git a/dlls/gdi32/dibdrv/dibdrv.h b/dlls/gdi32/dibdrv/dibdrv.h index a5dc782ce84..71f6456bac3 100644 --- a/dlls/gdi32/dibdrv/dibdrv.h +++ b/dlls/gdi32/dibdrv/dibdrv.h @@ -299,3 +299,5 @@ struct osmesa_funcs BOOL (CDECL *make_current)( struct wgl_context *context, void *bits, int width, int height, int bpp, int stride ); }; + +extern const struct osmesa_funcs *init_opengl_lib(void) DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/dibdrv/graphics.c b/dlls/gdi32/dibdrv/graphics.c index 9ebcaf7e4a3..3d9901b798f 100644 --- a/dlls/gdi32/dibdrv/graphics.c +++ b/dlls/gdi32/dibdrv/graphics.c @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include "ntgdi_private.h" #include "dibdrv.h" diff --git a/dlls/gdi32/dibdrv/objects.c b/dlls/gdi32/dibdrv/objects.c index a61ae3e226f..eff39848755 100644 --- a/dlls/gdi32/dibdrv/objects.c +++ b/dlls/gdi32/dibdrv/objects.c @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include diff --git a/dlls/gdi32/dibdrv/opengl.c b/dlls/gdi32/dibdrv/opengl.c index d21a74474a6..25688889ce8 100644 --- a/dlls/gdi32/dibdrv/opengl.c +++ b/dlls/gdi32/dibdrv/opengl.c @@ -211,18 +211,17 @@ static const struct osmesa_funcs osmesa_funcs = osmesa_make_current }; -NTSTATUS init_opengl_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out ) +const struct osmesa_funcs *init_opengl_lib(void) { - if (!init_opengl()) return STATUS_DLL_NOT_FOUND; - *(const struct osmesa_funcs **)ptr_out = &osmesa_funcs; - return STATUS_SUCCESS; + if (!init_opengl()) return NULL; + return &osmesa_funcs; } #else /* SONAME_LIBOSMESA */ -NTSTATUS init_opengl_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out ) +const struct osmesa_funcs *init_opengl_lib(void) { - return STATUS_DLL_NOT_FOUND; + return NULL; } #endif /* SONAME_LIBOSMESA */ diff --git a/dlls/gdi32/dibdrv/primitives.c b/dlls/gdi32/dibdrv/primitives.c index 87f1be2d3f9..c3cbc57155e 100644 --- a/dlls/gdi32/dibdrv/primitives.c +++ b/dlls/gdi32/dibdrv/primitives.c @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include "ntgdi_private.h" diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c index 201341d7701..f089d1b9c8d 100644 --- a/dlls/gdi32/driver.c +++ b/dlls/gdi32/driver.c @@ -19,6 +19,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include #include @@ -84,16 +88,12 @@ const struct gdi_dc_funcs *get_display_driver(void) return driver_funcs; } -/*********************************************************************** - * __wine_set_display_driver (win32u.@) - */ -void CDECL __wine_set_display_driver( HMODULE module ) +void CDECL set_display_driver( void *proc ) { - const struct gdi_dc_funcs * (CDECL *wine_get_gdi_driver)( unsigned int ); + const struct gdi_dc_funcs * (CDECL *wine_get_gdi_driver)( unsigned int ) = proc; const struct gdi_dc_funcs *funcs = NULL; - wine_get_gdi_driver = (void *)GetProcAddress( module, "wine_get_gdi_driver" ); - if (wine_get_gdi_driver) funcs = wine_get_gdi_driver( WINE_GDI_DRIVER_VERSION ); + funcs = wine_get_gdi_driver( WINE_GDI_DRIVER_VERSION ); if (!funcs) { ERR( "Could not create graphics driver\n" ); diff --git a/dlls/gdi32/emfdrv.c b/dlls/gdi32/emfdrv.c index ebf93f91f40..1208ab4b87a 100644 --- a/dlls/gdi32/emfdrv.c +++ b/dlls/gdi32/emfdrv.c @@ -19,6 +19,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include "ntgdi_private.h" @@ -263,7 +267,7 @@ static BOOL CDECL EMFDRV_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT return TRUE; } -static BOOL EMFDRV_Rectangle( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) +static BOOL CDECL EMFDRV_Rectangle( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) { DC *dc = get_physdev_dc( dev ); RECTL bounds; diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c index d8f5ceb7c5c..0a2a39d3da8 100644 --- a/dlls/gdi32/font.c +++ b/dlls/gdi32/font.c @@ -20,6 +20,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include #include @@ -1195,11 +1199,11 @@ static struct gdi_font_face *create_face( struct gdi_font_family *family, const return NULL; } -static int CDECL add_gdi_face( const WCHAR *family_name, const WCHAR *second_name, - const WCHAR *style, const WCHAR *fullname, const WCHAR *file, - void *data_ptr, SIZE_T data_size, UINT index, FONTSIGNATURE fs, - DWORD ntmflags, DWORD version, DWORD flags, - const struct bitmap_font_size *size ) +int add_gdi_face( const WCHAR *family_name, const WCHAR *second_name, + const WCHAR *style, const WCHAR *fullname, const WCHAR *file, + void *data_ptr, SIZE_T data_size, UINT index, FONTSIGNATURE fs, + DWORD ntmflags, DWORD version, DWORD flags, + const struct bitmap_font_size *size ) { struct gdi_font_face *face; struct gdi_font_family *family; @@ -5784,7 +5788,7 @@ DWORD WINAPI NtGdiGetGlyphOutline( HDC hdc, UINT ch, UINT format, GLYPHMETRICS * } -BOOL get_file_outline_text_metric( const WCHAR *path, OUTLINETEXTMETRICW *otm ) +BOOL CDECL get_file_outline_text_metric( const WCHAR *path, OUTLINETEXTMETRICW *otm ) { struct gdi_font *font = NULL; @@ -6203,8 +6207,6 @@ static void load_registry_fonts(void) NtClose( hkey ); } -static const struct font_callback_funcs callback_funcs = { add_gdi_face }; - /*********************************************************************** * font_init */ @@ -6230,7 +6232,7 @@ UINT font_init(void) if (!dpi) return 96; update_codepage( dpi ); - if (__wine_init_unix_lib( gdi32_module, DLL_PROCESS_ATTACH, &callback_funcs, &font_funcs )) + if (!(font_funcs = init_freetype_lib())) return dpi; load_system_bitmap_fonts(); diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index fc84a481fd3..a3679d854a4 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -282,8 +282,6 @@ static inline FT_Face get_ft_face( struct gdi_font *font ) return ((struct font_private_data *)font->private)->ft_face; } -static const struct font_callback_funcs *callback_funcs; - struct font_mapping { struct list entry; @@ -1355,9 +1353,9 @@ static int add_unix_face( const char *unix_name, const WCHAR *file, void *data_p if (!HIWORD( flags )) flags |= ADDFONT_AA_FLAGS( default_aa_flags ); - ret = callback_funcs->add_gdi_face( unix_face->family_name, unix_face->second_name, unix_face->style_name, unix_face->full_name, - file, data_ptr, data_size, face_index, unix_face->fs, unix_face->ntm_flags, - unix_face->font_version, flags, unix_face->scalable ? NULL : &unix_face->size ); + ret = add_gdi_face( unix_face->family_name, unix_face->second_name, unix_face->style_name, unix_face->full_name, + file, data_ptr, data_size, face_index, unix_face->fs, unix_face->ntm_flags, + unix_face->font_version, flags, unix_face->scalable ? NULL : &unix_face->size ); TRACE("fsCsb = %08x %08x/%08x %08x %08x %08x\n", unix_face->fs.fsCsb[0], unix_face->fs.fsCsb[1], unix_face->fs.fsUsb[0], unix_face->fs.fsUsb[1], unix_face->fs.fsUsb[2], unix_face->fs.fsUsb[3]); @@ -4316,31 +4314,21 @@ static const struct font_backend_funcs font_funcs = freetype_destroy_font }; -static NTSTATUS init_freetype_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out ) +const struct font_backend_funcs *init_freetype_lib(void) { - callback_funcs = ptr_in; - if (!init_freetype()) return STATUS_DLL_NOT_FOUND; + if (!init_freetype()) return NULL; #ifdef SONAME_LIBFONTCONFIG init_fontconfig(); #endif NtQueryDefaultLocale( FALSE, &system_lcid ); - *(const struct font_backend_funcs **)ptr_out = &font_funcs; - return STATUS_SUCCESS; + return &font_funcs; } #else /* HAVE_FREETYPE */ -static NTSTATUS init_freetype_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out ) +const struct font_backend_funcs *init_freetype_lib(void) { - return STATUS_DLL_NOT_FOUND; + return NULL; } #endif /* HAVE_FREETYPE */ - -NTSTATUS CDECL __wine_init_unix_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out ) -{ - if (reason != DLL_PROCESS_ATTACH) return STATUS_SUCCESS; - - if (ptr_in) return init_freetype_lib( module, reason, ptr_in, ptr_out ); - else return init_opengl_lib( module, reason, ptr_in, ptr_out ); -} diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index 9f092913110..45bd5431a23 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -279,12 +279,12 @@ extern BOOL EMFDC_WidenPath( DC_ATTR *dc_attr ) DECLSPEC_HIDDEN; extern HENHMETAFILE EMF_Create_HENHMETAFILE( ENHMETAHEADER *emh, DWORD filesize, BOOL on_disk ) DECLSPEC_HIDDEN; -extern BOOL get_brush_bitmap_info( HBRUSH handle, BITMAPINFO *info, void *bits, - UINT *usage ) DECLSPEC_HIDDEN; -extern BOOL get_icm_profile( HDC hdc, BOOL allow_default, DWORD *size, - WCHAR *filename ) DECLSPEC_HIDDEN; -extern BOOL get_file_outline_text_metric( const WCHAR *path, OUTLINETEXTMETRICW *otm ) DECLSPEC_HIDDEN; - +extern BOOL CDECL get_brush_bitmap_info( HBRUSH handle, BITMAPINFO *info, void *bits, + UINT *usage ) DECLSPEC_HIDDEN; +extern BOOL CDECL get_icm_profile( HDC hdc, BOOL allow_default, DWORD *size, + WCHAR *filename ) DECLSPEC_HIDDEN; +extern BOOL CDECL get_file_outline_text_metric( const WCHAR *path, + OUTLINETEXTMETRICW *otm ) DECLSPEC_HIDDEN; static inline int get_dib_stride( int width, int bpp ) { diff --git a/dlls/gdi32/gdiobj.c b/dlls/gdi32/gdiobj.c index 84514bd9d91..540ff4c0697 100644 --- a/dlls/gdi32/gdiobj.c +++ b/dlls/gdi32/gdiobj.c @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include #include @@ -42,9 +46,10 @@ static GDI_SHARED_MEMORY gdi_shared; static GDI_HANDLE_ENTRY *next_free; static GDI_HANDLE_ENTRY *next_unused = gdi_shared.Handles + FIRST_GDI_HANDLE; static LONG debug_count; -HMODULE gdi32_module = 0; SYSTEM_BASIC_INFORMATION system_info; +const struct user_callbacks *user_callbacks = NULL; + static inline HGDIOBJ entry_to_handle( GDI_HANDLE_ENTRY *entry ) { unsigned int idx = entry - gdi_shared.Handles; @@ -696,26 +701,6 @@ static void init_stock_objects( unsigned int dpi ) } } -/*********************************************************************** - * DllMain - * - * GDI initialization. - */ -BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved ) -{ - unsigned int dpi; - - if (reason != DLL_PROCESS_ATTACH) return TRUE; - - gdi32_module = inst; - DisableThreadLibraryCalls( inst ); - NtQuerySystemInformation( SystemBasicInformation, &system_info, sizeof(system_info), NULL ); - set_gdi_shared(); - dpi = font_init(); - init_stock_objects( dpi ); - return TRUE; -} - static const char *gdi_obj_type( unsigned type ) { @@ -830,6 +815,12 @@ DWORD get_gdi_object_type( HGDIOBJ obj ) return entry ? entry->ExtType << NTGDI_HANDLE_TYPE_SHIFT : 0; } +void set_gdi_client_ptr( HGDIOBJ obj, void *ptr ) +{ + GDI_HANDLE_ENTRY *entry = handle_entry( obj ); + if (entry) entry->UserPointer = (UINT_PTR)ptr; +} + /*********************************************************************** * get_any_obj_ptr * @@ -1081,3 +1072,207 @@ BOOL WINAPI NtGdiSetColorAdjustment( HDC hdc, const COLORADJUSTMENT *ca ) FIXME( "stub\n" ); return FALSE; } + + +static struct unix_funcs unix_funcs = +{ + NtGdiAbortDoc, + NtGdiAbortPath, + NtGdiAddFontMemResourceEx, + NtGdiAddFontResourceW, + NtGdiAlphaBlend, + NtGdiAngleArc, + NtGdiArcInternal, + NtGdiBeginPath, + NtGdiBitBlt, + NtGdiCloseFigure, + NtGdiCombineRgn, + NtGdiComputeXformCoefficients, + NtGdiCreateBitmap, + NtGdiCreateClientObj, + NtGdiCreateCompatibleBitmap, + NtGdiCreateCompatibleDC, + NtGdiCreateDIBBrush, + NtGdiCreateDIBSection, + NtGdiCreateDIBitmapInternal, + NtGdiCreateEllipticRgn, + NtGdiCreateHalftonePalette, + NtGdiCreateHatchBrushInternal, + NtGdiCreateMetafileDC, + NtGdiCreatePaletteInternal, + NtGdiCreatePatternBrushInternal, + NtGdiCreatePen, + NtGdiCreateRectRgn, + NtGdiCreateRoundRectRgn, + NtGdiCreateSolidBrush, + NtGdiDdDDICheckVidPnExclusiveOwnership, + NtGdiDdDDICloseAdapter, + NtGdiDdDDICreateDCFromMemory, + NtGdiDdDDICreateDevice, + NtGdiDdDDIDestroyDCFromMemory, + NtGdiDdDDIDestroyDevice, + NtGdiDdDDIEscape, + NtGdiDdDDIOpenAdapterFromDeviceName, + NtGdiDdDDIOpenAdapterFromHdc, + NtGdiDdDDIOpenAdapterFromLuid, + NtGdiDdDDIQueryStatistics, + NtGdiDdDDISetQueuedLimit, + NtGdiDdDDISetVidPnSourceOwner, + NtGdiDeleteClientObj, + NtGdiDeleteObjectApp, + NtGdiDescribePixelFormat, + NtGdiDoPalette, + NtGdiDrawStream, + NtGdiEllipse, + NtGdiEndDoc, + NtGdiEndPath, + NtGdiEndPage, + NtGdiEnumFonts, + NtGdiEqualRgn, + NtGdiExcludeClipRect, + NtGdiExtCreatePen, + NtGdiExtEscape, + NtGdiExtFloodFill, + NtGdiExtTextOutW, + NtGdiExtCreateRegion, + NtGdiExtGetObjectW, + NtGdiExtSelectClipRgn, + NtGdiFillPath, + NtGdiFillRgn, + NtGdiFlattenPath, + NtGdiFontIsLinked, + NtGdiFlush, + NtGdiFrameRgn, + NtGdiGetAndSetDCDword, + NtGdiGetAppClipBox, + NtGdiGetBitmapBits, + NtGdiGetBitmapDimension, + NtGdiGetBoundsRect, + NtGdiGetCharABCWidthsW, + NtGdiGetCharWidthW, + NtGdiGetCharWidthInfo, + NtGdiGetColorAdjustment, + NtGdiGetDCObject, + NtGdiGetDIBitsInternal, + NtGdiGetDeviceCaps, + NtGdiGetDeviceGammaRamp, + NtGdiGetFontData, + NtGdiGetFontFileData, + NtGdiGetFontFileInfo, + NtGdiGetFontUnicodeRanges, + NtGdiGetGlyphIndicesW, + NtGdiGetGlyphOutline, + NtGdiGetKerningPairs, + NtGdiGetNearestColor, + NtGdiGetNearestPaletteIndex, + NtGdiGetOutlineTextMetricsInternalW, + NtGdiGetPath, + NtGdiGetPixel, + NtGdiGetRandomRgn, + NtGdiGetRasterizerCaps, + NtGdiGetRealizationInfo, + NtGdiGetRegionData, + NtGdiGetRgnBox, + NtGdiGetSpoolMessage, + NtGdiGetSystemPaletteUse, + NtGdiGetTextCharsetInfo, + NtGdiGetTextExtentExW, + NtGdiGetTextFaceW, + NtGdiGetTextMetricsW, + NtGdiGetTransform, + NtGdiGradientFill, + NtGdiHfontCreate, + NtGdiInitSpool, + NtGdiIntersectClipRect, + NtGdiInvertRgn, + NtGdiLineTo, + NtGdiMaskBlt, + NtGdiModifyWorldTransform, + NtGdiMoveTo, + NtGdiOffsetClipRgn, + NtGdiOffsetRgn, + NtGdiOpenDCW, + NtGdiPatBlt, + NtGdiPathToRegion, + NtGdiPlgBlt, + NtGdiPolyDraw, + NtGdiPolyPolyDraw, + NtGdiPtInRegion, + NtGdiPtVisible, + NtGdiRectInRegion, + NtGdiRectVisible, + NtGdiRectangle, + NtGdiRemoveFontMemResourceEx, + NtGdiRemoveFontResourceW, + NtGdiResetDC, + NtGdiResizePalette, + NtGdiRestoreDC, + NtGdiRoundRect, + NtGdiSaveDC, + NtGdiScaleViewportExtEx, + NtGdiScaleWindowExtEx, + NtGdiSelectBitmap, + NtGdiSelectBrush, + NtGdiSelectClipPath, + NtGdiSelectFont, + NtGdiSelectPen, + NtGdiSetBitmapBits, + NtGdiSetBitmapDimension, + NtGdiSetBrushOrg, + NtGdiSetBoundsRect, + NtGdiSetColorAdjustment, + NtGdiSetDIBitsToDeviceInternal, + NtGdiSetDeviceGammaRamp, + NtGdiSetLayout, + NtGdiSetMagicColors, + NtGdiSetMetaRgn, + NtGdiSetPixel, + NtGdiSetPixelFormat, + NtGdiSetRectRgn, + NtGdiSetSystemPaletteUse, + NtGdiSetTextJustification, + NtGdiSetVirtualResolution, + NtGdiStartDoc, + NtGdiStartPage, + NtGdiStretchBlt, + NtGdiStretchDIBitsInternal, + NtGdiStrokeAndFillPath, + NtGdiStrokePath, + NtGdiSwapBuffers, + NtGdiTransparentBlt, + NtGdiTransformPoints, + NtGdiUnrealizeObject, + NtGdiUpdateColors, + NtGdiWidenPath, + + GDIRealizePalette, + GDISelectPalette, + GetDCHook, + MirrorRgn, + SetDCHook, + SetDIBits, + SetHookFlags, + get_brush_bitmap_info, + get_file_outline_text_metric, + get_icm_profile, + __wine_get_vulkan_driver, + __wine_get_wgl_driver, + __wine_make_gdi_object_system, + set_display_driver, + __wine_set_visible_region, +}; + +NTSTATUS CDECL __wine_init_unix_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out ) +{ + unsigned int dpi; + + if (reason != DLL_PROCESS_ATTACH) return 0; + + NtQuerySystemInformation( SystemBasicInformation, &system_info, sizeof(system_info), NULL ); + set_gdi_shared(); + dpi = font_init(); + init_stock_objects( dpi ); + user_callbacks = ptr_in; + *(struct unix_funcs **)ptr_out = &unix_funcs; + return 0; +} diff --git a/dlls/gdi32/mapping.c b/dlls/gdi32/mapping.c index 6156a64a825..6c20f50a302 100644 --- a/dlls/gdi32/mapping.c +++ b/dlls/gdi32/mapping.c @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include "windef.h" diff --git a/dlls/gdi32/ntgdi_private.h b/dlls/gdi32/ntgdi_private.h index 6bcc1a710e3..e2211ad80eb 100644 --- a/dlls/gdi32/ntgdi_private.h +++ b/dlls/gdi32/ntgdi_private.h @@ -211,14 +211,13 @@ extern UINT set_dib_dc_color_table( HDC hdc, UINT startpos, UINT entries, const RGBQUAD *colors ) DECLSPEC_HIDDEN; extern void dibdrv_set_window_surface( DC *dc, struct window_surface *surface ) DECLSPEC_HIDDEN; -extern NTSTATUS init_opengl_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out ) DECLSPEC_HIDDEN; - /* driver.c */ extern const struct gdi_dc_funcs null_driver DECLSPEC_HIDDEN; extern const struct gdi_dc_funcs dib_driver DECLSPEC_HIDDEN; extern const struct gdi_dc_funcs path_driver DECLSPEC_HIDDEN; extern const struct gdi_dc_funcs font_driver DECLSPEC_HIDDEN; extern const struct gdi_dc_funcs *get_display_driver(void) DECLSPEC_HIDDEN; +extern void CDECL set_display_driver( void *proc ) DECLSPEC_HIDDEN; /* font.c */ @@ -328,17 +327,14 @@ struct font_backend_funcs void (CDECL *destroy_font)( struct gdi_font *font ); }; -struct font_callback_funcs -{ - int (CDECL *add_gdi_face)( const WCHAR *family_name, const WCHAR *second_name, - const WCHAR *style, const WCHAR *fullname, const WCHAR *file, - void *data_ptr, SIZE_T data_size, UINT index, FONTSIGNATURE fs, - DWORD ntmflags, DWORD version, DWORD flags, - const struct bitmap_font_size *size ); -}; - +extern int add_gdi_face( const WCHAR *family_name, const WCHAR *second_name, + const WCHAR *style, const WCHAR *fullname, const WCHAR *file, + void *data_ptr, SIZE_T data_size, UINT index, FONTSIGNATURE fs, + DWORD ntmflags, DWORD version, DWORD flags, + const struct bitmap_font_size *size ) DECLSPEC_HIDDEN; extern UINT font_init(void) DECLSPEC_HIDDEN; extern UINT get_acp(void) DECLSPEC_HIDDEN; +extern const struct font_backend_funcs *init_freetype_lib(void) DECLSPEC_HIDDEN; /* opentype.c */ @@ -647,7 +643,6 @@ extern void CDECL free_heap_bits( struct gdi_image_bits *bits ) DECLSPEC_HIDDEN; void set_gdi_client_ptr( HGDIOBJ handle, void *ptr ) DECLSPEC_HIDDEN; -extern HMODULE gdi32_module DECLSPEC_HIDDEN; extern SYSTEM_BASIC_INFORMATION system_info DECLSPEC_HIDDEN; extern const struct user_callbacks *user_callbacks DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/objects.c b/dlls/gdi32/objects.c index 7f6893f0952..9e77fbfc729 100644 --- a/dlls/gdi32/objects.c +++ b/dlls/gdi32/objects.c @@ -30,6 +30,7 @@ #include "initguid.h" #include "devguid.h" #include "setupapi.h" +#include "win32u_private.h" #include "wine/rbtree.h" #include "wine/debug.h" @@ -41,6 +42,8 @@ DEFINE_DEVPROPKEY(DEVPROPKEY_GPU_LUID, 0x60b193cb, 0x5276, 0x4d0f, 0x96, 0xfc, 0 #define FIRST_GDI_HANDLE 32 +HMODULE gdi32_module; + struct hdc_list { HDC hdc; @@ -129,6 +132,21 @@ HGDIOBJ get_full_gdi_handle( HGDIOBJ obj ) return entry ? entry_to_handle( entry ) : 0; } +/*********************************************************************** + * DllMain + * + * GDI initialization. + */ +BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved ) +{ + if (reason != DLL_PROCESS_ATTACH) return TRUE; + + DisableThreadLibraryCalls( inst ); + gdi32_module = inst; + wrappers_init(); + return TRUE; +} + /*********************************************************************** * GetObjectType (GDI32.@) */ diff --git a/dlls/gdi32/painting.c b/dlls/gdi32/painting.c index dba91daf788..629d6a1adef 100644 --- a/dlls/gdi32/painting.c +++ b/dlls/gdi32/painting.c @@ -20,6 +20,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include #include diff --git a/dlls/gdi32/palette.c b/dlls/gdi32/palette.c index 61c31a8e11b..7c623dd6739 100644 --- a/dlls/gdi32/palette.c +++ b/dlls/gdi32/palette.c @@ -23,6 +23,10 @@ * Information in the "Undocumented Windows" is incorrect. */ +#if 0 +#pragma makedep unix +#endif + #include #include #include diff --git a/dlls/gdi32/path.c b/dlls/gdi32/path.c index 8a8a20f590f..e10c89e300b 100644 --- a/dlls/gdi32/path.c +++ b/dlls/gdi32/path.c @@ -21,6 +21,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include #include diff --git a/dlls/gdi32/pen.c b/dlls/gdi32/pen.c index fa8b138229e..960cdc940f1 100644 --- a/dlls/gdi32/pen.c +++ b/dlls/gdi32/pen.c @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include #include diff --git a/dlls/gdi32/printdrv.c b/dlls/gdi32/printdrv.c index 152b43d6ae4..37f5817c62f 100644 --- a/dlls/gdi32/printdrv.c +++ b/dlls/gdi32/printdrv.c @@ -21,6 +21,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include #include "windef.h" diff --git a/dlls/gdi32/region.c b/dlls/gdi32/region.c index 0c4e4745e91..355743a665c 100644 --- a/dlls/gdi32/region.c +++ b/dlls/gdi32/region.c @@ -94,6 +94,10 @@ SOFTWARE. * the y-x-banding that's so nice to have... */ +#if 0 +#pragma makedep unix +#endif + #include #include #include diff --git a/dlls/gdi32/vertical.c b/dlls/gdi32/vertical.c index 0df776b7f4d..b713eda8229 100644 --- a/dlls/gdi32/vertical.c +++ b/dlls/gdi32/vertical.c @@ -2,6 +2,10 @@ /* generated from https://www.unicode.org/Public/14.0.0/ucd/UCD.zip:VerticalOrientation.txt */ /* DO NOT EDIT!! */ +#if 0 +#pragma makedep unix +#endif + #include "windef.h" const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1248] = diff --git a/dlls/gdi32/vulkan.c b/dlls/gdi32/vulkan.c index 0796763b8c4..0f026ee943c 100644 --- a/dlls/gdi32/vulkan.c +++ b/dlls/gdi32/vulkan.c @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep unix +#endif + #include "ntgdi_private.h" /*********************************************************************** diff --git a/dlls/gdi32/win32u_private.h b/dlls/gdi32/win32u_private.h index 8bc40b37abf..3dc7ac656ef 100644 --- a/dlls/gdi32/win32u_private.h +++ b/dlls/gdi32/win32u_private.h @@ -38,6 +38,273 @@ struct user_callbacks HWND (WINAPI *pWindowFromDC)( HDC ); }; +struct unix_funcs +{ + /* win32u functions */ + INT (WINAPI *pNtGdiAbortDoc)( HDC hdc ); + BOOL (WINAPI *pNtGdiAbortPath)( HDC hdc ); + HANDLE (WINAPI *pNtGdiAddFontMemResourceEx)( void *ptr, DWORD size, void *dv, ULONG dv_size, + DWORD *count ); + INT (WINAPI *pNtGdiAddFontResourceW)( const WCHAR *str, ULONG size, ULONG files, DWORD flags, + DWORD tid, void *dv ); + BOOL (WINAPI *pNtGdiAlphaBlend)( HDC hdc_dst, int x_dst, int y_dst, int width_dst, int height_dst, + HDC hdc_src, int x_src, int y_src, int width_src, int height_src, + BLENDFUNCTION blend_function, HANDLE xform ); + BOOL (WINAPI *pNtGdiAngleArc)( HDC hdc, INT x, INT y, DWORD radius, FLOAT start_angle, + FLOAT sweep_angle ); + BOOL (WINAPI *pNtGdiArcInternal)( UINT type, HDC hdc, INT left, INT top, INT right, INT bottom, + INT xstart, INT ystart, INT xend, INT yend ); + BOOL (WINAPI *pNtGdiBeginPath)( HDC hdc ); + BOOL (WINAPI *pNtGdiBitBlt)( HDC hdc_dst, INT x_dst, INT y_dst, INT width, INT height, HDC hdc_src, + INT x_src, INT y_src, DWORD rop, DWORD bk_color, FLONG fl ); + BOOL (WINAPI *pNtGdiCloseFigure)( HDC hdc ); + INT (WINAPI *pNtGdiCombineRgn)( HRGN dest, HRGN src1, HRGN src2, INT mode ); + BOOL (WINAPI *pNtGdiComputeXformCoefficients)( HDC hdc ); + HBITMAP (WINAPI *pNtGdiCreateBitmap)( INT width, INT height, UINT planes, + UINT bpp, const void *bits ); + HANDLE (WINAPI *pNtGdiCreateClientObj)( ULONG type ); + HBITMAP (WINAPI *pNtGdiCreateCompatibleBitmap)( HDC hdc, INT width, INT height ); + HDC (WINAPI *pNtGdiCreateCompatibleDC)( HDC hdc ); + HBRUSH (WINAPI *pNtGdiCreateDIBBrush)( const void *data, UINT coloruse, UINT size, + BOOL is_8x8, BOOL pen, const void *client ); + HBITMAP (WINAPI *pNtGdiCreateDIBSection)( HDC hdc, HANDLE section, DWORD offset, const BITMAPINFO *bmi, + UINT usage, UINT header_size, ULONG flags, + ULONG_PTR color_space, void **bits ); + HBITMAP (WINAPI *pNtGdiCreateDIBitmapInternal)( HDC hdc, INT width, INT height, DWORD init, + const void *bits, const BITMAPINFO *data, + UINT coloruse, UINT max_info, UINT max_bits, + ULONG flags, HANDLE xform ); + HRGN (WINAPI *pNtGdiCreateEllipticRgn)( INT left, INT top, INT right, INT bottom ); + HPALETTE (WINAPI *pNtGdiCreateHalftonePalette)( HDC hdc ); + HBRUSH (WINAPI *pNtGdiCreateHatchBrushInternal)( INT style, COLORREF color, BOOL pen ); + HDC (WINAPI *pNtGdiCreateMetafileDC)( HDC hdc ); + HPALETTE (WINAPI *pNtGdiCreatePaletteInternal)( const LOGPALETTE *palette, UINT count ); + HBRUSH (WINAPI *pNtGdiCreatePatternBrushInternal)( HBITMAP hbitmap, BOOL pen, BOOL is_8x8 ); + HPEN (WINAPI *pNtGdiCreatePen)( INT style, INT width, COLORREF color, HBRUSH brush ); + HRGN (WINAPI *pNtGdiCreateRectRgn)( INT left, INT top, INT right, INT bottom ); + HRGN (WINAPI *pNtGdiCreateRoundRectRgn)( INT left, INT top, INT right, INT bottom, + INT ellipse_width, INT ellipse_height ); + HBRUSH (WINAPI *pNtGdiCreateSolidBrush)( COLORREF color, HBRUSH brush ); + NTSTATUS (WINAPI *pNtGdiDdDDICheckVidPnExclusiveOwnership)( const D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *desc ); + NTSTATUS (WINAPI *pNtGdiDdDDICloseAdapter)( const D3DKMT_CLOSEADAPTER *desc ); + NTSTATUS (WINAPI *pNtGdiDdDDICreateDCFromMemory)( D3DKMT_CREATEDCFROMMEMORY *desc ); + NTSTATUS (WINAPI *pNtGdiDdDDICreateDevice)( D3DKMT_CREATEDEVICE *desc ); + NTSTATUS (WINAPI *pNtGdiDdDDIDestroyDCFromMemory)( const D3DKMT_DESTROYDCFROMMEMORY *desc ); + NTSTATUS (WINAPI *pNtGdiDdDDIDestroyDevice)( const D3DKMT_DESTROYDEVICE *desc ); + NTSTATUS (WINAPI *pNtGdiDdDDIEscape)( const D3DKMT_ESCAPE *desc ); + NTSTATUS (WINAPI *pNtGdiDdDDIOpenAdapterFromDeviceName)( D3DKMT_OPENADAPTERFROMDEVICENAME *desc ); + NTSTATUS (WINAPI *pNtGdiDdDDIOpenAdapterFromHdc)( D3DKMT_OPENADAPTERFROMHDC *desc ); + NTSTATUS (WINAPI *pNtGdiDdDDIOpenAdapterFromLuid)( D3DKMT_OPENADAPTERFROMLUID *desc ); + NTSTATUS (WINAPI *pNtGdiDdDDIQueryStatistics)( D3DKMT_QUERYSTATISTICS *stats ); + NTSTATUS (WINAPI *pNtGdiDdDDISetQueuedLimit)( D3DKMT_SETQUEUEDLIMIT *desc ); + NTSTATUS (WINAPI *pNtGdiDdDDISetVidPnSourceOwner)( const D3DKMT_SETVIDPNSOURCEOWNER *desc ); + BOOL (WINAPI *pNtGdiDeleteClientObj)( HGDIOBJ obj ); + BOOL (WINAPI *pNtGdiDeleteObjectApp)( HGDIOBJ obj ); + INT (WINAPI *pNtGdiDescribePixelFormat)( HDC hdc, INT format, UINT size, + PIXELFORMATDESCRIPTOR *descr ); + LONG (WINAPI *pNtGdiDoPalette)( HGDIOBJ handle, WORD start, WORD count, void *entries, + DWORD func, BOOL inbound ); + BOOL (WINAPI *pNtGdiDrawStream)( HDC hdc, ULONG in, void *pvin ); + BOOL (WINAPI *pNtGdiEllipse)( HDC hdc, INT left, INT top, INT right, INT bottom ); + INT (WINAPI *pNtGdiEndDoc)(HDC hdc); + BOOL (WINAPI *pNtGdiEndPath)( HDC hdc ); + INT (WINAPI *pNtGdiEndPage)( HDC hdc ); + BOOL (WINAPI *pNtGdiEnumFonts)( HDC hdc, ULONG type, ULONG win32_compat, ULONG face_name_len, + const WCHAR *face_name, ULONG charset, ULONG *count, void *buf ); + BOOL (WINAPI *pNtGdiEqualRgn)( HRGN hrgn1, HRGN hrgn2 ); + INT (WINAPI *pNtGdiExcludeClipRect)( HDC hdc, INT left, INT top, INT right, INT bottom ); + HPEN (WINAPI *pNtGdiExtCreatePen)( DWORD style, DWORD width, ULONG brush_style, ULONG color, + ULONG_PTR client_hatch, ULONG_PTR hatch, DWORD style_count, + const DWORD *style_bits, ULONG dib_size, BOOL old_style, + HBRUSH brush ); + INT (WINAPI *pNtGdiExtEscape)( HDC hdc, WCHAR *driver, INT driver_id, INT escape, INT input_size, + const char *input, INT output_size, char *output ); + BOOL (WINAPI *pNtGdiExtFloodFill)( HDC hdc, INT x, INT y, COLORREF color, UINT type ); + BOOL (WINAPI *pNtGdiExtTextOutW)( HDC hdc, INT x, INT y, UINT flags, const RECT *rect, + const WCHAR *str, UINT count, const INT *dx, DWORD cp ); + HRGN (WINAPI *pNtGdiExtCreateRegion)( const XFORM *xform, DWORD count, const RGNDATA *data ); + INT (WINAPI *pNtGdiExtGetObjectW)( HGDIOBJ handle, INT count, void *buffer ); + INT (WINAPI *pNtGdiExtSelectClipRgn)( HDC hdc, HRGN region, INT mode ); + BOOL (WINAPI *pNtGdiFillPath)( HDC hdc ); + BOOL (WINAPI *pNtGdiFillRgn)( HDC hdc, HRGN hrgn, HBRUSH hbrush ); + BOOL (WINAPI *pNtGdiFlattenPath)( HDC hdc ); + BOOL (WINAPI *pNtGdiFontIsLinked)( HDC hdc ); + BOOL (WINAPI *pNtGdiFlush)(void); + BOOL (WINAPI *pNtGdiFrameRgn)( HDC hdc, HRGN hrgn, HBRUSH brush, INT width, INT height ); + BOOL (WINAPI *pNtGdiGetAndSetDCDword)( HDC hdc, UINT method, DWORD value, DWORD *result ); + INT (WINAPI *pNtGdiGetAppClipBox)( HDC hdc, RECT *rect ); + LONG (WINAPI *pNtGdiGetBitmapBits)( HBITMAP bitmap, LONG count, void *bits ); + BOOL (WINAPI *pNtGdiGetBitmapDimension)( HBITMAP bitmap, SIZE *size ); + UINT (WINAPI *pNtGdiGetBoundsRect)( HDC hdc, RECT *rect, UINT flags ); + BOOL (WINAPI *pNtGdiGetCharABCWidthsW)( HDC hdc, UINT first, UINT last, WCHAR *chars, + ULONG flags, void *buffer ); + BOOL (WINAPI *pNtGdiGetCharWidthW)( HDC hdc, UINT first_char, UINT last_char, WCHAR *chars, + ULONG flags, void *buffer ); + BOOL (WINAPI *pNtGdiGetCharWidthInfo)( HDC hdc, struct char_width_info *info ); + BOOL (WINAPI *pNtGdiGetColorAdjustment)( HDC hdc, COLORADJUSTMENT *ca ); + HANDLE (WINAPI *pNtGdiGetDCObject)( HDC hdc, UINT type ); + INT (WINAPI *pNtGdiGetDIBitsInternal)( HDC hdc, HBITMAP hbitmap, UINT startscan, UINT lines, + void *bits, BITMAPINFO *info, UINT coloruse, + UINT max_bits, UINT max_info ); + INT (WINAPI *pNtGdiGetDeviceCaps)( HDC hdc, INT cap ); + BOOL (WINAPI *pNtGdiGetDeviceGammaRamp)( HDC hdc, void *ptr ); + DWORD (WINAPI *pNtGdiGetFontData)( HDC hdc, DWORD table, DWORD offset, void *buffer, DWORD length ); + BOOL (WINAPI *pNtGdiGetFontFileData)( DWORD instance_id, DWORD file_index, UINT64 *offset, + void *buff, DWORD buff_size ); + BOOL (WINAPI *pNtGdiGetFontFileInfo)( DWORD instance_id, DWORD file_index, struct font_fileinfo *info, + SIZE_T size, SIZE_T *needed ); + DWORD (WINAPI *pNtGdiGetFontUnicodeRanges)( HDC hdc, GLYPHSET *lpgs ); + DWORD (WINAPI *pNtGdiGetGlyphIndicesW)( HDC hdc, const WCHAR *str, INT count, + WORD *indices, DWORD flags ); + DWORD (WINAPI *pNtGdiGetGlyphOutline)( HDC hdc, UINT ch, UINT format, GLYPHMETRICS *metrics, + DWORD size, void *buffer, const MAT2 *mat2, + BOOL ignore_rotation ); + DWORD (WINAPI *pNtGdiGetKerningPairs)( HDC hdc, DWORD count, KERNINGPAIR *kern_pair ); + COLORREF (WINAPI *pNtGdiGetNearestColor)( HDC hdc, COLORREF color ); + UINT (WINAPI *pNtGdiGetNearestPaletteIndex)( HPALETTE hpalette, COLORREF color ); + UINT (WINAPI *pNtGdiGetOutlineTextMetricsInternalW)( HDC hdc, UINT cbData, + OUTLINETEXTMETRICW *otm, ULONG opts ); + INT (WINAPI *pNtGdiGetPath)( HDC hdc, POINT *points, BYTE *types, INT size ); + COLORREF (WINAPI *pNtGdiGetPixel)( HDC hdc, INT x, INT y ); + INT (WINAPI *pNtGdiGetRandomRgn)( HDC hdc, HRGN region, INT code ); + BOOL (WINAPI *pNtGdiGetRasterizerCaps)( RASTERIZER_STATUS *status, UINT size ); + BOOL (WINAPI *pNtGdiGetRealizationInfo)( HDC hdc, struct font_realization_info *info ); + DWORD (WINAPI *pNtGdiGetRegionData)( HRGN hrgn, DWORD count, RGNDATA *data ); + INT (WINAPI *pNtGdiGetRgnBox)( HRGN hrgn, RECT *rect ); + DWORD (WINAPI *pNtGdiGetSpoolMessage)( void *ptr1, DWORD data2, void *ptr3, DWORD data4 ); + UINT (WINAPI *pNtGdiGetSystemPaletteUse)( HDC hdc ); + UINT (WINAPI *pNtGdiGetTextCharsetInfo)( HDC hdc, FONTSIGNATURE *fs, DWORD flags ); + BOOL (WINAPI *pNtGdiGetTextExtentExW)( HDC hdc, const WCHAR *str, INT count, INT max_ext, + INT *nfit, INT *dxs, SIZE *size, UINT flags ); + INT (WINAPI *pNtGdiGetTextFaceW)( HDC hdc, INT count, WCHAR *name, BOOL alias_name ); + BOOL (WINAPI *pNtGdiGetTextMetricsW)( HDC hdc, TEXTMETRICW *metrics, ULONG flags ); + BOOL (WINAPI *pNtGdiGetTransform)( HDC hdc, DWORD which, XFORM *xform ); + BOOL (WINAPI *pNtGdiGradientFill)( HDC hdc, TRIVERTEX *vert_array, ULONG nvert, + void *grad_array, ULONG ngrad, ULONG mode ); + HFONT (WINAPI *pNtGdiHfontCreate)( const ENUMLOGFONTEXDVW *enumex, ULONG unk2, ULONG unk3, + ULONG unk4, void *data ); + DWORD (WINAPI *pNtGdiInitSpool)(void); + INT (WINAPI *pNtGdiIntersectClipRect)( HDC hdc, INT left, INT top, INT right, INT bottom ); + BOOL (WINAPI *pNtGdiInvertRgn)( HDC hdc, HRGN hrgn ); + BOOL (WINAPI *pNtGdiLineTo)( HDC hdc, INT x, INT y ); + BOOL (WINAPI *pNtGdiMaskBlt)( HDC hdc, INT x_dst, INT y_dst, INT width_dst, INT height_dst, + HDC hdc_src, INT x_src, INT y_src, HBITMAP mask, + INT x_mask, INT y_mask, DWORD rop, DWORD bk_color ); + BOOL (WINAPI *pNtGdiModifyWorldTransform)( HDC hdc, const XFORM *xform, DWORD mode ); + BOOL (WINAPI *pNtGdiMoveTo)( HDC hdc, INT x, INT y, POINT *pt ); + INT (WINAPI *pNtGdiOffsetClipRgn)( HDC hdc, INT x, INT y ); + INT (WINAPI *pNtGdiOffsetRgn)( HRGN hrgn, INT x, INT y ); + HDC (WINAPI *pNtGdiOpenDCW)( UNICODE_STRING *device, const DEVMODEW *devmode, + UNICODE_STRING *output, ULONG type, BOOL is_display, + HANDLE hspool, DRIVER_INFO_2W *driver_info, void *pdev ); + BOOL (WINAPI *pNtGdiPatBlt)( HDC hdc, INT left, INT top, INT width, INT height, DWORD rop ); + HRGN (WINAPI *pNtGdiPathToRegion)( HDC hdc ); + BOOL (WINAPI *pNtGdiPlgBlt)( HDC hdc, const POINT *point, HDC hdc_src, INT x_src, INT y_src, + INT width, INT height, HBITMAP mask, INT x_mask, INT y_mask, + DWORD bk_color ); + BOOL (WINAPI *pNtGdiPolyDraw)(HDC hdc, const POINT *points, const BYTE *types, DWORD count ); + ULONG (WINAPI *pNtGdiPolyPolyDraw)( HDC hdc, const POINT *points, const UINT *counts, + DWORD count, UINT function ); + BOOL (WINAPI *pNtGdiPtInRegion)( HRGN hrgn, INT x, INT y ); + BOOL (WINAPI *pNtGdiPtVisible)( HDC hdc, INT x, INT y ); + BOOL (WINAPI *pNtGdiRectInRegion)( HRGN hrgn, const RECT *rect ); + BOOL (WINAPI *pNtGdiRectVisible)( HDC hdc, const RECT *rect ); + BOOL (WINAPI *pNtGdiRectangle)( HDC hdc, INT left, INT top, INT right, INT bottom ); + BOOL (WINAPI *pNtGdiRemoveFontMemResourceEx)( HANDLE handle ); + BOOL (WINAPI *pNtGdiRemoveFontResourceW)( const WCHAR *str, ULONG size, ULONG files, + DWORD flags, DWORD tid, void *dv ); + BOOL (WINAPI *pNtGdiResetDC)( HDC hdc, const DEVMODEW *devmode, BOOL *banding, + DRIVER_INFO_2W *driver_info, void *dev ); + BOOL (WINAPI *pNtGdiResizePalette)( HPALETTE palette, UINT count ); + BOOL (WINAPI *pNtGdiRestoreDC)( HDC hdc, INT level ); + BOOL (WINAPI *pNtGdiRoundRect)( HDC hdc, INT left, INT top, INT right, + INT bottom, INT ell_width, INT ell_height ); + INT (WINAPI *pNtGdiSaveDC)( HDC hdc ); + BOOL (WINAPI *pNtGdiScaleViewportExtEx)( HDC hdc, INT x_num, INT x_denom, + INT y_num, INT y_denom, SIZE *size ); + BOOL (WINAPI *pNtGdiScaleWindowExtEx)( HDC hdc, INT x_num, INT x_denom, + INT y_num, INT y_denom, SIZE *size ); + HGDIOBJ (WINAPI *pNtGdiSelectBitmap)( HDC hdc, HGDIOBJ handle ); + HGDIOBJ (WINAPI *pNtGdiSelectBrush)( HDC hdc, HGDIOBJ handle ); + BOOL (WINAPI *pNtGdiSelectClipPath)( HDC hdc, INT mode ); + HGDIOBJ (WINAPI *pNtGdiSelectFont)( HDC hdc, HGDIOBJ handle ); + HGDIOBJ (WINAPI *pNtGdiSelectPen)( HDC hdc, HGDIOBJ handle ); + LONG (WINAPI *pNtGdiSetBitmapBits)( HBITMAP hbitmap, LONG count, const void *bits ); + BOOL (WINAPI *pNtGdiSetBitmapDimension)( HBITMAP hbitmap, INT x, INT y, SIZE *prev_size ); + BOOL (WINAPI *pNtGdiSetBrushOrg)( HDC hdc, INT x, INT y, POINT *prev_org ); + UINT (WINAPI *pNtGdiSetBoundsRect)( HDC hdc, const RECT *rect, UINT flags ); + BOOL (WINAPI *pNtGdiSetColorAdjustment)( HDC hdc, const COLORADJUSTMENT *ca ); + INT (WINAPI *pNtGdiSetDIBitsToDeviceInternal)( HDC hdc, INT x_dst, INT y_dst, DWORD cx, + DWORD cy, INT x_src, INT y_src, UINT startscan, + UINT lines, const void *bits, const BITMAPINFO *bmi, + UINT coloruse, UINT max_bits, UINT max_info, + BOOL xform_coords, HANDLE xform ); + BOOL (WINAPI *pNtGdiSetDeviceGammaRamp)( HDC hdc, void *ptr ); + DWORD (WINAPI *pNtGdiSetLayout)( HDC hdc, LONG wox, DWORD layout ); + BOOL (WINAPI *pNtGdiSetMagicColors)( HDC hdc, DWORD magic, ULONG index ); + INT (WINAPI *pNtGdiSetMetaRgn)( HDC hdc ); + COLORREF (WINAPI *pNtGdiSetPixel)( HDC hdc, INT x, INT y, COLORREF color ); + BOOL (WINAPI *pNtGdiSetPixelFormat)( HDC hdc, INT format ); + BOOL (WINAPI *pNtGdiSetRectRgn)( HRGN hrgn, INT left, INT top, INT right, INT bottom ); + UINT (WINAPI *pNtGdiSetSystemPaletteUse)( HDC hdc, UINT use ); + BOOL (WINAPI *pNtGdiSetTextJustification)( HDC hdc, INT extra, INT breaks ); + BOOL (WINAPI *pNtGdiSetVirtualResolution)( HDC hdc, DWORD horz_res, DWORD vert_res, + DWORD horz_size, DWORD vert_size ); + INT (WINAPI *pNtGdiStartDoc)( HDC hdc, const DOCINFOW *doc, BOOL *banding, INT job ); + INT (WINAPI *pNtGdiStartPage)( HDC hdc ); + BOOL (WINAPI *pNtGdiStretchBlt)( HDC hdc, INT x_dst, INT y_dst, INT width_dst, INT height_dst, + HDC hdc_src, INT x_src, INT y_src, INT width_src, INT height_src, + DWORD rop, COLORREF bk_color ); + INT (WINAPI *pNtGdiStretchDIBitsInternal)( HDC hdc, INT x_dst, INT y_dst, INT width_dst, + INT height_dst, INT x_src, INT y_src, INT width_src, + INT height_src, const void *bits, const BITMAPINFO *bmi, + UINT coloruse, DWORD rop, UINT max_info, UINT max_bits, + HANDLE xform ); + BOOL (WINAPI *pNtGdiStrokeAndFillPath)( HDC hdc ); + BOOL (WINAPI *pNtGdiStrokePath)( HDC hdc ); + BOOL (WINAPI *pNtGdiSwapBuffers)( HDC hdc ); + BOOL (WINAPI *pNtGdiTransparentBlt)( HDC hdc, int x_dst, int y_dst, int width_dst, int height_dst, + HDC hdc_src, int x_src, int y_src, int width_src, int height_src, + UINT color ); + BOOL (WINAPI *pNtGdiTransformPoints)( HDC hdc, const POINT *points_in, POINT *points_out, + INT count, UINT mode ); + BOOL (WINAPI *pNtGdiUnrealizeObject)( HGDIOBJ obj ); + BOOL (WINAPI *pNtGdiUpdateColors)( HDC hdc ); + BOOL (WINAPI *pNtGdiWidenPath)( HDC hdc ); + + /* Wine-specific functions */ + UINT (WINAPI *pGDIRealizePalette)( HDC hdc ); + HPALETTE (WINAPI *pGDISelectPalette)( HDC hdc, HPALETTE hpal, WORD bkg ); + DWORD_PTR (WINAPI *pGetDCHook)( HDC hdc, DCHOOKPROC *proc ); + BOOL (WINAPI *pMirrorRgn)( HWND hwnd, HRGN hrgn ); + BOOL (WINAPI *pSetDCHook)( HDC hdc, DCHOOKPROC proc, DWORD_PTR data ); + INT (WINAPI *pSetDIBits)( HDC hdc, HBITMAP hbitmap, UINT startscan, + UINT lines, const void *bits, const BITMAPINFO *info, + UINT coloruse ); + WORD (WINAPI *pSetHookFlags)( HDC hdc, WORD flags ); + BOOL (CDECL *get_brush_bitmap_info)( HBRUSH handle, BITMAPINFO *info, void *bits, UINT *usage ); + BOOL (CDECL *get_file_outline_text_metric)( const WCHAR *path, OUTLINETEXTMETRICW *otm ); + BOOL (CDECL *get_icm_profile)( HDC hdc, BOOL allow_default, DWORD *size, WCHAR *filename ); + const struct vulkan_funcs * (CDECL *get_vulkan_driver)( HDC hdc, UINT version ); + struct opengl_funcs * (CDECL *get_wgl_driver)( HDC hdc, UINT version ); + void (CDECL *make_gdi_object_system)( HGDIOBJ handle, BOOL set ); + void (CDECL *set_display_driver)( void *proc ); + void (CDECL *set_visible_region)( HDC hdc, HRGN hrgn, const RECT *vis_rect, const RECT *device_rect, + struct window_surface *surface ); +}; + +UINT WINAPI GDIRealizePalette( HDC hdc ); +HPALETTE WINAPI GDISelectPalette( HDC hdc, HPALETTE hpal, WORD wBkg ); + +extern BOOL CDECL get_brush_bitmap_info( HBRUSH handle, BITMAPINFO *info, void *bits, + UINT *usage ) DECLSPEC_HIDDEN; +extern BOOL CDECL get_icm_profile( HDC hdc, BOOL allow_default, DWORD *size, + WCHAR *filename ) DECLSPEC_HIDDEN; +extern BOOL CDECL get_file_outline_text_metric( const WCHAR *path, OUTLINETEXTMETRICW *otm ); + +BOOL wrappers_init(void) DECLSPEC_HIDDEN; + + static inline WCHAR *win32u_wcsrchr( const WCHAR *str, WCHAR ch ) { WCHAR *ret = NULL; @@ -128,4 +395,10 @@ static inline LONG win32u_wcstol( LPCWSTR s, LPWSTR *end, INT base ) #define wcsrchr(s,c) win32u_wcsrchr(s,c) #define wcstol(s,e,b) win32u_wcstol(s,e,b) +#define HeapAlloc RtlAllocateHeap +#define HeapFree RtlFreeHeap +#define HeapReAlloc RtlReAllocateHeap +#define EnterCriticalSection RtlEnterCriticalSection +#define LeaveCriticalSection RtlLeaveCriticalSection + #endif /* __WINE_WIN32U_PRIVATE */ diff --git a/dlls/gdi32/wrappers.c b/dlls/gdi32/wrappers.c index e6b1ddc12e1..e6e7985e482 100644 --- a/dlls/gdi32/wrappers.c +++ b/dlls/gdi32/wrappers.c @@ -20,7 +20,1018 @@ #include "gdi_private.h" #include "win32u_private.h" +#include "wine/debug.h" +WINE_DEFAULT_DEBUG_CHANNEL(gdi); + +static struct unix_funcs *unix_funcs; + +INT WINAPI NtGdiAbortDoc( HDC hdc ) +{ + return unix_funcs->pNtGdiAbortDoc( hdc ); +} + +BOOL WINAPI NtGdiAbortPath( HDC hdc ) +{ + return unix_funcs->pNtGdiAbortPath( hdc ); +} + +HANDLE WINAPI NtGdiAddFontMemResourceEx( void *ptr, DWORD size, void *dv, ULONG dv_size, + DWORD *count ) +{ + return unix_funcs->pNtGdiAddFontMemResourceEx( ptr, size, dv, dv_size, count ); +} + +INT WINAPI NtGdiAddFontResourceW( const WCHAR *str, ULONG size, ULONG files, DWORD flags, + DWORD tid, void *dv ) +{ + return unix_funcs->pNtGdiAddFontResourceW( str, size, files, flags, tid, dv ); +} + +BOOL WINAPI NtGdiAlphaBlend( HDC hdc_dst, int x_dst, int y_dst, int width_dst, int height_dst, + HDC hdc_src, int x_src, int y_src, int width_src, int height_src, + BLENDFUNCTION blend_function, HANDLE xform ) +{ + return unix_funcs->pNtGdiAlphaBlend( hdc_dst, x_dst, y_dst, width_dst, height_dst, hdc_src, + x_src, y_src, width_src, height_src, blend_function, xform ); +} + +BOOL WINAPI NtGdiAngleArc( HDC hdc, INT x, INT y, DWORD radius, FLOAT start_angle, FLOAT sweep_angle ) +{ + return unix_funcs->pNtGdiAngleArc( hdc, x, y, radius, start_angle, sweep_angle ); +} + +BOOL WINAPI NtGdiArcInternal( UINT type, HDC hdc, INT left, INT top, INT right, INT bottom, + INT xstart, INT ystart, INT xend, INT yend ) +{ + return unix_funcs->pNtGdiArcInternal( type, hdc, left, top, right, bottom, xstart, ystart, xend, yend ); +} + +BOOL WINAPI NtGdiBeginPath( HDC hdc ) +{ + return unix_funcs->pNtGdiBeginPath( hdc ); +} + +BOOL WINAPI NtGdiBitBlt( HDC hdc_dst, INT x_dst, INT y_dst, INT width, INT height, HDC hdc_src, + INT x_src, INT y_src, DWORD rop, DWORD bk_color, FLONG fl ) +{ + return unix_funcs->pNtGdiBitBlt( hdc_dst, x_dst, y_dst, width, height, hdc_src, x_src, y_src, + rop, bk_color, fl ); +} + +BOOL WINAPI NtGdiCloseFigure( HDC hdc ) +{ + return unix_funcs->pNtGdiCloseFigure( hdc ); +} + +INT WINAPI NtGdiCombineRgn( HRGN dest, HRGN src1, HRGN src2, INT mode ) +{ + return unix_funcs->pNtGdiCombineRgn( dest, src1, src2, mode ); +} + +BOOL WINAPI NtGdiComputeXformCoefficients( HDC hdc ) +{ + return unix_funcs->pNtGdiComputeXformCoefficients( hdc ); +} + +HBITMAP WINAPI NtGdiCreateBitmap( INT width, INT height, UINT planes, UINT bpp, const void *bits ) +{ + return unix_funcs->pNtGdiCreateBitmap( width, height, planes, bpp, bits ); +} + +HANDLE WINAPI NtGdiCreateClientObj( ULONG type ) +{ + return unix_funcs->pNtGdiCreateClientObj( type ); +} + +HBITMAP WINAPI NtGdiCreateCompatibleBitmap( HDC hdc, INT width, INT height ) +{ + return unix_funcs->pNtGdiCreateCompatibleBitmap( hdc, width, height ); +} + +HDC WINAPI NtGdiCreateCompatibleDC( HDC hdc ) +{ + return unix_funcs->pNtGdiCreateCompatibleDC( hdc ); +} + +HBRUSH WINAPI NtGdiCreateDIBBrush( const void *data, UINT coloruse, UINT size, + BOOL is_8x8, BOOL pen, const void *client ) +{ + return unix_funcs->pNtGdiCreateDIBBrush( data, coloruse, size, is_8x8, pen, client ); +} + +HBITMAP WINAPI NtGdiCreateDIBSection( HDC hdc, HANDLE section, DWORD offset, const BITMAPINFO *bmi, + UINT usage, UINT header_size, ULONG flags, + ULONG_PTR color_space, void **bits ) +{ + return unix_funcs->pNtGdiCreateDIBSection( hdc, section, offset, bmi, usage, header_size, flags, + color_space, bits ); +} + +HBITMAP WINAPI NtGdiCreateDIBitmapInternal( HDC hdc, INT width, INT height, DWORD init, + const void *bits, const BITMAPINFO *data, + UINT coloruse, UINT max_info, UINT max_bits, + ULONG flags, HANDLE xform ) +{ + return unix_funcs->pNtGdiCreateDIBitmapInternal( hdc, width, height, init, bits, data, + coloruse, max_info, max_bits, flags, xform ); +} + +HRGN WINAPI NtGdiCreateEllipticRgn( INT left, INT top, INT right, INT bottom ) +{ + return unix_funcs->pNtGdiCreateEllipticRgn( left, top, right, bottom ); +} + +HPALETTE WINAPI NtGdiCreateHalftonePalette( HDC hdc ) +{ + return unix_funcs->pNtGdiCreateHalftonePalette( hdc ); +} + +HBRUSH WINAPI NtGdiCreateHatchBrushInternal( INT style, COLORREF color, BOOL pen ) +{ + return unix_funcs->pNtGdiCreateHatchBrushInternal( style, color, pen ); +} + +HDC WINAPI NtGdiCreateMetafileDC( HDC hdc ) +{ + return unix_funcs->pNtGdiCreateMetafileDC( hdc ); +} + +HPALETTE WINAPI NtGdiCreatePaletteInternal( const LOGPALETTE *palette, UINT count ) +{ + return unix_funcs->pNtGdiCreatePaletteInternal( palette, count ); +} + +HBRUSH WINAPI NtGdiCreatePatternBrushInternal( HBITMAP hbitmap, BOOL pen, BOOL is_8x8 ) +{ + return unix_funcs->pNtGdiCreatePatternBrushInternal( hbitmap, pen, is_8x8 ); +} + +HPEN WINAPI NtGdiCreatePen( INT style, INT width, COLORREF color, HBRUSH brush ) +{ + return unix_funcs->pNtGdiCreatePen( style, width, color, brush ); +} + +HRGN WINAPI NtGdiCreateRectRgn( INT left, INT top, INT right, INT bottom ) +{ + return unix_funcs->pNtGdiCreateRectRgn( left, top, right, bottom ); +} + +HRGN WINAPI NtGdiCreateRoundRectRgn( INT left, INT top, INT right, INT bottom, + INT ellipse_width, INT ellipse_height ) +{ + return unix_funcs->pNtGdiCreateRoundRectRgn( left, top, right, bottom, ellipse_width, ellipse_height ); +} + +HBRUSH WINAPI NtGdiCreateSolidBrush( COLORREF color, HBRUSH brush ) +{ + return unix_funcs->pNtGdiCreateSolidBrush( color, brush ); +} + +BOOL WINAPI NtGdiDeleteClientObj( HGDIOBJ obj ) +{ + return unix_funcs->pNtGdiDeleteClientObj( obj ); +} + +BOOL WINAPI NtGdiDeleteObjectApp( HGDIOBJ obj ) +{ + return unix_funcs->pNtGdiDeleteObjectApp( obj ); +} + +INT WINAPI NtGdiDescribePixelFormat( HDC hdc, INT format, UINT size, PIXELFORMATDESCRIPTOR *descr ) +{ + return unix_funcs->pNtGdiDescribePixelFormat( hdc, format, size, descr ); +} + +LONG WINAPI NtGdiDoPalette( HGDIOBJ handle, WORD start, WORD count, void *entries, + DWORD func, BOOL inbound ) +{ + return unix_funcs->pNtGdiDoPalette( handle, start, count, entries, func, inbound ); +} + +BOOL WINAPI NtGdiDrawStream( HDC hdc, ULONG in, void *pvin ) +{ + return unix_funcs->pNtGdiDrawStream( hdc, in, pvin ); +} + +BOOL WINAPI NtGdiEllipse( HDC hdc, INT left, INT top, INT right, INT bottom ) +{ + return unix_funcs->pNtGdiEllipse( hdc, left, top, right, bottom ); +} + +INT WINAPI NtGdiEndDoc( HDC hdc ) +{ + return unix_funcs->pNtGdiEndDoc( hdc ); +} + +BOOL WINAPI NtGdiEndPath( HDC hdc ) +{ + return unix_funcs->pNtGdiEndPath( hdc ); +} + +INT WINAPI NtGdiEndPage( HDC hdc ) +{ + return unix_funcs->pNtGdiEndPage( hdc ); +} + +BOOL WINAPI NtGdiEnumFonts( HDC hdc, ULONG type, ULONG win32_compat, ULONG face_name_len, + const WCHAR *face_name, ULONG charset, ULONG *count, void *buf ) +{ + return unix_funcs->pNtGdiEnumFonts( hdc, type, win32_compat, face_name_len, face_name, + charset, count, buf ); +} + +BOOL WINAPI NtGdiEqualRgn( HRGN hrgn1, HRGN hrgn2 ) +{ + return unix_funcs->pNtGdiEqualRgn( hrgn1, hrgn2 ); +} + +INT WINAPI NtGdiExcludeClipRect( HDC hdc, INT left, INT top, INT right, INT bottom ) +{ + return unix_funcs->pNtGdiExcludeClipRect( hdc, left, top, right, bottom ); +} + +HPEN WINAPI NtGdiExtCreatePen( DWORD style, DWORD width, ULONG brush_style, ULONG color, + ULONG_PTR client_hatch, ULONG_PTR hatch, DWORD style_count, + const DWORD *style_bits, ULONG dib_size, BOOL old_style, + HBRUSH brush ) +{ + return unix_funcs->pNtGdiExtCreatePen( style, width, brush_style, color, client_hatch, hatch, style_count, + style_bits, dib_size, old_style, brush ); +} + +INT WINAPI NtGdiExtEscape( HDC hdc, WCHAR *driver, INT driver_id, INT escape, INT input_size, + const char *input, INT output_size, char *output ) +{ + return unix_funcs->pNtGdiExtEscape( hdc, driver, driver_id, escape, input_size, input, + output_size, output ); +} + +BOOL WINAPI NtGdiExtFloodFill( HDC hdc, INT x, INT y, COLORREF color, UINT type ) +{ + return unix_funcs->pNtGdiExtFloodFill( hdc, x, y, color, type ); +} + +BOOL WINAPI NtGdiExtTextOutW( HDC hdc, INT x, INT y, UINT flags, const RECT *rect, + const WCHAR *str, UINT count, const INT *dx, DWORD cp ) +{ + return unix_funcs->pNtGdiExtTextOutW( hdc, x, y, flags, rect, str, count, dx, cp ); +} + +HRGN WINAPI NtGdiExtCreateRegion( const XFORM *xform, DWORD count, const RGNDATA *data ) +{ + return unix_funcs->pNtGdiExtCreateRegion( xform, count, data ); +} + +INT WINAPI NtGdiExtGetObjectW( HGDIOBJ handle, INT count, void *buffer ) +{ + return unix_funcs->pNtGdiExtGetObjectW( handle, count, buffer ); +} + +INT WINAPI NtGdiExtSelectClipRgn( HDC hdc, HRGN region, INT mode ) +{ + return unix_funcs->pNtGdiExtSelectClipRgn( hdc, region, mode ); +} + +BOOL WINAPI NtGdiFillPath( HDC hdc ) +{ + return unix_funcs->pNtGdiFillPath( hdc ); +} + +BOOL WINAPI NtGdiFillRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush ) +{ + return unix_funcs->pNtGdiFillRgn( hdc, hrgn, hbrush ); +} + +BOOL WINAPI NtGdiFlattenPath( HDC hdc ) +{ + return unix_funcs->pNtGdiFlattenPath( hdc ); +} + +BOOL WINAPI NtGdiFontIsLinked( HDC hdc ) +{ + return unix_funcs->pNtGdiFontIsLinked( hdc ); +} + +BOOL WINAPI NtGdiFlush(void) +{ + return unix_funcs->pNtGdiFlush(); +} + +BOOL WINAPI NtGdiFrameRgn( HDC hdc, HRGN hrgn, HBRUSH brush, INT width, INT height ) +{ + return unix_funcs->pNtGdiFrameRgn( hdc, hrgn, brush, width, height ); +} + +BOOL WINAPI NtGdiGetAndSetDCDword( HDC hdc, UINT method, DWORD value, DWORD *result ) +{ + return unix_funcs->pNtGdiGetAndSetDCDword( hdc, method, value, result ); +} + +INT WINAPI NtGdiGetAppClipBox( HDC hdc, RECT *rect ) +{ + return unix_funcs->pNtGdiGetAppClipBox( hdc, rect ); +} + +LONG WINAPI NtGdiGetBitmapBits( HBITMAP bitmap, LONG count, void *bits ) +{ + return unix_funcs->pNtGdiGetBitmapBits( bitmap, count, bits ); +} + +BOOL WINAPI NtGdiGetBitmapDimension( HBITMAP bitmap, SIZE *size ) +{ + return unix_funcs->pNtGdiGetBitmapDimension( bitmap, size ); +} + +UINT WINAPI NtGdiGetBoundsRect( HDC hdc, RECT *rect, UINT flags ) +{ + return unix_funcs->pNtGdiGetBoundsRect( hdc, rect, flags ); +} + +BOOL WINAPI NtGdiGetCharABCWidthsW( HDC hdc, UINT first, UINT last, WCHAR *chars, + ULONG flags, void *buffer ) +{ + return unix_funcs->pNtGdiGetCharABCWidthsW( hdc, first, last, chars, flags, buffer ); +} + +BOOL WINAPI NtGdiGetCharWidthW( HDC hdc, UINT first_char, UINT last_char, WCHAR *chars, + ULONG flags, void *buffer ) +{ + return unix_funcs->pNtGdiGetCharWidthW( hdc, first_char, last_char, chars, flags, buffer ); +} + +BOOL WINAPI NtGdiGetCharWidthInfo( HDC hdc, struct char_width_info *info ) +{ + return unix_funcs->pNtGdiGetCharWidthInfo( hdc, info ); +} + +BOOL WINAPI NtGdiGetColorAdjustment( HDC hdc, COLORADJUSTMENT *ca ) +{ + return unix_funcs->pNtGdiGetColorAdjustment( hdc, ca ); +} + +HANDLE WINAPI NtGdiGetDCObject( HDC hdc, UINT type ) +{ + return unix_funcs->pNtGdiGetDCObject( hdc, type ); +} + +INT WINAPI NtGdiGetDIBitsInternal( HDC hdc, HBITMAP hbitmap, UINT startscan, UINT lines, + void *bits, BITMAPINFO *info, UINT coloruse, + UINT max_bits, UINT max_info ) +{ + return unix_funcs->pNtGdiGetDIBitsInternal( hdc, hbitmap, startscan, lines, bits, info, coloruse, + max_bits, max_info ); +} + +INT WINAPI NtGdiGetDeviceCaps( HDC hdc, INT cap ) +{ + return unix_funcs->pNtGdiGetDeviceCaps( hdc, cap ); +} + +BOOL WINAPI NtGdiGetDeviceGammaRamp( HDC hdc, void *ptr ) +{ + return unix_funcs->pNtGdiGetDeviceGammaRamp( hdc, ptr ); +} + +DWORD WINAPI NtGdiGetFontData( HDC hdc, DWORD table, DWORD offset, void *buffer, DWORD length ) +{ + return unix_funcs->pNtGdiGetFontData( hdc, table, offset, buffer, length ); +} + +BOOL WINAPI NtGdiGetFontFileData( DWORD instance_id, DWORD file_index, UINT64 *offset, + void *buff, DWORD buff_size ) +{ + return unix_funcs->pNtGdiGetFontFileData( instance_id, file_index, offset, buff, buff_size ); +} + +BOOL WINAPI NtGdiGetFontFileInfo( DWORD instance_id, DWORD file_index, struct font_fileinfo *info, + SIZE_T size, SIZE_T *needed ) +{ + return unix_funcs->pNtGdiGetFontFileInfo( instance_id, file_index, info, size, needed ); +} + +DWORD WINAPI NtGdiGetFontUnicodeRanges( HDC hdc, GLYPHSET *lpgs ) +{ + return unix_funcs->pNtGdiGetFontUnicodeRanges( hdc, lpgs ); +} + +DWORD WINAPI NtGdiGetGlyphIndicesW( HDC hdc, const WCHAR *str, INT count, + WORD *indices, DWORD flags ) +{ + return unix_funcs->pNtGdiGetGlyphIndicesW( hdc, str, count, indices, flags ); +} + +DWORD WINAPI NtGdiGetGlyphOutline( HDC hdc, UINT ch, UINT format, GLYPHMETRICS *metrics, + DWORD size, void *buffer, const MAT2 *mat2, + BOOL ignore_rotation ) +{ + return unix_funcs->pNtGdiGetGlyphOutline( hdc, ch, format, metrics, size, buffer, mat2, ignore_rotation ); +} + +DWORD WINAPI NtGdiGetKerningPairs( HDC hdc, DWORD count, KERNINGPAIR *kern_pair ) +{ + return unix_funcs->pNtGdiGetKerningPairs( hdc, count, kern_pair ); +} + +COLORREF WINAPI NtGdiGetNearestColor( HDC hdc, COLORREF color ) +{ + return unix_funcs->pNtGdiGetNearestColor( hdc, color ); +} + +UINT WINAPI NtGdiGetNearestPaletteIndex( HPALETTE hpalette, COLORREF color ) +{ + return unix_funcs->pNtGdiGetNearestPaletteIndex( hpalette, color ); +} + +UINT WINAPI NtGdiGetOutlineTextMetricsInternalW( HDC hdc, UINT cbData, + OUTLINETEXTMETRICW *otm, ULONG opts ) +{ + return unix_funcs->pNtGdiGetOutlineTextMetricsInternalW( hdc, cbData, otm, opts ); +} + +INT WINAPI NtGdiGetPath( HDC hdc, POINT *points, BYTE *types, INT size ) +{ + return unix_funcs->pNtGdiGetPath( hdc, points, types, size ); +} + +COLORREF WINAPI NtGdiGetPixel( HDC hdc, INT x, INT y ) +{ + return unix_funcs->pNtGdiGetPixel( hdc, x, y ); +} + +INT WINAPI NtGdiGetRandomRgn( HDC hdc, HRGN region, INT code ) +{ + return unix_funcs->pNtGdiGetRandomRgn( hdc, region, code ); +} + +BOOL WINAPI NtGdiGetRasterizerCaps( RASTERIZER_STATUS *status, UINT size ) +{ + return unix_funcs->pNtGdiGetRasterizerCaps( status, size ); +} + +BOOL WINAPI NtGdiGetRealizationInfo( HDC hdc, struct font_realization_info *info ) +{ + return unix_funcs->pNtGdiGetRealizationInfo( hdc, info ); +} + +DWORD WINAPI NtGdiGetRegionData( HRGN hrgn, DWORD count, RGNDATA *data ) +{ + return unix_funcs->pNtGdiGetRegionData( hrgn, count, data ); +} + +INT WINAPI NtGdiGetRgnBox( HRGN hrgn, RECT *rect ) +{ + return unix_funcs->pNtGdiGetRgnBox( hrgn, rect ); +} + +DWORD WINAPI NtGdiGetSpoolMessage( void *ptr1, DWORD data2, void *ptr3, DWORD data4 ) +{ + return unix_funcs->pNtGdiGetSpoolMessage( ptr1, data2, ptr3, data4 ); +} + +UINT WINAPI NtGdiGetSystemPaletteUse( HDC hdc ) +{ + return unix_funcs->pNtGdiGetSystemPaletteUse( hdc ); +} + +UINT WINAPI NtGdiGetTextCharsetInfo( HDC hdc, FONTSIGNATURE *fs, DWORD flags ) +{ + return unix_funcs->pNtGdiGetTextCharsetInfo( hdc, fs, flags ); +} + +BOOL WINAPI NtGdiGetTextExtentExW( HDC hdc, const WCHAR *str, INT count, INT max_ext, + INT *nfit, INT *dxs, SIZE *size, UINT flags ) +{ + return unix_funcs->pNtGdiGetTextExtentExW( hdc, str, count, max_ext, nfit, dxs, size, flags ); +} + +INT WINAPI NtGdiGetTextFaceW( HDC hdc, INT count, WCHAR *name, BOOL alias_name ) +{ + return unix_funcs->pNtGdiGetTextFaceW( hdc, count, name, alias_name ); +} + +BOOL WINAPI NtGdiGetTextMetricsW( HDC hdc, TEXTMETRICW *metrics, ULONG flags ) +{ + return unix_funcs->pNtGdiGetTextMetricsW( hdc, metrics, flags ); +} + +BOOL WINAPI NtGdiGetTransform( HDC hdc, DWORD which, XFORM *xform ) +{ + return unix_funcs->pNtGdiGetTransform( hdc, which, xform ); +} + +BOOL WINAPI NtGdiGradientFill( HDC hdc, TRIVERTEX *vert_array, ULONG nvert, + void *grad_array, ULONG ngrad, ULONG mode ) +{ + return unix_funcs->pNtGdiGradientFill( hdc, vert_array, nvert, grad_array, ngrad, mode ); +} + +HFONT WINAPI NtGdiHfontCreate( const ENUMLOGFONTEXDVW *enumex, ULONG unk2, ULONG unk3, + ULONG unk4, void *data ) +{ + return unix_funcs->pNtGdiHfontCreate( enumex, unk2, unk3, unk4, data ); +} + +DWORD WINAPI NtGdiInitSpool(void) +{ + return unix_funcs->pNtGdiInitSpool(); +} + +INT WINAPI NtGdiIntersectClipRect( HDC hdc, INT left, INT top, INT right, INT bottom ) +{ + return unix_funcs->pNtGdiIntersectClipRect( hdc, left, top, right, bottom ); +} + +BOOL WINAPI NtGdiInvertRgn( HDC hdc, HRGN hrgn ) +{ + return unix_funcs->pNtGdiInvertRgn( hdc, hrgn ); +} + +BOOL WINAPI NtGdiLineTo( HDC hdc, INT x, INT y ) +{ + return unix_funcs->pNtGdiLineTo( hdc, x, y ); +} + +BOOL WINAPI NtGdiMaskBlt( HDC hdc, INT x_dst, INT y_dst, INT width_dst, INT height_dst, + HDC hdc_src, INT x_src, INT y_src, HBITMAP mask, + INT x_mask, INT y_mask, DWORD rop, DWORD bk_color ) +{ + return unix_funcs->pNtGdiMaskBlt( hdc, x_dst, y_dst, width_dst, height_dst, hdc_src, + x_src, y_src, mask, x_mask, y_mask, rop, bk_color ); +} + +BOOL WINAPI NtGdiModifyWorldTransform( HDC hdc, const XFORM *xform, DWORD mode ) +{ + return unix_funcs->pNtGdiModifyWorldTransform( hdc, xform, mode ); +} + +BOOL WINAPI NtGdiMoveTo( HDC hdc, INT x, INT y, POINT *pt ) +{ + return unix_funcs->pNtGdiMoveTo( hdc, x, y, pt ); +} + +INT WINAPI NtGdiOffsetClipRgn( HDC hdc, INT x, INT y ) +{ + return unix_funcs->pNtGdiOffsetClipRgn( hdc, x, y ); +} + +INT WINAPI NtGdiOffsetRgn( HRGN hrgn, INT x, INT y ) +{ + return unix_funcs->pNtGdiOffsetRgn( hrgn, x, y ); +} + +HDC WINAPI NtGdiOpenDCW( UNICODE_STRING *device, const DEVMODEW *devmode, + UNICODE_STRING *output, ULONG type, BOOL is_display, + HANDLE hspool, DRIVER_INFO_2W *driver_info, void *pdev ) +{ + return unix_funcs->pNtGdiOpenDCW( device, devmode, output, type, is_display, + hspool, driver_info, pdev ); +} + +BOOL WINAPI NtGdiPatBlt( HDC hdc, INT left, INT top, INT width, INT height, DWORD rop ) +{ + return unix_funcs->pNtGdiPatBlt( hdc, left, top, width, height, rop ); +} + +HRGN WINAPI NtGdiPathToRegion( HDC hdc ) +{ + return unix_funcs->pNtGdiPathToRegion( hdc ); +} + +BOOL WINAPI NtGdiPlgBlt( HDC hdc, const POINT *point, HDC hdc_src, INT x_src, INT y_src, + INT width, INT height, HBITMAP mask, INT x_mask, INT y_mask, + DWORD bk_color ) +{ + return unix_funcs->pNtGdiPlgBlt( hdc, point, hdc_src, x_src, y_src, width, height, mask, + x_mask, y_mask, bk_color ); +} + +BOOL WINAPI NtGdiPolyDraw( HDC hdc, const POINT *points, const BYTE *types, DWORD count ) +{ + return unix_funcs->pNtGdiPolyDraw( hdc, points, types, count ); +} + +ULONG WINAPI NtGdiPolyPolyDraw( HDC hdc, const POINT *points, const UINT *counts, + DWORD count, UINT function ) +{ + return unix_funcs->pNtGdiPolyPolyDraw( hdc, points, counts, count, function ); +} + +BOOL WINAPI NtGdiPtInRegion( HRGN hrgn, INT x, INT y ) +{ + return unix_funcs->pNtGdiPtInRegion( hrgn, x, y ); +} + +BOOL WINAPI NtGdiPtVisible( HDC hdc, INT x, INT y ) +{ + return unix_funcs->pNtGdiPtVisible( hdc, x, y ); +} + +BOOL WINAPI NtGdiRectInRegion( HRGN hrgn, const RECT *rect ) +{ + return unix_funcs->pNtGdiRectInRegion( hrgn, rect ); +} + +BOOL WINAPI NtGdiRectVisible( HDC hdc, const RECT *rect ) +{ + return unix_funcs->pNtGdiRectVisible( hdc, rect ); +} + +BOOL WINAPI NtGdiRectangle( HDC hdc, INT left, INT top, INT right, INT bottom ) +{ + return unix_funcs->pNtGdiRectangle( hdc, left, top, right, bottom ); +} + +BOOL WINAPI NtGdiRemoveFontMemResourceEx( HANDLE handle ) +{ + return unix_funcs->pNtGdiRemoveFontMemResourceEx( handle ); +} + +BOOL WINAPI NtGdiRemoveFontResourceW( const WCHAR *str, ULONG size, ULONG files, + DWORD flags, DWORD tid, void *dv ) +{ + return unix_funcs->pNtGdiRemoveFontResourceW( str, size, files, flags, tid, dv ); +} + +BOOL WINAPI NtGdiResetDC( HDC hdc, const DEVMODEW *devmode, BOOL *banding, + DRIVER_INFO_2W *driver_info, void *dev ) +{ + return unix_funcs->pNtGdiResetDC( hdc, devmode, banding, driver_info, dev ); +} + +BOOL WINAPI NtGdiResizePalette( HPALETTE palette, UINT count ) +{ + return unix_funcs->pNtGdiResizePalette( palette, count ); +} + +BOOL WINAPI NtGdiRestoreDC( HDC hdc, INT level ) +{ + return unix_funcs->pNtGdiRestoreDC( hdc, level ); +} + +BOOL WINAPI NtGdiRoundRect( HDC hdc, INT left, INT top, INT right, + INT bottom, INT ell_width, INT ell_height ) +{ + return unix_funcs->pNtGdiRoundRect( hdc, left, top, right, bottom, ell_width, ell_height ); +} + +INT WINAPI NtGdiSaveDC( HDC hdc ) +{ + return unix_funcs->pNtGdiSaveDC( hdc ); +} + +BOOL WINAPI NtGdiScaleViewportExtEx( HDC hdc, INT x_num, INT x_denom, + INT y_num, INT y_denom, SIZE *size ) +{ + return unix_funcs->pNtGdiScaleViewportExtEx( hdc, x_num, x_denom, y_num, y_denom, size ); +} + +BOOL WINAPI NtGdiScaleWindowExtEx( HDC hdc, INT x_num, INT x_denom, + INT y_num, INT y_denom, SIZE *size ) +{ + return unix_funcs->pNtGdiScaleWindowExtEx( hdc, x_num, x_denom, y_num, y_denom, size ); +} + +HGDIOBJ WINAPI NtGdiSelectBitmap( HDC hdc, HGDIOBJ handle ) +{ + return unix_funcs->pNtGdiSelectBitmap( hdc, handle ); +} + +HGDIOBJ WINAPI NtGdiSelectBrush( HDC hdc, HGDIOBJ handle ) +{ + return unix_funcs->pNtGdiSelectBrush( hdc, handle ); +} + +BOOL WINAPI NtGdiSelectClipPath( HDC hdc, INT mode ) +{ + return unix_funcs->pNtGdiSelectClipPath( hdc, mode ); +} + +HGDIOBJ WINAPI NtGdiSelectFont( HDC hdc, HGDIOBJ handle ) +{ + return unix_funcs->pNtGdiSelectFont( hdc, handle ); +} + +HGDIOBJ WINAPI NtGdiSelectPen( HDC hdc, HGDIOBJ handle ) +{ + return unix_funcs->pNtGdiSelectPen( hdc, handle ); +} + +LONG WINAPI NtGdiSetBitmapBits( HBITMAP hbitmap, LONG count, const void *bits ) +{ + return unix_funcs->pNtGdiSetBitmapBits( hbitmap, count, bits ); +} + +BOOL WINAPI NtGdiSetBitmapDimension( HBITMAP hbitmap, INT x, INT y, SIZE *prev_size ) +{ + return unix_funcs->pNtGdiSetBitmapDimension( hbitmap, x, y, prev_size ); +} + +BOOL WINAPI NtGdiSetBrushOrg( HDC hdc, INT x, INT y, POINT *prev_org ) +{ + return unix_funcs->pNtGdiSetBrushOrg( hdc, x, y, prev_org ); +} + +UINT WINAPI NtGdiSetBoundsRect( HDC hdc, const RECT *rect, UINT flags ) +{ + return unix_funcs->pNtGdiSetBoundsRect( hdc, rect, flags ); +} + +BOOL WINAPI NtGdiSetColorAdjustment( HDC hdc, const COLORADJUSTMENT *ca ) +{ + return unix_funcs->pNtGdiSetColorAdjustment( hdc, ca ); +} + +INT WINAPI NtGdiSetDIBitsToDeviceInternal( HDC hdc, INT x_dst, INT y_dst, DWORD cx, + DWORD cy, INT x_src, INT y_src, UINT startscan, + UINT lines, const void *bits, const BITMAPINFO *bmi, + UINT coloruse, UINT max_bits, UINT max_info, + BOOL xform_coords, HANDLE xform ) +{ + return unix_funcs->pNtGdiSetDIBitsToDeviceInternal( hdc, x_dst, y_dst, cx, cy, x_src, y_src, + startscan, lines, bits, bmi, coloruse, + max_bits, max_info, xform_coords, xform ); +} + +BOOL WINAPI NtGdiSetDeviceGammaRamp( HDC hdc, void *ptr ) +{ + return unix_funcs->pNtGdiSetDeviceGammaRamp( hdc, ptr ); +} + +DWORD WINAPI NtGdiSetLayout( HDC hdc, LONG wox, DWORD layout ) +{ + return unix_funcs->pNtGdiSetLayout( hdc, wox, layout ); +} + +BOOL WINAPI NtGdiSetMagicColors( HDC hdc, DWORD magic, ULONG index ) +{ + return unix_funcs->pNtGdiSetMagicColors( hdc, magic, index ); +} + +INT WINAPI NtGdiSetMetaRgn( HDC hdc ) +{ + return unix_funcs->pNtGdiSetMetaRgn( hdc ); +} + +COLORREF WINAPI NtGdiSetPixel( HDC hdc, INT x, INT y, COLORREF color ) +{ + return unix_funcs->pNtGdiSetPixel( hdc, x, y, color ); +} + +BOOL WINAPI NtGdiSetPixelFormat( HDC hdc, INT format ) +{ + return unix_funcs->pNtGdiSetPixelFormat( hdc, format ); +} + +BOOL WINAPI NtGdiSetRectRgn( HRGN hrgn, INT left, INT top, INT right, INT bottom ) +{ + return unix_funcs->pNtGdiSetRectRgn( hrgn, left, top, right, bottom ); +} + +UINT WINAPI NtGdiSetSystemPaletteUse( HDC hdc, UINT use ) +{ + return unix_funcs->pNtGdiSetSystemPaletteUse( hdc, use ); +} + +BOOL WINAPI NtGdiSetTextJustification( HDC hdc, INT extra, INT breaks ) +{ + return unix_funcs->pNtGdiSetTextJustification( hdc, extra, breaks ); +} + +BOOL WINAPI NtGdiSetVirtualResolution( HDC hdc, DWORD horz_res, DWORD vert_res, + DWORD horz_size, DWORD vert_size ) +{ + return unix_funcs->pNtGdiSetVirtualResolution( hdc, horz_res, vert_res, horz_size, vert_size ); +} + +INT WINAPI NtGdiStartDoc( HDC hdc, const DOCINFOW *doc, BOOL *banding, INT job ) +{ + return unix_funcs->pNtGdiStartDoc( hdc, doc, banding, job ); +} + +INT WINAPI NtGdiStartPage( HDC hdc ) +{ + return unix_funcs->pNtGdiStartPage( hdc ); +} + +BOOL WINAPI NtGdiStretchBlt( HDC hdc, INT x_dst, INT y_dst, INT width_dst, INT height_dst, + HDC hdc_src, INT x_src, INT y_src, INT width_src, INT height_src, + DWORD rop, COLORREF bk_color ) +{ + return unix_funcs->pNtGdiStretchBlt( hdc, x_dst, y_dst, width_dst, height_dst, hdc_src, + x_src, y_src, width_src, height_src, rop, bk_color ); +} + +INT WINAPI NtGdiStretchDIBitsInternal( HDC hdc, INT x_dst, INT y_dst, INT width_dst, + INT height_dst, INT x_src, INT y_src, INT width_src, + INT height_src, const void *bits, const BITMAPINFO *bmi, + UINT coloruse, DWORD rop, UINT max_info, UINT max_bits, + HANDLE xform ) +{ + return unix_funcs->pNtGdiStretchDIBitsInternal( hdc, x_dst, y_dst, width_dst, height_dst, + x_src, y_src, width_src, height_src, bits, bmi, + coloruse, rop, max_info, max_bits, xform ); +} + +BOOL WINAPI NtGdiStrokeAndFillPath( HDC hdc ) +{ + return unix_funcs->pNtGdiStrokeAndFillPath( hdc ); +} + +BOOL WINAPI NtGdiStrokePath( HDC hdc ) +{ + return unix_funcs->pNtGdiStrokePath( hdc ); +} + +BOOL WINAPI NtGdiSwapBuffers( HDC hdc ) +{ + return unix_funcs->pNtGdiSwapBuffers( hdc ); +} + +BOOL WINAPI NtGdiTransparentBlt( HDC hdc, int x_dst, int y_dst, int width_dst, int height_dst, + HDC hdc_src, int x_src, int y_src, int width_src, int height_src, + UINT color ) +{ + return unix_funcs->pNtGdiTransparentBlt( hdc, x_dst, y_dst, width_dst, height_dst, hdc_src, + x_src, y_src, width_src, height_src, color ); +} + +BOOL WINAPI NtGdiTransformPoints( HDC hdc, const POINT *points_in, POINT *points_out, + INT count, UINT mode ) +{ + return unix_funcs->pNtGdiTransformPoints( hdc, points_in, points_out, count, mode ); +} + +BOOL WINAPI NtGdiUnrealizeObject( HGDIOBJ obj ) +{ + return unix_funcs->pNtGdiUnrealizeObject( obj ); +} + +BOOL WINAPI NtGdiUpdateColors( HDC hdc ) +{ + return unix_funcs->pNtGdiUpdateColors( hdc ); +} + +BOOL WINAPI NtGdiWidenPath( HDC hdc ) +{ + return unix_funcs->pNtGdiWidenPath( hdc ); +} + +NTSTATUS WINAPI NtGdiDdDDICheckVidPnExclusiveOwnership( const D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *desc ) +{ + return unix_funcs->pNtGdiDdDDICheckVidPnExclusiveOwnership( desc ); +} + +NTSTATUS WINAPI NtGdiDdDDICloseAdapter( const D3DKMT_CLOSEADAPTER *desc ) +{ + return unix_funcs->pNtGdiDdDDICloseAdapter( desc ); +} + +NTSTATUS WINAPI NtGdiDdDDICreateDCFromMemory( D3DKMT_CREATEDCFROMMEMORY *desc ) +{ + return unix_funcs->pNtGdiDdDDICreateDCFromMemory( desc ); +} + +NTSTATUS WINAPI NtGdiDdDDICreateDevice( D3DKMT_CREATEDEVICE *desc ) +{ + return unix_funcs->pNtGdiDdDDICreateDevice( desc ); +} + +NTSTATUS WINAPI NtGdiDdDDIDestroyDCFromMemory( const D3DKMT_DESTROYDCFROMMEMORY *desc ) +{ + return unix_funcs->pNtGdiDdDDIDestroyDCFromMemory( desc ); +} + +NTSTATUS WINAPI NtGdiDdDDIDestroyDevice( const D3DKMT_DESTROYDEVICE *desc ) +{ + return unix_funcs->pNtGdiDdDDIDestroyDevice( desc ); +} + +NTSTATUS WINAPI NtGdiDdDDIEscape( const D3DKMT_ESCAPE *desc ) +{ + return unix_funcs->pNtGdiDdDDIEscape( desc ); +} + +NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromDeviceName( D3DKMT_OPENADAPTERFROMDEVICENAME *desc ) +{ + return unix_funcs->pNtGdiDdDDIOpenAdapterFromDeviceName( desc ); +} + +NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromHdc( D3DKMT_OPENADAPTERFROMHDC *desc ) +{ + return unix_funcs->pNtGdiDdDDIOpenAdapterFromHdc( desc ); +} + +NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromLuid( D3DKMT_OPENADAPTERFROMLUID *desc ) +{ + return unix_funcs->pNtGdiDdDDIOpenAdapterFromLuid( desc ); +} + +NTSTATUS WINAPI NtGdiDdDDIQueryStatistics( D3DKMT_QUERYSTATISTICS *stats ) +{ + return unix_funcs->pNtGdiDdDDIQueryStatistics( stats ); +} + +NTSTATUS WINAPI NtGdiDdDDISetQueuedLimit( D3DKMT_SETQUEUEDLIMIT *desc ) +{ + return unix_funcs->pNtGdiDdDDISetQueuedLimit( desc ); +} + +NTSTATUS WINAPI NtGdiDdDDISetVidPnSourceOwner( const D3DKMT_SETVIDPNSOURCEOWNER *desc ) +{ + return unix_funcs->pNtGdiDdDDISetVidPnSourceOwner( desc ); +} + +UINT WINAPI GDIRealizePalette( HDC hdc ) +{ + return unix_funcs->pGDIRealizePalette( hdc ); +} + +HPALETTE WINAPI GDISelectPalette( HDC hdc, HPALETTE hpal, WORD bkg ) +{ + return unix_funcs->pGDISelectPalette( hdc, hpal, bkg ); +} + +DWORD_PTR WINAPI GetDCHook( HDC hdc, DCHOOKPROC *proc ) +{ + return unix_funcs->pGetDCHook( hdc, proc ); +} + +BOOL WINAPI SetDCHook( HDC hdc, DCHOOKPROC proc, DWORD_PTR data ) +{ + return unix_funcs->pSetDCHook( hdc, proc, data ); +} + +BOOL WINAPI MirrorRgn( HWND hwnd, HRGN hrgn ) +{ + return unix_funcs->pMirrorRgn( hwnd, hrgn ); +} + +INT WINAPI SetDIBits( HDC hdc, HBITMAP hbitmap, UINT startscan, + UINT lines, const void *bits, const BITMAPINFO *info, + UINT coloruse ) +{ + return unix_funcs->pSetDIBits( hdc, hbitmap, startscan, lines, bits, info, coloruse ); +} + +WORD WINAPI SetHookFlags( HDC hdc, WORD flags ) +{ + return unix_funcs->pSetHookFlags( hdc, flags ); +} + +BOOL CDECL get_icm_profile( HDC hdc, BOOL allow_default, DWORD *size, WCHAR *filename ) +{ + return unix_funcs->get_icm_profile( hdc, allow_default, size, filename ); +} + +void CDECL __wine_make_gdi_object_system( HGDIOBJ handle, BOOL set ) +{ + return unix_funcs->make_gdi_object_system( handle, set ); +} + +void CDECL __wine_set_visible_region( HDC hdc, HRGN hrgn, const RECT *vis_rect, const RECT *device_rect, + struct window_surface *surface ) +{ + return unix_funcs->set_visible_region( hdc, hrgn, vis_rect, device_rect, surface ); +} + +BOOL CDECL get_brush_bitmap_info( HBRUSH handle, BITMAPINFO *info, void *bits, UINT *usage ) +{ + return unix_funcs->get_brush_bitmap_info( handle, info, bits, usage ); +} + +BOOL CDECL get_file_outline_text_metric( const WCHAR *path, OUTLINETEXTMETRICW *otm ) +{ + return unix_funcs->get_file_outline_text_metric( path, otm ); +} + +const struct vulkan_funcs * CDECL __wine_get_vulkan_driver(HDC hdc, UINT version) +{ + return unix_funcs->get_vulkan_driver( hdc, version ); +} + +struct opengl_funcs * CDECL __wine_get_wgl_driver( HDC hdc, UINT version ) +{ + return unix_funcs->get_wgl_driver( hdc, version ); +} + +/*********************************************************************** + * __wine_set_display_driver (win32u.@) + */ +void CDECL __wine_set_display_driver( HMODULE module ) +{ + void *wine_get_gdi_driver; + + if (!module) return; + + wine_get_gdi_driver = (void *)GetProcAddress( module, "wine_get_gdi_driver" ); + if (!wine_get_gdi_driver) + { + ERR( "Could not create graphics driver %p\n", module ); + return; + } + unix_funcs->set_display_driver( wine_get_gdi_driver ); +} static void *get_user_proc( const char *name, BOOL force_load ) { @@ -124,7 +1135,7 @@ static HWND WINAPI call_WindowFromDC( HDC hdc ) return pWindowFromDC ? pWindowFromDC( hdc ) : NULL; } -static const struct user_callbacks callbacks = +static const struct user_callbacks user_callbacks = { call_GetDesktopWindow, call_GetDpiForSystem, @@ -138,4 +1149,7 @@ static const struct user_callbacks callbacks = call_WindowFromDC, }; -const struct user_callbacks *user_callbacks = &callbacks; +BOOL wrappers_init(void) +{ + return !__wine_init_unix_lib( gdi32_module, DLL_PROCESS_ATTACH, &user_callbacks, &unix_funcs ); +} diff --git a/tools/make_unicode b/tools/make_unicode index 4f060876b67..c5c804b678b 100755 --- a/tools/make_unicode +++ b/tools/make_unicode @@ -1757,9 +1757,9 @@ sub dump_arabic_shaping($) ################################################################ # dump the Vertical Orientation table -sub dump_vertical($) +sub dump_vertical($$) { - my $filename = shift; + my ($filename, $unix) = @_; my @vertical_table; my $INPUT = open_data_file( $UNIDATA, "VerticalOrientation.txt" ); @@ -1797,6 +1797,12 @@ sub dump_vertical($) print OUTPUT "/* Unicode Vertical Orientation */\n"; print OUTPUT "/* generated from $UNIDATA:VerticalOrientation.txt */\n"; print OUTPUT "/* DO NOT EDIT!! */\n\n"; + if ($unix) + { + print OUTPUT "#if 0\n"; + print OUTPUT "#pragma makedep unix\n"; + print OUTPUT "#endif\n\n"; + } print OUTPUT "#include \"windef.h\"\n\n"; dump_two_level_mapping( "vertical_orientation_table", $vertical_types{'R'}, 16, @vertical_table ); @@ -2822,8 +2828,8 @@ dump_linebreak( "dlls/gdi32/uniscribe/linebreak.c" ); dump_linebreak( "dlls/dwrite/linebreak.c" ); dump_scripts( "dlls/dwrite/scripts" ); dump_indic( "dlls/gdi32/uniscribe/indicsyllable.c" ); -dump_vertical( "dlls/gdi32/vertical.c" ); -dump_vertical( "dlls/wineps.drv/vertical.c" ); +dump_vertical( "dlls/gdi32/vertical.c", 1 ); +dump_vertical( "dlls/wineps.drv/vertical.c", 0 ); dump_intl_nls("nls/l_intl.nls"); dump_norm_table( "nls/normnfc.nls" ); dump_norm_table( "nls/normnfd.nls" );