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->charExtra = 0;
|
||||||
dc->breakExtra = 0;
|
dc->breakExtra = 0;
|
||||||
dc->breakRem = 0;
|
dc->breakRem = 0;
|
||||||
dc->MapMode = MM_TEXT;
|
dc->attr->map_mode = MM_TEXT;
|
||||||
dc->attr->graphics_mode = GM_COMPATIBLE;
|
dc->attr->graphics_mode = GM_COMPATIBLE;
|
||||||
dc->attr->cur_pos.x = 0;
|
dc->attr->cur_pos.x = 0;
|
||||||
dc->attr->cur_pos.y = 0;
|
dc->attr->cur_pos.y = 0;
|
||||||
|
@ -405,7 +405,6 @@ INT CDECL nulldrv_SaveDC( PHYSDEV dev )
|
||||||
newdc->charExtra = dc->charExtra;
|
newdc->charExtra = dc->charExtra;
|
||||||
newdc->breakExtra = dc->breakExtra;
|
newdc->breakExtra = dc->breakExtra;
|
||||||
newdc->breakRem = dc->breakRem;
|
newdc->breakRem = dc->breakRem;
|
||||||
newdc->MapMode = dc->MapMode;
|
|
||||||
newdc->xformWorld2Wnd = dc->xformWorld2Wnd;
|
newdc->xformWorld2Wnd = dc->xformWorld2Wnd;
|
||||||
newdc->xformWorld2Vport = dc->xformWorld2Vport;
|
newdc->xformWorld2Vport = dc->xformWorld2Vport;
|
||||||
newdc->xformVport2World = dc->xformVport2World;
|
newdc->xformVport2World = dc->xformVport2World;
|
||||||
|
@ -479,9 +478,9 @@ BOOL CDECL nulldrv_RestoreDC( PHYSDEV dev, INT level )
|
||||||
dc->charExtra = dcs->charExtra;
|
dc->charExtra = dcs->charExtra;
|
||||||
dc->breakExtra = dcs->breakExtra;
|
dc->breakExtra = dcs->breakExtra;
|
||||||
dc->breakRem = dcs->breakRem;
|
dc->breakRem = dcs->breakRem;
|
||||||
dc->MapMode = dcs->MapMode;
|
dc->attr->map_mode = dcs->attr->map_mode;
|
||||||
dc->attr->graphics_mode = dcs->attr->graphics_mode;
|
dc->attr->graphics_mode = dcs->attr->graphics_mode;
|
||||||
dc->attr->cur_pos = dcs->attr->cur_pos;
|
dc->attr->cur_pos = dcs->attr->cur_pos;
|
||||||
dc->attr->arc_direction = dcs->attr->arc_direction;
|
dc->attr->arc_direction = dcs->attr->arc_direction;
|
||||||
dc->xformWorld2Wnd = dcs->xformWorld2Wnd;
|
dc->xformWorld2Wnd = dcs->xformWorld2Wnd;
|
||||||
dc->xformWorld2Vport = dcs->xformWorld2Vport;
|
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.@)
|
* GetBrushOrgEx (GDI32.@)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -799,7 +799,7 @@ static DWORD CDECL nulldrv_SetLayout( PHYSDEV dev, DWORD layout )
|
||||||
dc->attr->layout = layout;
|
dc->attr->layout = layout;
|
||||||
if (layout != old_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 );
|
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,
|
TRACE("%p, %d, %d, %08x, %s, %s, %d, %p)\n", hdc, x, y, flags,
|
||||||
wine_dbgstr_rect(lprect), debugstr_wn(str, count), count, lpDx);
|
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)
|
if(align & TA_UPDATECP)
|
||||||
{
|
{
|
||||||
|
|
|
@ -164,6 +164,15 @@ DWORD WINAPI GetLayout( HDC hdc )
|
||||||
return dc_attr ? dc_attr->layout : GDI_ERROR;
|
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.@)
|
* GetPolyFillMode (GDI32.@)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -117,14 +117,14 @@ BOOL CDECL nulldrv_ScaleViewportExtEx( PHYSDEV dev, INT x_num, INT x_denom, INT
|
||||||
if (size)
|
if (size)
|
||||||
*size = dc->vport_ext;
|
*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;
|
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.cx = (dc->vport_ext.cx * x_num) / x_denom;
|
||||||
dc->vport_ext.cy = (dc->vport_ext.cy * y_num) / y_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.cx == 0) dc->vport_ext.cx = 1;
|
||||||
if (dc->vport_ext.cy == 0) dc->vport_ext.cy = 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 );
|
DC_UpdateXforms( dc );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -136,14 +136,14 @@ BOOL CDECL nulldrv_ScaleWindowExtEx( PHYSDEV dev, INT x_num, INT x_denom, INT y_
|
||||||
if (size)
|
if (size)
|
||||||
*size = dc->wnd_ext;
|
*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;
|
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.cx = (dc->wnd_ext.cx * x_num) / x_denom;
|
||||||
dc->wnd_ext.cy = (dc->wnd_ext.cy * y_num) / y_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.cx == 0) dc->wnd_ext.cx = 1;
|
||||||
if (dc->wnd_ext.cy == 0) dc->wnd_ext.cy = 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 );
|
DC_UpdateXforms( dc );
|
||||||
return TRUE;
|
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 )
|
INT CDECL nulldrv_SetMapMode( PHYSDEV dev, INT mode )
|
||||||
{
|
{
|
||||||
DC *dc = get_nulldrv_dc( dev );
|
DC *dc = get_nulldrv_dc( dev );
|
||||||
INT ret = dc->MapMode;
|
INT ret = dc->attr->map_mode;
|
||||||
SIZE virtual_size, virtual_res;
|
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_size = get_dc_virtual_size( dc );
|
||||||
virtual_res = get_dc_virtual_res( dc );
|
virtual_res = get_dc_virtual_res( dc );
|
||||||
|
@ -203,7 +203,7 @@ INT CDECL nulldrv_SetMapMode( PHYSDEV dev, INT mode )
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* RTL layout is always MM_ANISOTROPIC */
|
/* 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 );
|
DC_UpdateXforms( dc );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -215,11 +215,11 @@ BOOL CDECL nulldrv_SetViewportExtEx( PHYSDEV dev, INT cx, INT cy, SIZE *size )
|
||||||
if (size)
|
if (size)
|
||||||
*size = dc->vport_ext;
|
*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;
|
if (!cx || !cy) return FALSE;
|
||||||
dc->vport_ext.cx = cx;
|
dc->vport_ext.cx = cx;
|
||||||
dc->vport_ext.cy = cy;
|
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 );
|
DC_UpdateXforms( dc );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -244,14 +244,14 @@ BOOL CDECL nulldrv_SetWindowExtEx( PHYSDEV dev, INT cx, INT cy, SIZE *size )
|
||||||
if (size)
|
if (size)
|
||||||
*size = dc->wnd_ext;
|
*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;
|
if (!cx || !cy) return FALSE;
|
||||||
dc->wnd_ext.cx = cx;
|
dc->wnd_ext.cx = cx;
|
||||||
dc->wnd_ext.cy = cy;
|
dc->wnd_ext.cy = cy;
|
||||||
/* The API docs say that you should call SetWindowExtEx before
|
/* The API docs say that you should call SetWindowExtEx before
|
||||||
SetViewportExtEx. This advice does not imply that Windows
|
SetViewportExtEx. This advice does not imply that Windows
|
||||||
doesn't ensure the isotropic mapping after SetWindowExtEx! */
|
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 );
|
DC_UpdateXforms( dc );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,7 +124,6 @@ typedef struct tagDC
|
||||||
INT charExtra; /* Spacing from SetTextCharacterExtra() */
|
INT charExtra; /* Spacing from SetTextCharacterExtra() */
|
||||||
INT breakExtra; /* breakTotalExtra / breakCount */
|
INT breakExtra; /* breakTotalExtra / breakCount */
|
||||||
INT breakRem; /* breakTotalExtra % breakCount */
|
INT breakRem; /* breakTotalExtra % breakCount */
|
||||||
INT MapMode;
|
|
||||||
ABORTPROC pAbortProc; /* AbortProc for Printing */
|
ABORTPROC pAbortProc; /* AbortProc for Printing */
|
||||||
XFORM xformWorld2Wnd; /* World-to-window transformation */
|
XFORM xformWorld2Wnd; /* World-to-window transformation */
|
||||||
XFORM xformWorld2Vport; /* World-to-viewport transformation */
|
XFORM xformWorld2Vport; /* World-to-viewport transformation */
|
||||||
|
|
|
@ -111,6 +111,7 @@ typedef struct DC_ATTR
|
||||||
WORD rop_mode;
|
WORD rop_mode;
|
||||||
WORD rel_abs_mode;
|
WORD rel_abs_mode;
|
||||||
WORD stretch_blt_mode;
|
WORD stretch_blt_mode;
|
||||||
|
INT map_mode;
|
||||||
void *emf;
|
void *emf;
|
||||||
} DC_ATTR;
|
} DC_ATTR;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue