Module: wine Branch: master Commit: 18bcec0d257f6d0b8e2c063b5dfc0c2302763835 URL: https://gitlab.winehq.org/wine/wine/-/commit/18bcec0d257f6d0b8e2c063b5dfc0c2...
Author: Piotr Caban piotr@codeweavers.com Date: Fri May 5 20:58:59 2023 +0200
wineps: Copy GetTextExtentExPoint implementation to unixlib.
---
dlls/wineps.drv/init.c | 1 - dlls/wineps.drv/unixlib.c | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c index 66c052db27c..b08f02ddb11 100644 --- a/dlls/wineps.drv/init.c +++ b/dlls/wineps.drv/init.c @@ -693,7 +693,6 @@ static struct gdi_dc_funcs psdrv_funcs = .pCreateCompatibleDC = PSDRV_CreateCompatibleDC, .pCreateDC = PSDRV_CreateDC, .pDeleteDC = PSDRV_DeleteDC, - .pGetTextExtentExPoint = PSDRV_GetTextExtentExPoint, .priority = GDI_PRIORITY_GRAPHICS_DRV };
diff --git a/dlls/wineps.drv/unixlib.c b/dlls/wineps.drv/unixlib.c index d7f8eb7e9a9..72f63c81300 100644 --- a/dlls/wineps.drv/unixlib.c +++ b/dlls/wineps.drv/unixlib.c @@ -1206,6 +1206,28 @@ static BOOL CDECL get_text_metrics(PHYSDEV dev, TEXTMETRICW *metrics) return TRUE; }
+static BOOL CDECL get_text_extent_ex_point(PHYSDEV dev, const WCHAR *str, int count, int *dx) +{ + PSDRV_PDEVICE *pdev = get_psdrv_dev(dev); + int i; + float width = 0.0; + + if (pdev->font.fontloc == Download) + { + dev = GET_NEXT_PHYSDEV(dev, pGetTextExtentExPoint); + return dev->funcs->pGetTextExtentExPoint(dev, str, count, dx); + } + + TRACE("%s %i\n", debugstr_wn(str, count), count); + + for (i = 0; i < count; ++i) + { + width += uv_metrics(str[i], pdev->font.fontinfo.Builtin.afm)->WX; + dx[i] = width * pdev->font.fontinfo.Builtin.scale; + } + return TRUE; +} + static NTSTATUS init_dc(void *arg) { struct init_dc_params *params = arg; @@ -1217,6 +1239,7 @@ static NTSTATUS init_dc(void *arg) params->funcs->pEnumFonts = enum_fonts; params->funcs->pGetCharWidth = get_char_width; params->funcs->pGetTextMetrics = get_text_metrics; + params->funcs->pGetTextExtentExPoint = get_text_extent_ex_point; return TRUE; }