Jacek Caban : gdi32: Store char_extra in DC_ATTR.
Alexandre Julliard
julliard at winehq.org
Thu Aug 5 16:13:40 CDT 2021
Module: wine
Branch: master
Commit: ca07de0ed5f6da42db9eda8df90721aaa4d51edb
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ca07de0ed5f6da42db9eda8df90721aaa4d51edb
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Aug 5 11:26:13 2021 +0200
gdi32: Store char_extra in DC_ATTR.
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/dc.c | 5 ++---
dlls/gdi32/font.c | 28 ++++++++--------------------
dlls/gdi32/gdidc.c | 9 +++++++++
dlls/gdi32/ntgdi_private.h | 1 -
include/ntgdi.h | 1 +
5 files changed, 20 insertions(+), 24 deletions(-)
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index be3c2e741c4..5f2f129532c 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -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;
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index 039976dbc16..2590a30c10b 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -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 ));
}
diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c
index adef8f45aeb..0c2d794a576 100644
--- a/dlls/gdi32/gdidc.c
+++ b/dlls/gdi32/gdidc.c
@@ -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.@)
*/
diff --git a/dlls/gdi32/ntgdi_private.h b/dlls/gdi32/ntgdi_private.h
index 7270a158942..bf100ea4248 100644
--- a/dlls/gdi32/ntgdi_private.h
+++ b/dlls/gdi32/ntgdi_private.h
@@ -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 */
diff --git a/include/ntgdi.h b/include/ntgdi.h
index 8eb5562db80..7c183caf99f 100644
--- a/include/ntgdi.h
+++ b/include/ntgdi.h
@@ -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 */
More information about the wine-cvs
mailing list