gdi32: Store map mode in DC_ATTR.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
7517fdf229
commit
43a605cc9b
|
@ -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.@)
|
||||
*/
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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.@)
|
||||
*/
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue