Commit 43a605cc authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

gdi32: Store map mode in DC_ATTR.

parent 7517fdf2
......@@ -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;
......@@ -1393,22 +1392,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.@)
*/
BOOL WINAPI GetBrushOrgEx( HDC hdc, LPPOINT pt )
......
......@@ -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 );
}
......
......@@ -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)
{
......
......@@ -165,6 +165,15 @@ DWORD WINAPI GetLayout( HDC hdc )
}
/***********************************************************************
* 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.@)
*/
INT WINAPI GetPolyFillMode( HDC hdc )
......
......@@ -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;
}
......
......@@ -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 */
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment