gdi32: Implement GetCharWidthInfo().
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com> Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
5698bb29a3
commit
1128587fd2
|
@ -430,6 +430,7 @@ const struct gdi_dc_funcs dib_driver =
|
||||||
NULL, /* pGetCharABCWidths */
|
NULL, /* pGetCharABCWidths */
|
||||||
NULL, /* pGetCharABCWidthsI */
|
NULL, /* pGetCharABCWidthsI */
|
||||||
NULL, /* pGetCharWidth */
|
NULL, /* pGetCharWidth */
|
||||||
|
NULL, /* pGetCharWidthInfo */
|
||||||
NULL, /* pGetDeviceCaps */
|
NULL, /* pGetDeviceCaps */
|
||||||
NULL, /* pGetDeviceGammaRamp */
|
NULL, /* pGetDeviceGammaRamp */
|
||||||
NULL, /* pGetFontData */
|
NULL, /* pGetFontData */
|
||||||
|
@ -1052,6 +1053,7 @@ static const struct gdi_dc_funcs window_driver =
|
||||||
NULL, /* pGetCharABCWidths */
|
NULL, /* pGetCharABCWidths */
|
||||||
NULL, /* pGetCharABCWidthsI */
|
NULL, /* pGetCharABCWidthsI */
|
||||||
NULL, /* pGetCharWidth */
|
NULL, /* pGetCharWidth */
|
||||||
|
NULL, /* pGetCharWidthInfo */
|
||||||
NULL, /* pGetDeviceCaps */
|
NULL, /* pGetDeviceCaps */
|
||||||
NULL, /* pGetDeviceGammaRamp */
|
NULL, /* pGetDeviceGammaRamp */
|
||||||
NULL, /* pGetFontData */
|
NULL, /* pGetFontData */
|
||||||
|
|
|
@ -310,6 +310,11 @@ static BOOL nulldrv_GetCharWidth( PHYSDEV dev, UINT first, UINT last, INT *buffe
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BOOL nulldrv_GetCharWidthInfo( PHYSDEV dev, void *info )
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static INT nulldrv_GetDeviceCaps( PHYSDEV dev, INT cap )
|
static INT nulldrv_GetDeviceCaps( PHYSDEV dev, INT cap )
|
||||||
{
|
{
|
||||||
int bpp;
|
int bpp;
|
||||||
|
@ -756,6 +761,7 @@ const struct gdi_dc_funcs null_driver =
|
||||||
nulldrv_GetCharABCWidths, /* pGetCharABCWidths */
|
nulldrv_GetCharABCWidths, /* pGetCharABCWidths */
|
||||||
nulldrv_GetCharABCWidthsI, /* pGetCharABCWidthsI */
|
nulldrv_GetCharABCWidthsI, /* pGetCharABCWidthsI */
|
||||||
nulldrv_GetCharWidth, /* pGetCharWidth */
|
nulldrv_GetCharWidth, /* pGetCharWidth */
|
||||||
|
nulldrv_GetCharWidthInfo, /* pGetCharWidthInfo */
|
||||||
nulldrv_GetDeviceCaps, /* pGetDeviceCaps */
|
nulldrv_GetDeviceCaps, /* pGetDeviceCaps */
|
||||||
nulldrv_GetDeviceGammaRamp, /* pGetDeviceGammaRamp */
|
nulldrv_GetDeviceGammaRamp, /* pGetDeviceGammaRamp */
|
||||||
nulldrv_GetFontData, /* pGetFontData */
|
nulldrv_GetFontData, /* pGetFontData */
|
||||||
|
|
|
@ -860,6 +860,7 @@ static const struct gdi_dc_funcs emfpath_driver =
|
||||||
NULL, /* pGetCharABCWidths */
|
NULL, /* pGetCharABCWidths */
|
||||||
NULL, /* pGetCharABCWidthsI */
|
NULL, /* pGetCharABCWidthsI */
|
||||||
NULL, /* pGetCharWidth */
|
NULL, /* pGetCharWidth */
|
||||||
|
NULL, /* pGetCharWidthInfo */
|
||||||
NULL, /* pGetDeviceCaps */
|
NULL, /* pGetDeviceCaps */
|
||||||
NULL, /* pGetDeviceGammaRamp */
|
NULL, /* pGetDeviceGammaRamp */
|
||||||
NULL, /* pGetFontData */
|
NULL, /* pGetFontData */
|
||||||
|
|
|
@ -73,6 +73,7 @@ static const struct gdi_dc_funcs emfdrv_driver =
|
||||||
NULL, /* pGetCharABCWidths */
|
NULL, /* pGetCharABCWidths */
|
||||||
NULL, /* pGetCharABCWidthsI */
|
NULL, /* pGetCharABCWidthsI */
|
||||||
NULL, /* pGetCharWidth */
|
NULL, /* pGetCharWidth */
|
||||||
|
NULL, /* pGetCharWidthInfo */
|
||||||
EMFDRV_GetDeviceCaps, /* pGetDeviceCaps */
|
EMFDRV_GetDeviceCaps, /* pGetDeviceCaps */
|
||||||
NULL, /* pGetDeviceGammaRamp */
|
NULL, /* pGetDeviceGammaRamp */
|
||||||
NULL, /* pGetFontData */
|
NULL, /* pGetFontData */
|
||||||
|
|
|
@ -3968,3 +3968,27 @@ BOOL WINAPI GdiRealizationInfo(HDC hdc, struct realization_info *info)
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*************************************************************
|
||||||
|
* GetCharWidthInfo (GDI32.@)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL WINAPI GetCharWidthInfo(HDC hdc, struct char_width_info *info)
|
||||||
|
{
|
||||||
|
PHYSDEV dev;
|
||||||
|
BOOL ret;
|
||||||
|
DC *dc;
|
||||||
|
|
||||||
|
dc = get_dc_ptr(hdc);
|
||||||
|
if (!dc) return FALSE;
|
||||||
|
dev = GET_DC_PHYSDEV( dc, pGetCharWidthInfo );
|
||||||
|
ret = dev->funcs->pGetCharWidthInfo( dev, info );
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
info->lsb = width_to_LP( dc, info->lsb );
|
||||||
|
info->rsb = width_to_LP( dc, info->rsb );
|
||||||
|
}
|
||||||
|
release_dc_ptr(dc);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
|
@ -8417,6 +8417,40 @@ static BOOL freetype_GetCharWidth( PHYSDEV dev, UINT firstChar, UINT lastChar, L
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*************************************************************
|
||||||
|
* freetype_GetCharWidthInfo
|
||||||
|
*/
|
||||||
|
static BOOL freetype_GetCharWidthInfo( PHYSDEV dev, void* ptr )
|
||||||
|
{
|
||||||
|
struct freetype_physdev *physdev = get_freetype_dev( dev );
|
||||||
|
struct char_width_info *info = ptr;
|
||||||
|
TT_HoriHeader *pHori;
|
||||||
|
|
||||||
|
if (!physdev->font)
|
||||||
|
{
|
||||||
|
dev = GET_NEXT_PHYSDEV( dev, pGetCharWidthInfo );
|
||||||
|
return dev->funcs->pGetCharWidthInfo( dev, ptr );
|
||||||
|
}
|
||||||
|
|
||||||
|
TRACE("%p, %p\n", physdev->font, info);
|
||||||
|
|
||||||
|
if (FT_IS_SCALABLE(physdev->font->ft_face) &&
|
||||||
|
(pHori = pFT_Get_Sfnt_Table(physdev->font->ft_face, ft_sfnt_hhea)))
|
||||||
|
{
|
||||||
|
FT_Fixed em_scale;
|
||||||
|
em_scale = MulDiv(physdev->font->ppem, 1 << 16,
|
||||||
|
physdev->font->ft_face->units_per_EM);
|
||||||
|
info->lsb = (SHORT)pFT_MulFix(pHori->min_Left_Side_Bearing, em_scale);
|
||||||
|
info->rsb = (SHORT)pFT_MulFix(pHori->min_Right_Side_Bearing, em_scale);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
info->lsb = info->rsb = 0;
|
||||||
|
|
||||||
|
info->unk = 0;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/*************************************************************
|
/*************************************************************
|
||||||
* freetype_GetCharABCWidths
|
* freetype_GetCharABCWidths
|
||||||
*/
|
*/
|
||||||
|
@ -9112,6 +9146,7 @@ static const struct gdi_dc_funcs freetype_funcs =
|
||||||
freetype_GetCharABCWidths, /* pGetCharABCWidths */
|
freetype_GetCharABCWidths, /* pGetCharABCWidths */
|
||||||
freetype_GetCharABCWidthsI, /* pGetCharABCWidthsI */
|
freetype_GetCharABCWidthsI, /* pGetCharABCWidthsI */
|
||||||
freetype_GetCharWidth, /* pGetCharWidth */
|
freetype_GetCharWidth, /* pGetCharWidth */
|
||||||
|
freetype_GetCharWidthInfo, /* pGetCharWidthInfo */
|
||||||
NULL, /* pGetDeviceCaps */
|
NULL, /* pGetDeviceCaps */
|
||||||
NULL, /* pGetDeviceGammaRamp */
|
NULL, /* pGetDeviceGammaRamp */
|
||||||
freetype_GetFontData, /* pGetFontData */
|
freetype_GetFontData, /* pGetFontData */
|
||||||
|
|
|
@ -251,7 +251,7 @@
|
||||||
@ stdcall GetCharWidthFloatA(long long long ptr)
|
@ stdcall GetCharWidthFloatA(long long long ptr)
|
||||||
@ stdcall GetCharWidthFloatW(long long long ptr)
|
@ stdcall GetCharWidthFloatW(long long long ptr)
|
||||||
@ stdcall GetCharWidthI(ptr long long ptr ptr)
|
@ stdcall GetCharWidthI(ptr long long ptr ptr)
|
||||||
# @ stub GetCharWidthInfo
|
@ stdcall GetCharWidthInfo(ptr ptr)
|
||||||
@ stdcall GetCharWidthW(long long long long) GetCharWidth32W
|
@ stdcall GetCharWidthW(long long long long) GetCharWidth32W
|
||||||
@ stub GetCharWidthWOW
|
@ stub GetCharWidthWOW
|
||||||
@ stdcall GetCharacterPlacementA(long str long long ptr long)
|
@ stdcall GetCharacterPlacementA(long str long long ptr long)
|
||||||
|
|
|
@ -294,6 +294,14 @@ struct font_realization_info
|
||||||
WORD simulations; /* 0 bit - bold simulation, 1 bit - oblique simulation */
|
WORD simulations; /* 0 bit - bold simulation, 1 bit - oblique simulation */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Undocumented structure filled in by GetCharWidthInfo */
|
||||||
|
struct char_width_info
|
||||||
|
{
|
||||||
|
INT lsb; /* minimum left side bearing */
|
||||||
|
INT rsb; /* minimum right side bearing */
|
||||||
|
INT unk; /* unknown */
|
||||||
|
};
|
||||||
|
|
||||||
extern INT WineEngAddFontResourceEx(LPCWSTR, DWORD, PVOID) DECLSPEC_HIDDEN;
|
extern INT WineEngAddFontResourceEx(LPCWSTR, DWORD, PVOID) DECLSPEC_HIDDEN;
|
||||||
extern HANDLE WineEngAddFontMemResourceEx(PVOID, DWORD, PVOID, LPDWORD) DECLSPEC_HIDDEN;
|
extern HANDLE WineEngAddFontMemResourceEx(PVOID, DWORD, PVOID, LPDWORD) DECLSPEC_HIDDEN;
|
||||||
extern BOOL WineEngCreateScalableFontResource(DWORD, LPCWSTR, LPCWSTR, LPCWSTR) DECLSPEC_HIDDEN;
|
extern BOOL WineEngCreateScalableFontResource(DWORD, LPCWSTR, LPCWSTR, LPCWSTR) DECLSPEC_HIDDEN;
|
||||||
|
|
|
@ -136,6 +136,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs =
|
||||||
NULL, /* pGetCharABCWidths */
|
NULL, /* pGetCharABCWidths */
|
||||||
NULL, /* pGetCharABCWidthsI */
|
NULL, /* pGetCharABCWidthsI */
|
||||||
NULL, /* pGetCharWidth */
|
NULL, /* pGetCharWidth */
|
||||||
|
NULL, /* pGetCharWidthInfo */
|
||||||
MFDRV_GetDeviceCaps, /* pGetDeviceCaps */
|
MFDRV_GetDeviceCaps, /* pGetDeviceCaps */
|
||||||
NULL, /* pGetDeviceGammaRamp */
|
NULL, /* pGetDeviceGammaRamp */
|
||||||
NULL, /* pGetFontData */
|
NULL, /* pGetFontData */
|
||||||
|
|
|
@ -2158,6 +2158,7 @@ const struct gdi_dc_funcs path_driver =
|
||||||
NULL, /* pGetCharABCWidths */
|
NULL, /* pGetCharABCWidths */
|
||||||
NULL, /* pGetCharABCWidthsI */
|
NULL, /* pGetCharABCWidthsI */
|
||||||
NULL, /* pGetCharWidth */
|
NULL, /* pGetCharWidth */
|
||||||
|
NULL, /* pGetCharWidthInfo */
|
||||||
NULL, /* pGetDeviceCaps */
|
NULL, /* pGetDeviceCaps */
|
||||||
NULL, /* pGetDeviceGammaRamp */
|
NULL, /* pGetDeviceGammaRamp */
|
||||||
NULL, /* pGetFontData */
|
NULL, /* pGetFontData */
|
||||||
|
|
|
@ -321,6 +321,7 @@ static const struct gdi_dc_funcs android_drv_funcs =
|
||||||
NULL, /* pGetCharABCWidths */
|
NULL, /* pGetCharABCWidths */
|
||||||
NULL, /* pGetCharABCWidthsI */
|
NULL, /* pGetCharABCWidthsI */
|
||||||
NULL, /* pGetCharWidth */
|
NULL, /* pGetCharWidth */
|
||||||
|
NULL, /* pGetCharWidthInfo */
|
||||||
NULL, /* pGetDeviceCaps */
|
NULL, /* pGetDeviceCaps */
|
||||||
NULL, /* pGetDeviceGammaRamp */
|
NULL, /* pGetDeviceGammaRamp */
|
||||||
NULL, /* pGetFontData */
|
NULL, /* pGetFontData */
|
||||||
|
|
|
@ -300,6 +300,7 @@ static const struct gdi_dc_funcs macdrv_funcs =
|
||||||
NULL, /* pGetCharABCWidths */
|
NULL, /* pGetCharABCWidths */
|
||||||
NULL, /* pGetCharABCWidthsI */
|
NULL, /* pGetCharABCWidthsI */
|
||||||
NULL, /* pGetCharWidth */
|
NULL, /* pGetCharWidth */
|
||||||
|
NULL, /* pGetCharWidthInfo */
|
||||||
macdrv_GetDeviceCaps, /* pGetDeviceCaps */
|
macdrv_GetDeviceCaps, /* pGetDeviceCaps */
|
||||||
macdrv_GetDeviceGammaRamp, /* pGetDeviceGammaRamp */
|
macdrv_GetDeviceGammaRamp, /* pGetDeviceGammaRamp */
|
||||||
NULL, /* pGetFontData */
|
NULL, /* pGetFontData */
|
||||||
|
|
|
@ -818,6 +818,7 @@ static const struct gdi_dc_funcs psdrv_funcs =
|
||||||
NULL, /* pGetCharABCWidths */
|
NULL, /* pGetCharABCWidths */
|
||||||
NULL, /* pGetCharABCWidthsI */
|
NULL, /* pGetCharABCWidthsI */
|
||||||
PSDRV_GetCharWidth, /* pGetCharWidth */
|
PSDRV_GetCharWidth, /* pGetCharWidth */
|
||||||
|
NULL, /* pGetCharWidthInfo */
|
||||||
PSDRV_GetDeviceCaps, /* pGetDeviceCaps */
|
PSDRV_GetDeviceCaps, /* pGetDeviceCaps */
|
||||||
NULL, /* pGetDeviceGammaRamp */
|
NULL, /* pGetDeviceGammaRamp */
|
||||||
NULL, /* pGetFontData */
|
NULL, /* pGetFontData */
|
||||||
|
|
|
@ -381,6 +381,7 @@ static const struct gdi_dc_funcs x11drv_funcs =
|
||||||
NULL, /* pGetCharABCWidths */
|
NULL, /* pGetCharABCWidths */
|
||||||
NULL, /* pGetCharABCWidthsI */
|
NULL, /* pGetCharABCWidthsI */
|
||||||
NULL, /* pGetCharWidth */
|
NULL, /* pGetCharWidth */
|
||||||
|
NULL, /* pGetCharWidthInfo */
|
||||||
X11DRV_GetDeviceCaps, /* pGetDeviceCaps */
|
X11DRV_GetDeviceCaps, /* pGetDeviceCaps */
|
||||||
X11DRV_GetDeviceGammaRamp, /* pGetDeviceGammaRamp */
|
X11DRV_GetDeviceGammaRamp, /* pGetDeviceGammaRamp */
|
||||||
NULL, /* pGetFontData */
|
NULL, /* pGetFontData */
|
||||||
|
|
|
@ -2194,6 +2194,7 @@ static const struct gdi_dc_funcs xrender_funcs =
|
||||||
NULL, /* pGetCharABCWidths */
|
NULL, /* pGetCharABCWidths */
|
||||||
NULL, /* pGetCharABCWidthsI */
|
NULL, /* pGetCharABCWidthsI */
|
||||||
NULL, /* pGetCharWidth */
|
NULL, /* pGetCharWidth */
|
||||||
|
NULL, /* pGetCharWidthInfo */
|
||||||
NULL, /* pGetDeviceCaps */
|
NULL, /* pGetDeviceCaps */
|
||||||
NULL, /* pGetDeviceGammaRamp */
|
NULL, /* pGetDeviceGammaRamp */
|
||||||
NULL, /* pGetFontData */
|
NULL, /* pGetFontData */
|
||||||
|
|
|
@ -102,6 +102,7 @@ struct gdi_dc_funcs
|
||||||
BOOL (*pGetCharABCWidths)(PHYSDEV,UINT,UINT,LPABC);
|
BOOL (*pGetCharABCWidths)(PHYSDEV,UINT,UINT,LPABC);
|
||||||
BOOL (*pGetCharABCWidthsI)(PHYSDEV,UINT,UINT,WORD*,LPABC);
|
BOOL (*pGetCharABCWidthsI)(PHYSDEV,UINT,UINT,WORD*,LPABC);
|
||||||
BOOL (*pGetCharWidth)(PHYSDEV,UINT,UINT,LPINT);
|
BOOL (*pGetCharWidth)(PHYSDEV,UINT,UINT,LPINT);
|
||||||
|
BOOL (*pGetCharWidthInfo)(PHYSDEV,void*);
|
||||||
INT (*pGetDeviceCaps)(PHYSDEV,INT);
|
INT (*pGetDeviceCaps)(PHYSDEV,INT);
|
||||||
BOOL (*pGetDeviceGammaRamp)(PHYSDEV,LPVOID);
|
BOOL (*pGetDeviceGammaRamp)(PHYSDEV,LPVOID);
|
||||||
DWORD (*pGetFontData)(PHYSDEV,DWORD,DWORD,LPVOID,DWORD);
|
DWORD (*pGetFontData)(PHYSDEV,DWORD,DWORD,LPVOID,DWORD);
|
||||||
|
@ -199,7 +200,7 @@ struct gdi_dc_funcs
|
||||||
};
|
};
|
||||||
|
|
||||||
/* increment this when you change the DC function table */
|
/* increment this when you change the DC function table */
|
||||||
#define WINE_GDI_DRIVER_VERSION 48
|
#define WINE_GDI_DRIVER_VERSION 49
|
||||||
|
|
||||||
#define GDI_PRIORITY_NULL_DRV 0 /* null driver */
|
#define GDI_PRIORITY_NULL_DRV 0 /* null driver */
|
||||||
#define GDI_PRIORITY_FONT_DRV 100 /* any font driver */
|
#define GDI_PRIORITY_FONT_DRV 100 /* any font driver */
|
||||||
|
|
Loading…
Reference in New Issue