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