[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