gdi32: Store char_extra in DC_ATTR.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Jacek Caban 2021-08-05 11:26:13 +02:00 committed by Alexandre Julliard
parent f7824d4382
commit ca07de0ed5
5 changed files with 20 additions and 24 deletions

View File

@ -95,7 +95,7 @@ static void set_initial_dc_state( DC *dc )
dc->attr->brush_org.y = 0;
dc->mapperFlags = 0;
dc->attr->text_align = TA_LEFT | TA_TOP | TA_NOUPDATECP;
dc->charExtra = 0;
dc->attr->char_extra = 0;
dc->breakExtra = 0;
dc->breakRem = 0;
dc->attr->map_mode = MM_TEXT;
@ -413,7 +413,7 @@ BOOL CDECL nulldrv_RestoreDC( PHYSDEV dev, INT level )
dc->attr->brush_org = dcs->attr->brush_org;
dc->mapperFlags = dcs->mapperFlags;
dc->attr->text_align = dcs->attr->text_align;
dc->charExtra = dcs->charExtra;
dc->attr->char_extra = dcs->attr->char_extra;
dc->breakExtra = dcs->breakExtra;
dc->breakRem = dcs->breakRem;
dc->attr->map_mode = dcs->attr->map_mode;
@ -545,7 +545,6 @@ INT WINAPI NtGdiSaveDC( HDC hdc )
newdc->hBitmap = dc->hBitmap;
newdc->hPalette = dc->hPalette;
newdc->mapperFlags = dc->mapperFlags;
newdc->charExtra = dc->charExtra;
newdc->breakExtra = dc->breakExtra;
newdc->breakRem = dc->breakRem;
newdc->xformWorld2Wnd = dc->xformWorld2Wnd;

View File

@ -4735,20 +4735,6 @@ INT WINAPI EnumFontsW( HDC hDC, LPCWSTR lpName, FONTENUMPROCW efproc,
}
/***********************************************************************
* GetTextCharacterExtra (GDI32.@)
*/
INT WINAPI GetTextCharacterExtra( HDC hdc )
{
INT ret;
DC *dc = get_dc_ptr( hdc );
if (!dc) return 0x80000000;
ret = dc->charExtra;
release_dc_ptr( dc );
return ret;
}
/***********************************************************************
* SetTextCharacterExtra (GDI32.@)
*/
@ -4763,8 +4749,8 @@ INT WINAPI SetTextCharacterExtra( HDC hdc, INT extra )
extra = physdev->funcs->pSetTextCharacterExtra( physdev, extra );
if (extra != 0x80000000)
{
ret = dc->charExtra;
dc->charExtra = extra;
ret = dc->attr->char_extra;
dc->attr->char_extra = extra;
}
release_dc_ptr( dc );
}
@ -4943,14 +4929,15 @@ BOOL WINAPI GetTextExtentExPointI( HDC hdc, const WORD *indices, INT count, INT
{
for (i = 0; i < count; i++)
{
unsigned int dx = abs( INTERNAL_XDSTOWS( dc, pos[i] )) + (i + 1) * dc->charExtra;
unsigned int dx = abs( INTERNAL_XDSTOWS( dc, pos[i] )) +
(i + 1) * dc->attr->char_extra;
if (nfit && dx > (unsigned int)max_ext) break;
if (dxs) dxs[i] = dx;
}
if (nfit) *nfit = i;
}
size->cx = abs( INTERNAL_XDSTOWS( dc, size->cx )) + count * dc->charExtra;
size->cx = abs( INTERNAL_XDSTOWS( dc, size->cx )) + count * dc->attr->char_extra;
size->cy = abs( INTERNAL_YDSTOWS( dc, size->cy ));
}
@ -5080,14 +5067,15 @@ BOOL WINAPI GetTextExtentExPointW( HDC hdc, LPCWSTR str, INT count, INT max_ext,
{
for (i = 0; i < count; i++)
{
unsigned int dx = abs( INTERNAL_XDSTOWS( dc, pos[i] )) + (i + 1) * dc->charExtra;
unsigned int dx = abs( INTERNAL_XDSTOWS( dc, pos[i] )) +
(i + 1) * dc->attr->char_extra;
if (nfit && dx > (unsigned int)max_ext) break;
if (dxs) dxs[i] = dx;
}
if (nfit) *nfit = i;
}
size->cx = abs( INTERNAL_XDSTOWS( dc, size->cx )) + count * dc->charExtra;
size->cx = abs( INTERNAL_XDSTOWS( dc, size->cx )) + count * dc->attr->char_extra;
size->cy = abs( INTERNAL_YDSTOWS( dc, size->cy ));
}

View File

@ -305,6 +305,15 @@ INT WINAPI SetMapMode( HDC hdc, INT mode )
return NtGdiGetAndSetDCDword( hdc, NtGdiSetMapMode, mode, &ret ) ? ret : 0;
}
/***********************************************************************
* GetTextCharacterExtra (GDI32.@)
*/
INT WINAPI GetTextCharacterExtra( HDC hdc )
{
DC_ATTR *dc_attr = get_dc_attr( hdc );
return dc_attr ? dc_attr->char_extra : 0x80000000;
}
/***********************************************************************
* GetPolyFillMode (GDI32.@)
*/

View File

@ -111,7 +111,6 @@ typedef struct tagDC
UINT font_code_page;
DWORD mapperFlags; /* Font mapper flags */
INT charExtra; /* Spacing from SetTextCharacterExtra() */
INT breakExtra; /* breakTotalExtra / breakCount */
INT breakRem; /* breakTotalExtra % breakCount */
ABORTPROC pAbortProc; /* AbortProc for Printing */

View File

@ -125,6 +125,7 @@ typedef struct DC_ATTR
WORD rel_abs_mode;
WORD stretch_blt_mode;
INT map_mode;
INT char_extra;
RECT vis_rect; /* visible rectangle in screen coords */
FLOAT miter_limit;
POINT brush_org; /* brush origin */