Jacek Caban : gdi32: Use NtGdiGetCharWidthW for GetCharWidthFloatW.
Alexandre Julliard
julliard at winehq.org
Thu Aug 26 15:22:31 CDT 2021
Module: wine
Branch: master
Commit: e5f5e7342d99c8363a84e316b7d81d967686ac76
URL: https://source.winehq.org/git/wine.git/?a=commit;h=e5f5e7342d99c8363a84e316b7d81d967686ac76
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Aug 26 13:45:16 2021 +0100
gdi32: Use NtGdiGetCharWidthW for GetCharWidthFloatW.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/gdi32/font.c | 50 +++++++++++++-------------------------------------
dlls/gdi32/text.c | 8 ++++++++
2 files changed, 21 insertions(+), 37 deletions(-)
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index 7e4d67af8ae..cbf3f6fb555 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -4882,10 +4882,19 @@ BOOL WINAPI NtGdiGetCharWidthW( HDC hdc, UINT first, UINT last, WCHAR *chars,
if (ret)
{
- INT *buffer = buf;
- /* convert device units to logical */
- for (i = 0; i < count; i++)
- buffer[i] = width_to_LP( dc, buffer[i] );
+ if (flags & NTGDI_GETCHARWIDTH_INT)
+ {
+ INT *buffer = buf;
+ /* convert device units to logical */
+ for (i = 0; i < count; i++)
+ buffer[i] = width_to_LP( dc, buffer[i] );
+ }
+ else
+ {
+ float scale = fabs( dc->xformVport2World.eM11 ) / 16.0f;
+ for (i = 0; i < count; i++)
+ ((float *)buf)[i] = ((int *)buf)[i] * scale;
+ }
}
release_dc_ptr( dc );
return ret;
@@ -6460,39 +6469,6 @@ BOOL WINAPI GetCharWidthFloatA( HDC hdc, UINT first, UINT last, float *buffer )
return TRUE;
}
-/*************************************************************************
- * GetCharWidthFloatW [GDI32.@]
- */
-BOOL WINAPI GetCharWidthFloatW( HDC hdc, UINT first, UINT last, float *buffer )
-{
- DC *dc = get_dc_ptr( hdc );
- int *ibuffer;
- PHYSDEV dev;
- BOOL ret;
- UINT i;
-
- TRACE("dc %p, first %#x, last %#x, buffer %p\n", dc, first, last, buffer);
-
- if (!dc) return FALSE;
-
- if (!(ibuffer = heap_alloc( (last - first + 1) * sizeof(int) )))
- {
- release_dc_ptr( dc );
- return FALSE;
- }
-
- dev = GET_DC_PHYSDEV( dc, pGetCharWidth );
- if ((ret = dev->funcs->pGetCharWidth( dev, first, last - first + 1, NULL, ibuffer )))
- {
- float scale = fabs( dc->xformVport2World.eM11 ) / 16.0f;
- for (i = first; i <= last; ++i)
- buffer[i - first] = ibuffer[i - first] * scale;
- }
-
- heap_free(ibuffer);
- return ret;
-}
-
/***********************************************************************
* *
* Font Resource API *
diff --git a/dlls/gdi32/text.c b/dlls/gdi32/text.c
index 0bb47f00c24..b753dac7052 100644
--- a/dlls/gdi32/text.c
+++ b/dlls/gdi32/text.c
@@ -1649,3 +1649,11 @@ BOOL WINAPI GetCharWidth32A( HDC hdc, UINT first, UINT last, INT *buffer )
HeapFree( GetProcessHeap(), 0, chars );
return ret;
}
+
+/***********************************************************************
+ * GetCharWidthFloatW (GDI32.@)
+ */
+BOOL WINAPI GetCharWidthFloatW( HDC hdc, UINT first, UINT last, float *buffer )
+{
+ return NtGdiGetCharWidthW( hdc, first, last, NULL, 0, buffer );
+}
More information about the wine-cvs
mailing list