Jacek Caban : gdi32: Store font code page in DC_ATTR.

Alexandre Julliard julliard at winehq.org
Fri Aug 20 16:12:55 CDT 2021


Module: wine
Branch: master
Commit: 7ad7ec5b8b903733bc521cfdc1200bf4d76fb182
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7ad7ec5b8b903733bc521cfdc1200bf4d76fb182

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Aug 20 10:42:24 2021 +0200

gdi32: Store font code page 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            |  2 +-
 dlls/gdi32/font.c          | 28 ++++++----------------------
 dlls/gdi32/ntgdi_private.h |  1 -
 dlls/gdi32/text.c          |  9 +++++++++
 include/ntgdi.h            |  1 +
 5 files changed, 17 insertions(+), 24 deletions(-)

diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index 51b754d1ccd..e4f643389d5 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -80,8 +80,8 @@ static void set_initial_dc_state( DC *dc )
     dc->attr->vport_ext.cy  = 1;
     dc->attr->miter_limit   = 10.0f; /* 10.0 is the default, from MSDN */
     dc->attr->layout        = 0;
-    dc->font_code_page      = CP_ACP;
     dc->attr->rop_mode      = R2_COPYPEN;
+    dc->attr->font_code_page   = CP_ACP;
     dc->attr->poly_fill_mode   = ALTERNATE;
     dc->attr->stretch_blt_mode = BLACKONWHITE;
     dc->attr->rel_abs_mode     = ABSOLUTE;
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index bfb27ccd1af..e267190fb64 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -4163,22 +4163,6 @@ static BOOL get_char_positions_indices( DC *dc, const WORD *indices, INT count,
     return TRUE;
 }
 
-/***********************************************************************
- *           GdiGetCodePage   (GDI32.@)
- */
-DWORD WINAPI GdiGetCodePage( HDC hdc )
-{
-    UINT cp = CP_ACP;
-    DC *dc = get_dc_ptr( hdc );
-
-    if (dc)
-    {
-        cp = dc->font_code_page;
-        release_dc_ptr( dc );
-    }
-    return cp;
-}
-
 /***********************************************************************
  *           get_text_charset_info
  *
@@ -4457,14 +4441,14 @@ static void update_font_code_page( DC *dc, HANDLE font )
 
     /* Hmm, nicely designed api this one! */
     if (TranslateCharsetInfo( ULongToPtr(charset), &csi, TCI_SRCCHARSET) )
-        dc->font_code_page = csi.ciACP;
+        dc->attr->font_code_page = csi.ciACP;
     else {
         switch(charset) {
         case OEM_CHARSET:
-            dc->font_code_page = GetOEMCP();
+            dc->attr->font_code_page = GetOEMCP();
             break;
         case DEFAULT_CHARSET:
-            dc->font_code_page = GetACP();
+            dc->attr->font_code_page = GetACP();
             break;
 
         case VISCII_CHARSET:
@@ -4481,17 +4465,17 @@ static void update_font_code_page( DC *dc, HANDLE font )
                each of these, but since it's broken anyway we'll just
                use CP_ACP and hope it'll go away...
             */
-            dc->font_code_page = CP_ACP;
+            dc->attr->font_code_page = CP_ACP;
             break;
 
         default:
             FIXME("Can't find codepage for charset %d\n", charset);
-            dc->font_code_page = CP_ACP;
+            dc->attr->font_code_page = CP_ACP;
             break;
         }
     }
 
-    TRACE("charset %d => cp %d\n", charset, dc->font_code_page);
+    TRACE( "charset %d => cp %d\n", charset, dc->attr->font_code_page );
 }
 
 /***********************************************************************
diff --git a/dlls/gdi32/ntgdi_private.h b/dlls/gdi32/ntgdi_private.h
index 522bd51b6cc..91230666fad 100644
--- a/dlls/gdi32/ntgdi_private.h
+++ b/dlls/gdi32/ntgdi_private.h
@@ -99,7 +99,6 @@ typedef struct tagDC
 
     const struct font_gamma_ramp *font_gamma_ramp;
 
-    UINT          font_code_page;
     INT           breakExtra;        /* breakTotalExtra / breakCount */
     INT           breakRem;          /* breakTotalExtra % breakCount */
     ABORTPROC     pAbortProc;        /* AbortProc for Printing */
diff --git a/dlls/gdi32/text.c b/dlls/gdi32/text.c
index 2d3902d2433..ffbc9806e78 100644
--- a/dlls/gdi32/text.c
+++ b/dlls/gdi32/text.c
@@ -737,6 +737,15 @@ static void text_metric_WtoA( const TEXTMETRICW *tmW, TEXTMETRICA *tmA )
     tmA->tmCharSet = tmW->tmCharSet;
 }
 
+/***********************************************************************
+ *           GdiGetCodePage   (GDI32.@)
+ */
+DWORD WINAPI GdiGetCodePage( HDC hdc )
+{
+    DC_ATTR *dc_attr = get_dc_attr( hdc );
+    return dc_attr ? dc_attr->font_code_page : CP_ACP;
+}
+
 /***********************************************************************
  *           ExtTextOutW    (GDI32.@)
  */
diff --git a/include/ntgdi.h b/include/ntgdi.h
index 52eb0767617..14808593501 100644
--- a/include/ntgdi.h
+++ b/include/ntgdi.h
@@ -156,6 +156,7 @@ typedef struct DC_ATTR
     SIZE      vport_ext;           /* viewport extent */
     SIZE      virtual_res;
     SIZE      virtual_size;
+    UINT      font_code_page;
     void     *emf;
 } DC_ATTR;
 




More information about the wine-cvs mailing list