Alexandre Julliard : gdi32: Remove from the GetTextExtentExPoint entry points parameters that can' t be handled by the driver.
Alexandre Julliard
julliard at winehq.org
Tue Dec 18 13:49:06 CST 2012
Module: wine
Branch: master
Commit: bbf3e8621ab2168032979489300122e54751b2c9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bbf3e8621ab2168032979489300122e54751b2c9
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Dec 18 17:52:37 2012 +0100
gdi32: Remove from the GetTextExtentExPoint entry points parameters that can't be handled by the driver.
---
dlls/gdi32/driver.c | 6 +---
dlls/gdi32/font.c | 4 +-
dlls/gdi32/freetype.c | 62 +++++++++++---------------------------------
dlls/wineps.drv/builtin.c | 26 +++----------------
dlls/wineps.drv/psdrv.h | 3 +-
include/wine/gdi_driver.h | 6 ++--
6 files changed, 28 insertions(+), 79 deletions(-)
diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index f5cadbe..6b68499 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -423,14 +423,12 @@ static UINT nulldrv_GetTextCharsetInfo( PHYSDEV dev, LPFONTSIGNATURE fs, DWORD f
return DEFAULT_CHARSET;
}
-static BOOL nulldrv_GetTextExtentExPoint( PHYSDEV dev, LPCWSTR str, INT count, INT max_ext,
- INT *fit, INT *dx, SIZE *size )
+static BOOL nulldrv_GetTextExtentExPoint( PHYSDEV dev, LPCWSTR str, INT count, INT *dx )
{
return FALSE;
}
-static BOOL nulldrv_GetTextExtentExPointI( PHYSDEV dev, const WORD *indices, INT count, INT max_ext,
- INT *fit, INT *dx, SIZE *size )
+static BOOL nulldrv_GetTextExtentExPointI( PHYSDEV dev, const WORD *indices, INT count, INT *dx )
{
return FALSE;
}
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index 3c609a2..3f79dff 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -320,7 +320,7 @@ static BOOL get_char_positions( DC *dc, const WCHAR *str, INT count, INT *dx, SI
dev = GET_DC_PHYSDEV( dc, pGetTextMetrics );
dev->funcs->pGetTextMetrics( dev, &tm );
- if (!dev->funcs->pGetTextExtentExPoint( dev, str, count, 0, NULL, dx, size )) return FALSE;
+ if (!dev->funcs->pGetTextExtentExPoint( dev, str, count, dx )) return FALSE;
if (dc->breakExtra || dc->breakRem)
{
@@ -357,7 +357,7 @@ static BOOL get_char_positions_indices( DC *dc, const WORD *indices, INT count,
dev = GET_DC_PHYSDEV( dc, pGetTextMetrics );
dev->funcs->pGetTextMetrics( dev, &tm );
- if (!dev->funcs->pGetTextExtentExPointI( dev, indices, count, 0, NULL, dx, size )) return FALSE;
+ if (!dev->funcs->pGetTextExtentExPointI( dev, indices, count, dx )) return FALSE;
if (dc->breakExtra || dc->breakRem)
{
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index 6c39b97..9b6a909 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -7134,97 +7134,67 @@ static BOOL freetype_GetCharABCWidthsI( PHYSDEV dev, UINT firstChar, UINT count,
/*************************************************************
* freetype_GetTextExtentExPoint
*/
-static BOOL freetype_GetTextExtentExPoint( PHYSDEV dev, LPCWSTR wstr, INT count,
- INT max_ext, LPINT pnfit, LPINT dxs, LPSIZE size)
+static BOOL freetype_GetTextExtentExPoint( PHYSDEV dev, LPCWSTR wstr, INT count, LPINT dxs )
{
static const MAT2 identity = { {0,1},{0,0},{0,0},{0,1} };
- INT idx;
- INT nfit = 0, ext;
+ INT idx, pos;
ABC abc;
GLYPHMETRICS gm;
- TEXTMETRICW tm;
struct freetype_physdev *physdev = get_freetype_dev( dev );
if (!physdev->font)
{
dev = GET_NEXT_PHYSDEV( dev, pGetTextExtentExPoint );
- return dev->funcs->pGetTextExtentExPoint( dev, wstr, count, max_ext, pnfit, dxs, size );
+ return dev->funcs->pGetTextExtentExPoint( dev, wstr, count, dxs );
}
- TRACE("%p, %s, %d, %d, %p\n", physdev->font, debugstr_wn(wstr, count), count, max_ext, size);
+ TRACE("%p, %s, %d\n", physdev->font, debugstr_wn(wstr, count), count);
GDI_CheckNotLock();
EnterCriticalSection( &freetype_cs );
- size->cx = 0;
- get_text_metrics( physdev->font, &tm );
- size->cy = tm.tmHeight;
-
- for(idx = 0; idx < count; idx++) {
+ for (idx = pos = 0; idx < count; idx++)
+ {
get_glyph_outline( physdev->font, wstr[idx], GGO_METRICS, &gm, &abc, 0, NULL, &identity );
- size->cx += abc.abcA + abc.abcB + abc.abcC;
- ext = size->cx;
- if (! pnfit || ext <= max_ext) {
- ++nfit;
- if (dxs)
- dxs[idx] = ext;
- }
+ pos += abc.abcA + abc.abcB + abc.abcC;
+ dxs[idx] = pos;
}
- if (pnfit)
- *pnfit = nfit;
-
LeaveCriticalSection( &freetype_cs );
- TRACE("return %d, %d, %d\n", size->cx, size->cy, nfit);
return TRUE;
}
/*************************************************************
* freetype_GetTextExtentExPointI
*/
-static BOOL freetype_GetTextExtentExPointI( PHYSDEV dev, const WORD *indices, INT count,
- INT max_ext, LPINT pnfit, LPINT dxs, LPSIZE size )
+static BOOL freetype_GetTextExtentExPointI( PHYSDEV dev, const WORD *indices, INT count, LPINT dxs )
{
static const MAT2 identity = { {0,1},{0,0},{0,0},{0,1} };
- INT idx;
- INT nfit = 0, ext;
+ INT idx, pos;
ABC abc;
GLYPHMETRICS gm;
- TEXTMETRICW tm;
struct freetype_physdev *physdev = get_freetype_dev( dev );
if (!physdev->font)
{
dev = GET_NEXT_PHYSDEV( dev, pGetTextExtentExPointI );
- return dev->funcs->pGetTextExtentExPointI( dev, indices, count, max_ext, pnfit, dxs, size );
+ return dev->funcs->pGetTextExtentExPointI( dev, indices, count, dxs );
}
- TRACE("%p, %p, %d, %d, %p\n", physdev->font, indices, count, max_ext, size);
+ TRACE("%p, %p, %d\n", physdev->font, indices, count);
GDI_CheckNotLock();
EnterCriticalSection( &freetype_cs );
- size->cx = 0;
- get_text_metrics(physdev->font, &tm);
- size->cy = tm.tmHeight;
-
- for(idx = 0; idx < count; idx++) {
+ for (idx = pos = 0; idx < count; idx++)
+ {
get_glyph_outline( physdev->font, indices[idx], GGO_METRICS | GGO_GLYPH_INDEX,
&gm, &abc, 0, NULL, &identity );
- size->cx += abc.abcA + abc.abcB + abc.abcC;
- ext = size->cx;
- if (! pnfit || ext <= max_ext) {
- ++nfit;
- if (dxs)
- dxs[idx] = ext;
- }
+ pos += abc.abcA + abc.abcB + abc.abcC;
+ dxs[idx] = pos;
}
- if (pnfit)
- *pnfit = nfit;
-
LeaveCriticalSection( &freetype_cs );
- TRACE("return %d, %d, %d\n", size->cx, size->cy, nfit);
return TRUE;
}
diff --git a/dlls/wineps.drv/builtin.c b/dlls/wineps.drv/builtin.c
index 873a473..e2106d3 100644
--- a/dlls/wineps.drv/builtin.c
+++ b/dlls/wineps.drv/builtin.c
@@ -317,43 +317,25 @@ const AFMMETRICS *PSDRV_UVMetrics(LONG UV, const AFM *afm)
/***********************************************************************
* PSDRV_GetTextExtentExPoint
*/
-BOOL PSDRV_GetTextExtentExPoint(PHYSDEV dev, LPCWSTR str, INT count,
- INT maxExt, LPINT lpnFit, LPINT alpDx, LPSIZE size)
+BOOL PSDRV_GetTextExtentExPoint(PHYSDEV dev, LPCWSTR str, INT count, LPINT alpDx)
{
PSDRV_PDEVICE *physDev = get_psdrv_dev( dev );
- int nfit = 0;
int i;
float width = 0.0;
- float scale;
if (physDev->font.fontloc == Download)
{
dev = GET_NEXT_PHYSDEV( dev, pGetTextExtentExPoint );
- return dev->funcs->pGetTextExtentExPoint( dev, str, count, maxExt, lpnFit, alpDx, size );
+ return dev->funcs->pGetTextExtentExPoint( dev, str, count, alpDx );
}
TRACE("%s %i\n", debugstr_wn(str, count), count);
- scale = physDev->font.fontinfo.Builtin.scale;
- for (i = 0; i < count && str[i] != '\0'; ++i)
+ for (i = 0; i < count; ++i)
{
- float scaled_width;
width += PSDRV_UVMetrics(str[i], physDev->font.fontinfo.Builtin.afm)->WX;
- scaled_width = width * scale;
- if (alpDx)
- alpDx[i] = scaled_width;
- if (scaled_width <= maxExt)
- ++nfit;
+ alpDx[i] = width * physDev->font.fontinfo.Builtin.scale;
}
-
- size->cx = width * physDev->font.fontinfo.Builtin.scale;
- size->cy = physDev->font.fontinfo.Builtin.tm.tmHeight;
-
- if (lpnFit)
- *lpnFit = nfit;
-
- TRACE("cx=%i cy=%i\n", size->cx, size->cy);
-
return TRUE;
}
diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h
index bfc2ad6..428f7ba 100644
--- a/dlls/wineps.drv/psdrv.h
+++ b/dlls/wineps.drv/psdrv.h
@@ -425,8 +425,7 @@ extern BOOL PSDRV_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags,
const RECT *lprect, LPCWSTR str, UINT count, const INT *lpDx ) DECLSPEC_HIDDEN;
extern BOOL PSDRV_FillPath( PHYSDEV dev ) DECLSPEC_HIDDEN;
extern BOOL PSDRV_GetCharWidth(PHYSDEV dev, UINT firstChar, UINT lastChar, LPINT buffer) DECLSPEC_HIDDEN;
-extern BOOL PSDRV_GetTextExtentExPoint(PHYSDEV dev, LPCWSTR str, INT count,
- INT maxExt, LPINT lpnFit, LPINT alpDx, LPSIZE size) DECLSPEC_HIDDEN;
+extern BOOL PSDRV_GetTextExtentExPoint(PHYSDEV dev, LPCWSTR str, INT count, LPINT alpDx) DECLSPEC_HIDDEN;
extern BOOL PSDRV_GetTextMetrics(PHYSDEV dev, TEXTMETRICW *metrics) DECLSPEC_HIDDEN;
extern BOOL PSDRV_LineTo(PHYSDEV dev, INT x, INT y) DECLSPEC_HIDDEN;
extern BOOL PSDRV_PaintRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN;
diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h
index f6be211d..fffbad0 100644
--- a/include/wine/gdi_driver.h
+++ b/include/wine/gdi_driver.h
@@ -116,8 +116,8 @@ struct gdi_dc_funcs
COLORREF (*pGetPixel)(PHYSDEV,INT,INT);
UINT (*pGetSystemPaletteEntries)(PHYSDEV,UINT,UINT,LPPALETTEENTRY);
UINT (*pGetTextCharsetInfo)(PHYSDEV,LPFONTSIGNATURE,DWORD);
- BOOL (*pGetTextExtentExPoint)(PHYSDEV,LPCWSTR,INT,INT,LPINT,LPINT,LPSIZE);
- BOOL (*pGetTextExtentExPointI)(PHYSDEV,const WORD*,INT,INT,LPINT,LPINT,LPSIZE);
+ BOOL (*pGetTextExtentExPoint)(PHYSDEV,LPCWSTR,INT,LPINT);
+ BOOL (*pGetTextExtentExPointI)(PHYSDEV,const WORD*,INT,LPINT);
INT (*pGetTextFace)(PHYSDEV,INT,LPWSTR);
BOOL (*pGetTextMetrics)(PHYSDEV,TEXTMETRICW*);
BOOL (*pGradientFill)(PHYSDEV,TRIVERTEX*,ULONG,void*,ULONG,ULONG);
@@ -197,7 +197,7 @@ struct gdi_dc_funcs
};
/* increment this when you change the DC function table */
-#define WINE_GDI_DRIVER_VERSION 45
+#define WINE_GDI_DRIVER_VERSION 46
#define GDI_PRIORITY_NULL_DRV 0 /* null driver */
#define GDI_PRIORITY_FONT_DRV 100 /* any font driver */
More information about the wine-cvs
mailing list