gdi32: Move the Add/RemoveFontResource() implementation out of freetype.c.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
f3a75923a6
commit
047bf25223
|
@ -5293,21 +5293,99 @@ fail:
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int add_system_font_resource( const WCHAR *file, DWORD flags )
|
||||||
|
{
|
||||||
|
WCHAR path[MAX_PATH];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* try in %WINDIR%/fonts, needed for Fotobuch Designer */
|
||||||
|
get_fonts_win_dir_path( file, path );
|
||||||
|
EnterCriticalSection( &font_cs );
|
||||||
|
ret = font_funcs->add_font( path, flags );
|
||||||
|
LeaveCriticalSection( &font_cs );
|
||||||
|
/* try in datadir/fonts (or builddir/fonts), needed for Magic the Gathering Online */
|
||||||
|
if (!ret)
|
||||||
|
{
|
||||||
|
get_fonts_data_dir_path( file, path );
|
||||||
|
EnterCriticalSection( &font_cs );
|
||||||
|
ret = font_funcs->add_font( path, flags );
|
||||||
|
LeaveCriticalSection( &font_cs );
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL remove_system_font_resource( LPCWSTR file, DWORD flags )
|
||||||
|
{
|
||||||
|
WCHAR path[MAX_PATH];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
get_fonts_win_dir_path( file, path );
|
||||||
|
EnterCriticalSection( &font_cs );
|
||||||
|
ret = font_funcs->remove_font( path, flags );
|
||||||
|
LeaveCriticalSection( &font_cs );
|
||||||
|
if (!ret)
|
||||||
|
{
|
||||||
|
get_fonts_data_dir_path( file, path );
|
||||||
|
EnterCriticalSection( &font_cs );
|
||||||
|
ret = font_funcs->remove_font( path, flags );
|
||||||
|
LeaveCriticalSection( &font_cs );
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int add_font_resource( LPCWSTR file, DWORD flags )
|
||||||
|
{
|
||||||
|
WCHAR path[MAX_PATH];
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if (GetFullPathNameW( file, MAX_PATH, path, NULL ))
|
||||||
|
{
|
||||||
|
DWORD addfont_flags = ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_RESOURCE;
|
||||||
|
|
||||||
|
if (!(flags & FR_PRIVATE)) addfont_flags |= ADDFONT_ADD_TO_CACHE;
|
||||||
|
EnterCriticalSection( &font_cs );
|
||||||
|
ret = font_funcs->add_font( path, addfont_flags );
|
||||||
|
LeaveCriticalSection( &font_cs );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ret && !strchrW( file, '\\' ))
|
||||||
|
ret = add_system_font_resource( file, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_RESOURCE );
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL remove_font_resource( LPCWSTR file, DWORD flags )
|
||||||
|
{
|
||||||
|
WCHAR path[MAX_PATH];
|
||||||
|
BOOL ret = FALSE;
|
||||||
|
|
||||||
|
if (GetFullPathNameW( file, MAX_PATH, path, NULL ))
|
||||||
|
{
|
||||||
|
DWORD addfont_flags = ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_RESOURCE;
|
||||||
|
|
||||||
|
if (!(flags & FR_PRIVATE)) addfont_flags |= ADDFONT_ADD_TO_CACHE;
|
||||||
|
EnterCriticalSection( &font_cs );
|
||||||
|
ret = font_funcs->remove_font( path, addfont_flags );
|
||||||
|
LeaveCriticalSection( &font_cs );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ret && !strchrW( file, '\\' ))
|
||||||
|
ret = remove_system_font_resource( file, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_RESOURCE );
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* AddFontResourceExW (GDI32.@)
|
* AddFontResourceExW (GDI32.@)
|
||||||
*/
|
*/
|
||||||
INT WINAPI AddFontResourceExW( LPCWSTR str, DWORD fl, PVOID pdv )
|
INT WINAPI AddFontResourceExW( LPCWSTR str, DWORD flags, PVOID pdv )
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
WCHAR *filename;
|
WCHAR *filename;
|
||||||
BOOL hidden;
|
BOOL hidden;
|
||||||
|
|
||||||
if (!font_funcs) return 1;
|
if (!font_funcs) return 1;
|
||||||
EnterCriticalSection( &font_cs );
|
if (!(ret = add_font_resource( str, flags )))
|
||||||
ret = font_funcs->pAddFontResourceEx( str, fl, pdv );
|
|
||||||
LeaveCriticalSection( &font_cs );
|
|
||||||
|
|
||||||
if (!ret)
|
|
||||||
{
|
{
|
||||||
/* FreeType <2.3.5 has problems reading resources wrapped in PE files. */
|
/* FreeType <2.3.5 has problems reading resources wrapped in PE files. */
|
||||||
HMODULE hModule = LoadLibraryExW(str, NULL, LOAD_LIBRARY_AS_DATAFILE);
|
HMODULE hModule = LoadLibraryExW(str, NULL, LOAD_LIBRARY_AS_DATAFILE);
|
||||||
|
@ -5324,10 +5402,8 @@ INT WINAPI AddFontResourceExW( LPCWSTR str, DWORD fl, PVOID pdv )
|
||||||
}
|
}
|
||||||
else if ((filename = get_scalable_filename( str, &hidden )) != NULL)
|
else if ((filename = get_scalable_filename( str, &hidden )) != NULL)
|
||||||
{
|
{
|
||||||
if (hidden) fl |= FR_PRIVATE | FR_NOT_ENUM;
|
if (hidden) flags |= FR_PRIVATE | FR_NOT_ENUM;
|
||||||
EnterCriticalSection( &font_cs );
|
ret = add_font_resource( filename, flags );
|
||||||
ret = font_funcs->pAddFontResourceEx( filename, fl, pdv );
|
|
||||||
LeaveCriticalSection( &font_cs );
|
|
||||||
HeapFree( GetProcessHeap(), 0, filename );
|
HeapFree( GetProcessHeap(), 0, filename );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5411,7 +5487,7 @@ BOOL WINAPI RemoveFontResourceExA( LPCSTR str, DWORD fl, PVOID pdv )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* RemoveFontResourceExW (GDI32.@)
|
* RemoveFontResourceExW (GDI32.@)
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI RemoveFontResourceExW( LPCWSTR str, DWORD fl, PVOID pdv )
|
BOOL WINAPI RemoveFontResourceExW( LPCWSTR str, DWORD flags, PVOID pdv )
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
WCHAR *filename;
|
WCHAR *filename;
|
||||||
|
@ -5419,11 +5495,7 @@ BOOL WINAPI RemoveFontResourceExW( LPCWSTR str, DWORD fl, PVOID pdv )
|
||||||
|
|
||||||
if (!font_funcs) return TRUE;
|
if (!font_funcs) return TRUE;
|
||||||
|
|
||||||
EnterCriticalSection( &font_cs );
|
if (!(ret = remove_font_resource( str, flags )))
|
||||||
ret = font_funcs->pRemoveFontResourceEx( str, fl, pdv );
|
|
||||||
LeaveCriticalSection( &font_cs );
|
|
||||||
|
|
||||||
if (!ret)
|
|
||||||
{
|
{
|
||||||
/* FreeType <2.3.5 has problems reading resources wrapped in PE files. */
|
/* FreeType <2.3.5 has problems reading resources wrapped in PE files. */
|
||||||
HMODULE hModule = LoadLibraryExW(str, NULL, LOAD_LIBRARY_AS_DATAFILE);
|
HMODULE hModule = LoadLibraryExW(str, NULL, LOAD_LIBRARY_AS_DATAFILE);
|
||||||
|
@ -5434,10 +5506,8 @@ BOOL WINAPI RemoveFontResourceExW( LPCWSTR str, DWORD fl, PVOID pdv )
|
||||||
}
|
}
|
||||||
else if ((filename = get_scalable_filename( str, &hidden )) != NULL)
|
else if ((filename = get_scalable_filename( str, &hidden )) != NULL)
|
||||||
{
|
{
|
||||||
if (hidden) fl |= FR_PRIVATE | FR_NOT_ENUM;
|
if (hidden) flags |= FR_PRIVATE | FR_NOT_ENUM;
|
||||||
EnterCriticalSection( &font_cs );
|
ret = remove_font_resource( filename, flags );
|
||||||
ret = font_funcs->pRemoveFontResourceEx( filename, fl, pdv );
|
|
||||||
LeaveCriticalSection( &font_cs );
|
|
||||||
HeapFree( GetProcessHeap(), 0, filename );
|
HeapFree( GetProcessHeap(), 0, filename );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -272,13 +272,6 @@ typedef struct tagFace {
|
||||||
|
|
||||||
#define FS_DBCS_MASK (FS_JISJAPAN|FS_CHINESESIMP|FS_WANSUNG|FS_CHINESETRAD|FS_JOHAB)
|
#define FS_DBCS_MASK (FS_JISJAPAN|FS_CHINESESIMP|FS_WANSUNG|FS_CHINESETRAD|FS_JOHAB)
|
||||||
|
|
||||||
#define ADDFONT_EXTERNAL_FONT 0x01
|
|
||||||
#define ADDFONT_ALLOW_BITMAP 0x02
|
|
||||||
#define ADDFONT_ADD_TO_CACHE 0x04
|
|
||||||
#define ADDFONT_ADD_RESOURCE 0x08 /* added through AddFontResource */
|
|
||||||
#define ADDFONT_VERTICAL_FONT 0x10
|
|
||||||
#define ADDFONT_AA_FLAGS(flags) ((flags) << 16)
|
|
||||||
|
|
||||||
typedef struct tagFamily {
|
typedef struct tagFamily {
|
||||||
struct list entry;
|
struct list entry;
|
||||||
unsigned int refcount;
|
unsigned int refcount;
|
||||||
|
@ -2098,7 +2091,10 @@ static INT AddFontToList(const WCHAR *dos_name, const char *unix_name, void *fon
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int add_font_resource( const WCHAR *file, DWORD flags )
|
/*************************************************************
|
||||||
|
* freetype_add_font
|
||||||
|
*/
|
||||||
|
static INT CDECL freetype_add_font( const WCHAR *file, DWORD flags )
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
char *unixname = wine_get_unix_file_name( file );
|
char *unixname = wine_get_unix_file_name( file );
|
||||||
|
@ -2111,7 +2107,10 @@ static int add_font_resource( const WCHAR *file, DWORD flags )
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int remove_font_resource( const WCHAR *file, DWORD flags )
|
/*************************************************************
|
||||||
|
* freetype_remove_font
|
||||||
|
*/
|
||||||
|
static INT CDECL freetype_remove_font( const WCHAR *file, DWORD flags )
|
||||||
{
|
{
|
||||||
Family *family, *family_next;
|
Family *family, *family_next;
|
||||||
Face *face, *face_next;
|
Face *face, *face_next;
|
||||||
|
@ -2867,10 +2866,10 @@ static void load_system_fonts(void)
|
||||||
if(RegQueryValueExW(hkey, *value, 0, &type, (void*)data, &dlen) == ERROR_SUCCESS &&
|
if(RegQueryValueExW(hkey, *value, 0, &type, (void*)data, &dlen) == ERROR_SUCCESS &&
|
||||||
type == REG_SZ) {
|
type == REG_SZ) {
|
||||||
get_fonts_win_dir_path( data, pathW );
|
get_fonts_win_dir_path( data, pathW );
|
||||||
if (!add_font_resource( pathW, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_TO_CACHE ))
|
if (!freetype_add_font( pathW, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_TO_CACHE ))
|
||||||
{
|
{
|
||||||
get_fonts_data_dir_path( data, pathW );
|
get_fonts_data_dir_path( data, pathW );
|
||||||
add_font_resource( pathW, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_TO_CACHE );
|
freetype_add_font( pathW, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_TO_CACHE );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3050,34 +3049,6 @@ static void delete_external_font_keys(void)
|
||||||
if(winnt_key) RegCloseKey(winnt_key);
|
if(winnt_key) RegCloseKey(winnt_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************
|
|
||||||
* freetype_AddFontResourceEx
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static INT CDECL freetype_AddFontResourceEx(LPCWSTR file, DWORD flags, PVOID pdv)
|
|
||||||
{
|
|
||||||
WCHAR path[MAX_PATH];
|
|
||||||
INT ret = 0;
|
|
||||||
DWORD addfont_flags = ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_RESOURCE;
|
|
||||||
|
|
||||||
if (!(flags & FR_PRIVATE)) addfont_flags |= ADDFONT_ADD_TO_CACHE;
|
|
||||||
if (GetFullPathNameW( file, MAX_PATH, path, NULL ))
|
|
||||||
ret = add_font_resource( path, addfont_flags );
|
|
||||||
|
|
||||||
if (!ret && !strchrW(file, '\\')) {
|
|
||||||
/* Try in %WINDIR%/fonts, needed for Fotobuch Designer */
|
|
||||||
get_fonts_win_dir_path( file, path );
|
|
||||||
ret = add_font_resource( path, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_RESOURCE );
|
|
||||||
/* Try in datadir/fonts (or builddir/fonts), needed for Magic the Gathering Online */
|
|
||||||
if (!ret)
|
|
||||||
{
|
|
||||||
get_fonts_data_dir_path( file, path );
|
|
||||||
ret = add_font_resource( path, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_RESOURCE );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************************************
|
/*************************************************************
|
||||||
* freetype_AddFontMemResourceEx
|
* freetype_AddFontMemResourceEx
|
||||||
*
|
*
|
||||||
|
@ -3103,33 +3074,6 @@ static HANDLE CDECL freetype_AddFontMemResourceEx(PVOID pbFont, DWORD cbFont, PV
|
||||||
return (HANDLE)(((INT_PTR)pFontCopy)^0x87654321);
|
return (HANDLE)(((INT_PTR)pFontCopy)^0x87654321);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************
|
|
||||||
* freetype_RemoveFontResourceEx
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static BOOL CDECL freetype_RemoveFontResourceEx(LPCWSTR file, DWORD flags, PVOID pdv)
|
|
||||||
{
|
|
||||||
WCHAR path[MAX_PATH];
|
|
||||||
INT ret = 0;
|
|
||||||
DWORD addfont_flags = ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_RESOURCE;
|
|
||||||
|
|
||||||
if(!(flags & FR_PRIVATE)) addfont_flags |= ADDFONT_ADD_TO_CACHE;
|
|
||||||
if (GetFullPathNameW( file, MAX_PATH, path, NULL ))
|
|
||||||
ret = remove_font_resource( path, addfont_flags );
|
|
||||||
|
|
||||||
if (!ret && !strchrW(file, '\\'))
|
|
||||||
{
|
|
||||||
get_fonts_win_dir_path( file, path );
|
|
||||||
ret = remove_font_resource( path, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_RESOURCE );
|
|
||||||
if (!ret)
|
|
||||||
{
|
|
||||||
get_fonts_data_dir_path( file, path );
|
|
||||||
ret = remove_font_resource( path, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_RESOURCE );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static WCHAR *get_ttf_file_name( LPCWSTR font_file, LPCWSTR font_path )
|
static WCHAR *get_ttf_file_name( LPCWSTR font_file, LPCWSTR font_path )
|
||||||
{
|
{
|
||||||
WCHAR *fullname;
|
WCHAR *fullname;
|
||||||
|
@ -3565,17 +3509,17 @@ static void init_font_list(void)
|
||||||
{
|
{
|
||||||
if(data[0] && (data[1] == ':'))
|
if(data[0] && (data[1] == ':'))
|
||||||
{
|
{
|
||||||
add_font_resource( data, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_TO_CACHE);
|
freetype_add_font( data, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_TO_CACHE);
|
||||||
}
|
}
|
||||||
else if(dlen / 2 >= 6 && !strcmpiW(data + dlen / 2 - 5, dot_fonW))
|
else if(dlen / 2 >= 6 && !strcmpiW(data + dlen / 2 - 5, dot_fonW))
|
||||||
{
|
{
|
||||||
WCHAR pathW[MAX_PATH];
|
WCHAR pathW[MAX_PATH];
|
||||||
|
|
||||||
get_fonts_win_dir_path( data, pathW );
|
get_fonts_win_dir_path( data, pathW );
|
||||||
if (!add_font_resource( pathW, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_TO_CACHE ))
|
if (!freetype_add_font( pathW, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_TO_CACHE ))
|
||||||
{
|
{
|
||||||
get_fonts_data_dir_path( data, pathW );
|
get_fonts_data_dir_path( data, pathW );
|
||||||
add_font_resource( pathW, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_TO_CACHE );
|
freetype_add_font( pathW, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_TO_CACHE );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* reset dlen and vlen */
|
/* reset dlen and vlen */
|
||||||
|
@ -7533,10 +7477,10 @@ static const struct font_backend_funcs font_funcs =
|
||||||
freetype_GetCharWidthInfo,
|
freetype_GetCharWidthInfo,
|
||||||
freetype_GetFontUnicodeRanges,
|
freetype_GetFontUnicodeRanges,
|
||||||
freetype_SelectFont,
|
freetype_SelectFont,
|
||||||
freetype_AddFontResourceEx,
|
|
||||||
freetype_RemoveFontResourceEx,
|
|
||||||
freetype_AddFontMemResourceEx,
|
freetype_AddFontMemResourceEx,
|
||||||
freetype_CreateScalableFontResource,
|
freetype_CreateScalableFontResource,
|
||||||
|
freetype_add_font,
|
||||||
|
freetype_remove_font,
|
||||||
freetype_alloc_font,
|
freetype_alloc_font,
|
||||||
freetype_get_font_data,
|
freetype_get_font_data,
|
||||||
freetype_get_glyph_index,
|
freetype_get_glyph_index,
|
||||||
|
|
|
@ -355,6 +355,13 @@ struct gdi_font
|
||||||
#define MS_TTCF_TAG MS_MAKE_TAG('t', 't', 'c', 'f')
|
#define MS_TTCF_TAG MS_MAKE_TAG('t', 't', 'c', 'f')
|
||||||
#define MS_VDMX_TAG MS_MAKE_TAG('V', 'D', 'M', 'X')
|
#define MS_VDMX_TAG MS_MAKE_TAG('V', 'D', 'M', 'X')
|
||||||
|
|
||||||
|
#define ADDFONT_EXTERNAL_FONT 0x01
|
||||||
|
#define ADDFONT_ALLOW_BITMAP 0x02
|
||||||
|
#define ADDFONT_ADD_TO_CACHE 0x04
|
||||||
|
#define ADDFONT_ADD_RESOURCE 0x08 /* added through AddFontResource */
|
||||||
|
#define ADDFONT_VERTICAL_FONT 0x10
|
||||||
|
#define ADDFONT_AA_FLAGS(flags) ((flags) << 16)
|
||||||
|
|
||||||
struct font_backend_funcs
|
struct font_backend_funcs
|
||||||
{
|
{
|
||||||
BOOL (CDECL *pEnumFonts)( LOGFONTW *lf, FONTENUMPROCW proc, LPARAM lparam );
|
BOOL (CDECL *pEnumFonts)( LOGFONTW *lf, FONTENUMPROCW proc, LPARAM lparam );
|
||||||
|
@ -363,11 +370,11 @@ struct font_backend_funcs
|
||||||
DWORD (CDECL *pGetFontUnicodeRanges)( struct gdi_font *font, GLYPHSET *glyphset );
|
DWORD (CDECL *pGetFontUnicodeRanges)( struct gdi_font *font, GLYPHSET *glyphset );
|
||||||
struct gdi_font * (CDECL *pSelectFont)( DC *dc, HFONT hfont, UINT *aa_flags, UINT default_aa_flags );
|
struct gdi_font * (CDECL *pSelectFont)( DC *dc, HFONT hfont, UINT *aa_flags, UINT default_aa_flags );
|
||||||
|
|
||||||
INT (CDECL *pAddFontResourceEx)( LPCWSTR file, DWORD flags, PVOID pdv );
|
|
||||||
INT (CDECL *pRemoveFontResourceEx)( LPCWSTR file, DWORD flags, PVOID pdv );
|
|
||||||
HANDLE (CDECL *pAddFontMemResourceEx)( void *font, DWORD size, PVOID pdv, DWORD *count );
|
HANDLE (CDECL *pAddFontMemResourceEx)( void *font, DWORD size, PVOID pdv, DWORD *count );
|
||||||
BOOL (CDECL *pCreateScalableFontResource)( DWORD hidden, LPCWSTR resource,
|
BOOL (CDECL *pCreateScalableFontResource)( DWORD hidden, LPCWSTR resource,
|
||||||
LPCWSTR font_file, LPCWSTR font_path );
|
LPCWSTR font_file, LPCWSTR font_path );
|
||||||
|
INT (CDECL *add_font)( const WCHAR *file, DWORD flags );
|
||||||
|
BOOL (CDECL *remove_font)( const WCHAR *file, DWORD flags );
|
||||||
|
|
||||||
BOOL (CDECL *alloc_font)( struct gdi_font *font );
|
BOOL (CDECL *alloc_font)( struct gdi_font *font );
|
||||||
DWORD (CDECL *get_font_data)( struct gdi_font *gdi_font, DWORD table, DWORD offset,
|
DWORD (CDECL *get_font_data)( struct gdi_font *gdi_font, DWORD table, DWORD offset,
|
||||||
|
|
Loading…
Reference in New Issue