Use the exported FONTENUMPROCW as parameter in the EnumDeviceFonts
driver function instead of defining a private function type.
diff --git a/dlls/gdi/freetype.c b/dlls/gdi/freetype.c
index 91ac40e..8b5f6c4 100644
--- a/dlls/gdi/freetype.c
+++ b/dlls/gdi/freetype.c
@@ -1507,8 +1507,7 @@
* WineEngEnumFonts
*
*/
-DWORD WineEngEnumFonts(LPLOGFONTW plf, DEVICEFONTENUMPROC proc,
- LPARAM lparam)
+DWORD WineEngEnumFonts(LPLOGFONTW plf, FONTENUMPROCW proc, LPARAM lparam)
{
Family *family;
Face *face;
@@ -1561,7 +1560,7 @@
csi.ciCharset, type, debugstr_w(elf.elfScript),
elf.elfLogFont.lfItalic, elf.elfLogFont.lfWeight,
ntm.ntmTm.ntmFlags);
- ret = proc(&elf, &ntm, type, lparam);
+ ret = proc(&elf.elfLogFont, (TEXTMETRICW *)&ntm, type, lparam);
if(!ret) goto end;
}
}
@@ -1593,7 +1592,7 @@
csi.ciCharset, type, debugstr_w(elf.elfScript),
elf.elfLogFont.lfItalic, elf.elfLogFont.lfWeight,
ntm.ntmTm.ntmFlags);
- ret = proc(&elf, &ntm, type, lparam);
+ ret = proc(&elf.elfLogFont, (TEXTMETRICW *)&ntm, type, lparam);
if(!ret) goto end;
}
}
diff --git a/dlls/gdi/gdi_private.h b/dlls/gdi/gdi_private.h
index 72a3d99..5d96180 100644
--- a/dlls/gdi/gdi_private.h
+++ b/dlls/gdi/gdi_private.h
@@ -70,7 +70,7 @@
INT (*pEndDoc)(PHYSDEV);
INT (*pEndPage)(PHYSDEV);
BOOL (*pEndPath)(PHYSDEV);
- BOOL (*pEnumDeviceFonts)(PHYSDEV,LPLOGFONTW,DEVICEFONTENUMPROC,LPARAM);
+ BOOL (*pEnumDeviceFonts)(PHYSDEV,LPLOGFONTW,FONTENUMPROCW,LPARAM);
INT (*pExcludeClipRect)(PHYSDEV,INT,INT,INT,INT);
INT (*pExtDeviceMode)(LPSTR,HWND,LPDEVMODEA,LPSTR,LPSTR,LPDEVMODEA,LPSTR,DWORD);
INT (*pExtEscape)(PHYSDEV,INT,INT,LPCVOID,INT,LPVOID);
@@ -217,7 +217,7 @@
extern INT WineEngAddFontResourceEx(LPCWSTR, DWORD, PVOID);
extern GdiFont WineEngCreateFontInstance(DC*, HFONT);
extern BOOL WineEngDestroyFontInstance(HFONT handle);
-extern DWORD WineEngEnumFonts(LPLOGFONTW, DEVICEFONTENUMPROC, LPARAM);
+extern DWORD WineEngEnumFonts(LPLOGFONTW, FONTENUMPROCW, LPARAM);
extern BOOL WineEngGetCharWidth(GdiFont, UINT, UINT, LPINT);
extern DWORD WineEngGetFontData(GdiFont, DWORD, DWORD, LPVOID, DWORD);
extern DWORD WineEngGetGlyphIndices(GdiFont font, LPCWSTR lpstr, INT count,
diff --git a/dlls/wineps/builtin.c b/dlls/wineps/builtin.c
index ab1168a..378d515 100644
--- a/dlls/wineps/builtin.c
+++ b/dlls/wineps/builtin.c
@@ -396,7 +396,7 @@
* PSDRV_EnumDeviceFonts
*/
BOOL PSDRV_EnumDeviceFonts( PSDRV_PDEVICE *physDev, LPLOGFONTW plf,
- DEVICEFONTENUMPROC proc, LPARAM lp )
+ FONTENUMPROCW proc, LPARAM lp )
{
ENUMLOGFONTEXW lf;
NEWTEXTMETRICEXW tm;
@@ -417,7 +417,7 @@
if(family) {
for(afmle = family->afmlist; afmle; afmle = afmle->next) {
TRACE("Got '%s'\n", afmle->afm->FontName);
- if( (b = (*proc)( &lf, &tm,
+ if( (b = (*proc)( &lf.elfLogFont, (TEXTMETRICW *)&tm,
PSDRV_GetFontMetric( physDev->hdc, afmle->afm, &tm, &lf ),
lp )) )
bRet = b;
@@ -430,7 +430,7 @@
for(family = physDev->pi->Fonts; family; family = family->next) {
afmle = family->afmlist;
TRACE("Got '%s'\n", afmle->afm->FontName);
- if( (b = (*proc)( &lf, &tm,
+ if( (b = (*proc)( &lf.elfLogFont, (TEXTMETRICW *)&tm,
PSDRV_GetFontMetric( physDev->hdc, afmle->afm, &tm, &lf ),
lp )) )
bRet = b;
diff --git a/dlls/x11drv/x11drv.h b/dlls/x11drv/x11drv.h
index bf4ae53..55e98d3 100644
--- a/dlls/x11drv/x11drv.h
+++ b/dlls/x11drv/x11drv.h
@@ -121,7 +121,7 @@
INT width, INT height, X11DRV_PDEVICE *physDevSrc,
INT xSrc, INT ySrc, DWORD rop );
extern BOOL X11DRV_EnumDeviceFonts( X11DRV_PDEVICE *physDev, LPLOGFONTW plf,
- DEVICEFONTENUMPROC dfeproc, LPARAM lp );
+ FONTENUMPROCW dfeproc, LPARAM lp );
extern LONG X11DRV_GetBitmapBits( HBITMAP hbitmap, void *bits, LONG count );
extern BOOL X11DRV_GetCharWidth( X11DRV_PDEVICE *physDev, UINT firstChar,
UINT lastChar, LPINT buffer );
diff --git a/dlls/x11drv/xfont.c b/dlls/x11drv/xfont.c
index af1d4c8..8ac604f 100644
--- a/dlls/x11drv/xfont.c
+++ b/dlls/x11drv/xfont.c
@@ -3347,7 +3347,7 @@
* X11DRV_EnumDeviceFonts
*/
BOOL X11DRV_EnumDeviceFonts( X11DRV_PDEVICE *physDev, LPLOGFONTW plf,
- DEVICEFONTENUMPROC proc, LPARAM lp )
+ FONTENUMPROCW proc, LPARAM lp )
{
ENUMLOGFONTEXW lf;
NEWTEXTMETRICEXW tm;
@@ -3375,7 +3375,7 @@
if(plf->lfCharSet == DEFAULT_CHARSET ||
plf->lfCharSet == pfi->df.dfCharSet) {
- if( (b = (*proc)( &lf, &tm,
+ if( (b = (*proc)( &lf.elfLogFont, (TEXTMETRICW *)&tm,
XFONT_GetFontMetric( pfi, &lf, &tm ), lp )) )
bRet = b;
else break;
@@ -3388,7 +3388,7 @@
{
if(pfr->fi)
{
- if( (b = (*proc)( &lf, &tm,
+ if( (b = (*proc)( &lf.elfLogFont, (TEXTMETRICW *)&tm,
XFONT_GetFontMetric( pfr->fi, &lf, &tm ), lp )) )
bRet = b;
else break;
diff --git a/include/gdi.h b/include/gdi.h
index 273bbb7..5e14bc1 100644
--- a/include/gdi.h
+++ b/include/gdi.h
@@ -160,8 +160,6 @@
BOOL vport2WorldValid; /* Is xformVport2World valid? */
} DC;
-typedef INT (*DEVICEFONTENUMPROC)(LPENUMLOGFONTEXW,NEWTEXTMETRICEXW *,DWORD,LPARAM);
-
/* extra stock object: default 1x1 bitmap for memory DCs */
#define DEFAULT_BITMAP (STOCK_LAST+1)
diff --git a/objects/font.c b/objects/font.c
index 78ecd43..6ff3e79 100644
--- a/objects/font.c
+++ b/objects/font.c
@@ -569,22 +569,25 @@
*
* Called by the device driver layer to pass font info
* down to the application.
+ *
+ * Note: plf is really an ENUMLOGFONTEXW, and ptm is a NEWTEXTMETRICEXW.
+ * We have to use other types because of the FONTENUMPROCW definition.
*/
-static INT FONT_EnumInstance16( LPENUMLOGFONTEXW plf, NEWTEXTMETRICEXW *ptm,
- DWORD fType, LPARAM lp )
+static INT CALLBACK FONT_EnumInstance16( const LOGFONTW *plf, const TEXTMETRICW *ptm,
+ DWORD fType, LPARAM lp )
{
fontEnum16 *pfe = (fontEnum16*)lp;
INT ret = 1;
DC *dc;
if( pfe->lpLogFontParam->lfCharSet == DEFAULT_CHARSET ||
- pfe->lpLogFontParam->lfCharSet == plf->elfLogFont.lfCharSet )
+ pfe->lpLogFontParam->lfCharSet == plf->lfCharSet )
{
WORD args[7];
DWORD result;
- FONT_EnumLogFontExWTo16(plf, pfe->lpLogFont);
- FONT_NewTextMetricExWTo16(ptm, pfe->lpTextMetric);
+ FONT_EnumLogFontExWTo16((const ENUMLOGFONTEXW *)plf, pfe->lpLogFont);
+ FONT_NewTextMetricExWTo16((const NEWTEXTMETRICEXW *)ptm, pfe->lpTextMetric);
pfe->dwFlags |= ENUM_CALLED;
GDI_ReleaseObj( pfe->hdc ); /* release the GDI lock */
@@ -612,9 +615,12 @@
/***********************************************************************
* FONT_EnumInstance
+ *
+ * Note: plf is really an ENUMLOGFONTEXW, and ptm is a NEWTEXTMETRICEXW.
+ * We have to use other types because of the FONTENUMPROCW definition.
*/
-static INT FONT_EnumInstance( LPENUMLOGFONTEXW plf, NEWTEXTMETRICEXW *ptm,
- DWORD fType, LPARAM lp )
+static INT CALLBACK FONT_EnumInstance( const LOGFONTW *plf, const TEXTMETRICW *ptm,
+ DWORD fType, LPARAM lp )
{
fontEnum32 *pfe = (fontEnum32*)lp;
INT ret = 1;
@@ -622,7 +628,7 @@
/* lfCharSet is at the same offset in both LOGFONTA and LOGFONTW */
if( pfe->lpLogFontParam->lfCharSet == DEFAULT_CHARSET ||
- pfe->lpLogFontParam->lfCharSet == plf->elfLogFont.lfCharSet )
+ pfe->lpLogFontParam->lfCharSet == plf->lfCharSet )
{
/* convert font metrics */
ENUMLOGFONTEXA logfont;
@@ -631,14 +637,14 @@
pfe->dwFlags |= ENUM_CALLED;
if (!(pfe->dwFlags & ENUM_UNICODE))
{
- FONT_EnumLogFontExWToA( plf, &logfont);
- FONT_NewTextMetricExWToA( ptm, &tmA );
- plf = (LPENUMLOGFONTEXW)&logfont;
- ptm = (NEWTEXTMETRICEXW *)&tmA;
+ FONT_EnumLogFontExWToA( (const ENUMLOGFONTEXW *)plf, &logfont);
+ FONT_NewTextMetricExWToA( (const NEWTEXTMETRICEXW *)ptm, &tmA );
+ plf = (LOGFONTW *)&logfont.elfLogFont;
+ ptm = (TEXTMETRICW *)&tmA;
}
GDI_ReleaseObj( pfe->hdc ); /* release the GDI lock */
- ret = pfe->lpEnumFunc( &plf->elfLogFont, (TEXTMETRICW *)ptm, fType, pfe->lpData );
+ ret = pfe->lpEnumFunc( plf, ptm, fType, pfe->lpData );
/* get the lock again and make sure the DC is still valid */
dc = DC_GetDCPtr( pfe->hdc );