[PATCH v2 09/10] gdi32: Store map mode in DC_ATTR.

Huw Davies huw at codeweavers.com
Thu Jul 29 07:22:04 CDT 2021


From: Jacek Caban <jacek at codeweavers.com>

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/gdi32/dc.c            | 25 ++++---------------------
 dlls/gdi32/driver.c        |  2 +-
 dlls/gdi32/font.c          |  3 ++-
 dlls/gdi32/gdidc.c         |  9 +++++++++
 dlls/gdi32/mapping.c       | 22 +++++++++++-----------
 dlls/gdi32/ntgdi_private.h |  1 -
 include/ntgdi.h            |  1 +
 7 files changed, 28 insertions(+), 35 deletions(-)

diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index 3c9dca8c512..bae1e9d21ab 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -98,7 +98,7 @@ static void set_initial_dc_state( DC *dc )
     dc->charExtra           = 0;
     dc->breakExtra          = 0;
     dc->breakRem            = 0;
-    dc->MapMode             = MM_TEXT;
+    dc->attr->map_mode      = MM_TEXT;
     dc->attr->graphics_mode = GM_COMPATIBLE;
     dc->attr->cur_pos.x     = 0;
     dc->attr->cur_pos.y     = 0;
@@ -405,7 +405,6 @@ INT CDECL nulldrv_SaveDC( PHYSDEV dev )
     newdc->charExtra        = dc->charExtra;
     newdc->breakExtra       = dc->breakExtra;
     newdc->breakRem         = dc->breakRem;
-    newdc->MapMode          = dc->MapMode;
     newdc->xformWorld2Wnd   = dc->xformWorld2Wnd;
     newdc->xformWorld2Vport = dc->xformWorld2Vport;
     newdc->xformVport2World = dc->xformVport2World;
@@ -479,9 +478,9 @@ BOOL CDECL nulldrv_RestoreDC( PHYSDEV dev, INT level )
     dc->charExtra        = dcs->charExtra;
     dc->breakExtra       = dcs->breakExtra;
     dc->breakRem         = dcs->breakRem;
-    dc->MapMode          = dcs->MapMode;
-    dc->attr->graphics_mode = dcs->attr->graphics_mode;
-    dc->attr->cur_pos    = dcs->attr->cur_pos;
+    dc->attr->map_mode         = dcs->attr->map_mode;
+    dc->attr->graphics_mode    = dcs->attr->graphics_mode;
+    dc->attr->cur_pos          = dcs->attr->cur_pos;
     dc->attr->arc_direction    = dcs->attr->arc_direction;
     dc->xformWorld2Wnd   = dcs->xformWorld2Wnd;
     dc->xformWorld2Vport = dcs->xformWorld2Vport;
@@ -1392,22 +1391,6 @@ UINT WINAPI SetBoundsRect(HDC hdc, const RECT* rect, UINT flags)
 }
 
 
-/***********************************************************************
- *		GetMapMode (GDI32.@)
- */
-INT WINAPI GetMapMode( HDC hdc )
-{
-    INT ret = 0;
-    DC * dc = get_dc_ptr( hdc );
-    if (dc)
-    {
-        ret = dc->MapMode;
-        release_dc_ptr( dc );
-    }
-    return ret;
-}
-
-
 /***********************************************************************
  *		GetBrushOrgEx (GDI32.@)
  */
diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index 851e80b1cd9..b5cb80dce65 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -799,7 +799,7 @@ static DWORD CDECL nulldrv_SetLayout( PHYSDEV dev, DWORD layout )
     dc->attr->layout = layout;
     if (layout != old_layout)
     {
-        if (layout & LAYOUT_RTL) dc->MapMode = MM_ANISOTROPIC;
+        if (layout & LAYOUT_RTL) dc->attr->map_mode = MM_ANISOTROPIC;
         DC_UpdateXforms( dc );
     }
 
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index 6e4a52fec02..fd1f25025b6 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -5995,7 +5995,8 @@ BOOL WINAPI NtGdiExtTextOutW( HDC hdc, INT x, INT y, UINT flags, const RECT *lpr
 
     TRACE("%p, %d, %d, %08x, %s, %s, %d, %p)\n", hdc, x, y, flags,
           wine_dbgstr_rect(lprect), debugstr_wn(str, count), count, lpDx);
-    TRACE("align = %x bkmode = %x mapmode = %x\n", align, dc->attr->background_mode, dc->MapMode);
+    TRACE("align = %x bkmode = %x mapmode = %x\n", align, dc->attr->background_mode,
+          dc->attr->map_mode);
 
     if(align & TA_UPDATECP)
     {
diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c
index 35986dba37e..bbd172239cd 100644
--- a/dlls/gdi32/gdidc.c
+++ b/dlls/gdi32/gdidc.c
@@ -164,6 +164,15 @@ DWORD WINAPI GetLayout( HDC hdc )
     return dc_attr ? dc_attr->layout : GDI_ERROR;
 }
 
+/***********************************************************************
+ *           GetMapMode  (GDI32.@)
+ */
+INT WINAPI GetMapMode( HDC hdc )
+{
+    DC_ATTR *dc_attr = get_dc_attr( hdc );
+    return dc_attr ? dc_attr->map_mode : 0;
+}
+
 /***********************************************************************
  *		GetPolyFillMode  (GDI32.@)
  */
diff --git a/dlls/gdi32/mapping.c b/dlls/gdi32/mapping.c
index b2148fa3bae..b7a615cbf79 100644
--- a/dlls/gdi32/mapping.c
+++ b/dlls/gdi32/mapping.c
@@ -117,14 +117,14 @@ BOOL CDECL nulldrv_ScaleViewportExtEx( PHYSDEV dev, INT x_num, INT x_denom, INT
     if (size)
         *size = dc->vport_ext;
 
-    if (dc->MapMode != MM_ISOTROPIC && dc->MapMode != MM_ANISOTROPIC) return TRUE;
+    if (dc->attr->map_mode != MM_ISOTROPIC && dc->attr->map_mode != MM_ANISOTROPIC) return TRUE;
     if (!x_num || !x_denom || !y_num || !y_denom) return FALSE;
 
     dc->vport_ext.cx = (dc->vport_ext.cx * x_num) / x_denom;
     dc->vport_ext.cy = (dc->vport_ext.cy * y_num) / y_denom;
     if (dc->vport_ext.cx == 0) dc->vport_ext.cx = 1;
     if (dc->vport_ext.cy == 0) dc->vport_ext.cy = 1;
-    if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
+    if (dc->attr->map_mode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
     DC_UpdateXforms( dc );
     return TRUE;
 }
@@ -136,14 +136,14 @@ BOOL CDECL nulldrv_ScaleWindowExtEx( PHYSDEV dev, INT x_num, INT x_denom, INT y_
     if (size)
         *size = dc->wnd_ext;
 
-    if (dc->MapMode != MM_ISOTROPIC && dc->MapMode != MM_ANISOTROPIC) return TRUE;
+    if (dc->attr->map_mode != MM_ISOTROPIC && dc->attr->map_mode != MM_ANISOTROPIC) return TRUE;
     if (!x_num || !x_denom || !y_num || !y_denom) return FALSE;
 
     dc->wnd_ext.cx = (dc->wnd_ext.cx * x_num) / x_denom;
     dc->wnd_ext.cy = (dc->wnd_ext.cy * y_num) / y_denom;
     if (dc->wnd_ext.cx == 0) dc->wnd_ext.cx = 1;
     if (dc->wnd_ext.cy == 0) dc->wnd_ext.cy = 1;
-    if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
+    if (dc->attr->map_mode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
     DC_UpdateXforms( dc );
     return TRUE;
 }
@@ -151,10 +151,10 @@ BOOL CDECL nulldrv_ScaleWindowExtEx( PHYSDEV dev, INT x_num, INT x_denom, INT y_
 INT CDECL nulldrv_SetMapMode( PHYSDEV dev, INT mode )
 {
     DC *dc = get_nulldrv_dc( dev );
-    INT ret = dc->MapMode;
+    INT ret = dc->attr->map_mode;
     SIZE virtual_size, virtual_res;
 
-    if (mode == dc->MapMode && (mode == MM_ISOTROPIC || mode == MM_ANISOTROPIC)) return ret;
+    if (mode == dc->attr->map_mode && (mode == MM_ISOTROPIC || mode == MM_ANISOTROPIC)) return ret;
 
     virtual_size = get_dc_virtual_size( dc );
     virtual_res = get_dc_virtual_res( dc );
@@ -203,7 +203,7 @@ INT CDECL nulldrv_SetMapMode( PHYSDEV dev, INT mode )
         return 0;
     }
     /* RTL layout is always MM_ANISOTROPIC */
-    if (!(dc->attr->layout & LAYOUT_RTL)) dc->MapMode = mode;
+    if (!(dc->attr->layout & LAYOUT_RTL)) dc->attr->map_mode = mode;
     DC_UpdateXforms( dc );
     return ret;
 }
@@ -215,11 +215,11 @@ BOOL CDECL nulldrv_SetViewportExtEx( PHYSDEV dev, INT cx, INT cy, SIZE *size )
     if (size)
         *size = dc->vport_ext;
 
-    if (dc->MapMode != MM_ISOTROPIC && dc->MapMode != MM_ANISOTROPIC) return TRUE;
+    if (dc->attr->map_mode != MM_ISOTROPIC && dc->attr->map_mode != MM_ANISOTROPIC) return TRUE;
     if (!cx || !cy) return FALSE;
     dc->vport_ext.cx = cx;
     dc->vport_ext.cy = cy;
-    if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
+    if (dc->attr->map_mode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
     DC_UpdateXforms( dc );
     return TRUE;
 }
@@ -244,14 +244,14 @@ BOOL CDECL nulldrv_SetWindowExtEx( PHYSDEV dev, INT cx, INT cy, SIZE *size )
     if (size)
         *size = dc->wnd_ext;
 
-    if (dc->MapMode != MM_ISOTROPIC && dc->MapMode != MM_ANISOTROPIC) return TRUE;
+    if (dc->attr->map_mode != MM_ISOTROPIC && dc->attr->map_mode != MM_ANISOTROPIC) return TRUE;
     if (!cx || !cy) return FALSE;
     dc->wnd_ext.cx = cx;
     dc->wnd_ext.cy = cy;
     /* The API docs say that you should call SetWindowExtEx before
        SetViewportExtEx. This advice does not imply that Windows
        doesn't ensure the isotropic mapping after SetWindowExtEx! */
-    if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
+    if (dc->attr->map_mode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
     DC_UpdateXforms( dc );
     return TRUE;
 }
diff --git a/dlls/gdi32/ntgdi_private.h b/dlls/gdi32/ntgdi_private.h
index cb7a8e7f7c9..19a5819f031 100644
--- a/dlls/gdi32/ntgdi_private.h
+++ b/dlls/gdi32/ntgdi_private.h
@@ -124,7 +124,6 @@ typedef struct tagDC
     INT           charExtra;         /* Spacing from SetTextCharacterExtra() */
     INT           breakExtra;        /* breakTotalExtra / breakCount */
     INT           breakRem;          /* breakTotalExtra % breakCount */
-    INT           MapMode;
     ABORTPROC     pAbortProc;        /* AbortProc for Printing */
     XFORM         xformWorld2Wnd;    /* World-to-window transformation */
     XFORM         xformWorld2Vport;  /* World-to-viewport transformation */
diff --git a/include/ntgdi.h b/include/ntgdi.h
index a4ed8b6aec9..08df860a5e6 100644
--- a/include/ntgdi.h
+++ b/include/ntgdi.h
@@ -111,6 +111,7 @@ typedef struct DC_ATTR
     WORD      rop_mode;
     WORD      rel_abs_mode;
     WORD      stretch_blt_mode;
+    INT       map_mode;
     void     *emf;
 } DC_ATTR;
 
-- 
2.25.1




More information about the wine-devel mailing list