gdi32: Implement GetTransform for the other valid transform types.
This commit is contained in:
parent
c87200f6a7
commit
6260af2a7c
@ -284,6 +284,20 @@ static BOOL DC_InvertXform( const XFORM *xformSrc, XFORM *xformDest )
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Construct a transformation to do the window-to-viewport conversion */
|
||||||
|
static void construct_window_to_viewport(DC *dc, XFORM *xform)
|
||||||
|
{
|
||||||
|
double scaleX, scaleY;
|
||||||
|
scaleX = (double)dc->vportExtX / (double)dc->wndExtX;
|
||||||
|
scaleY = (double)dc->vportExtY / (double)dc->wndExtY;
|
||||||
|
|
||||||
|
xform->eM11 = scaleX;
|
||||||
|
xform->eM12 = 0.0;
|
||||||
|
xform->eM21 = 0.0;
|
||||||
|
xform->eM22 = scaleY;
|
||||||
|
xform->eDx = (double)dc->vportOrgX - scaleX * (double)dc->wndOrgX;
|
||||||
|
xform->eDy = (double)dc->vportOrgY - scaleY * (double)dc->wndOrgY;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DC_UpdateXforms
|
* DC_UpdateXforms
|
||||||
@ -298,19 +312,8 @@ static BOOL DC_InvertXform( const XFORM *xformSrc, XFORM *xformDest )
|
|||||||
void DC_UpdateXforms( DC *dc )
|
void DC_UpdateXforms( DC *dc )
|
||||||
{
|
{
|
||||||
XFORM xformWnd2Vport, oldworld2vport;
|
XFORM xformWnd2Vport, oldworld2vport;
|
||||||
double scaleX, scaleY;
|
|
||||||
|
|
||||||
/* Construct a transformation to do the window-to-viewport conversion */
|
construct_window_to_viewport(dc, &xformWnd2Vport);
|
||||||
scaleX = (double)dc->vportExtX / (double)dc->wndExtX;
|
|
||||||
scaleY = (double)dc->vportExtY / (double)dc->wndExtY;
|
|
||||||
xformWnd2Vport.eM11 = scaleX;
|
|
||||||
xformWnd2Vport.eM12 = 0.0;
|
|
||||||
xformWnd2Vport.eM21 = 0.0;
|
|
||||||
xformWnd2Vport.eM22 = scaleY;
|
|
||||||
xformWnd2Vport.eDx = (double)dc->vportOrgX -
|
|
||||||
scaleX * (double)dc->wndOrgX;
|
|
||||||
xformWnd2Vport.eDy = (double)dc->vportOrgY -
|
|
||||||
scaleY * (double)dc->wndOrgY;
|
|
||||||
|
|
||||||
oldworld2vport = dc->xformWorld2Vport;
|
oldworld2vport = dc->xformWorld2Vport;
|
||||||
/* Combine with the world transformation */
|
/* Combine with the world transformation */
|
||||||
@ -1164,12 +1167,52 @@ BOOL WINAPI GetWorldTransform( HDC hdc, LPXFORM xform )
|
|||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetTransform (GDI32.@)
|
* GetTransform (GDI32.@)
|
||||||
|
*
|
||||||
|
* Undocumented
|
||||||
|
*
|
||||||
|
* Returns one of the co-ordinate space transforms
|
||||||
|
*
|
||||||
|
* PARAMS
|
||||||
|
* hdc [I] Device context.
|
||||||
|
* which [I] Which xform to return:
|
||||||
|
* 0x203 World -> Page transform (that set by SetWorldTransform).
|
||||||
|
* 0x304 Page -> Device transform (the mapping mode transform).
|
||||||
|
* 0x204 World -> Device transform (the combination of the above two).
|
||||||
|
* 0x402 Device -> World transform (the inversion of the above).
|
||||||
|
* xform [O] The xform.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI GetTransform( HDC hdc, DWORD unknown, LPXFORM xform )
|
BOOL WINAPI GetTransform( HDC hdc, DWORD which, XFORM *xform )
|
||||||
{
|
{
|
||||||
if (unknown == 0x0203) return GetWorldTransform( hdc, xform );
|
BOOL ret = TRUE;
|
||||||
FIXME("stub: don't know what to do for code %x\n", unknown );
|
DC *dc = get_dc_ptr( hdc );
|
||||||
return FALSE;
|
if (!dc) return FALSE;
|
||||||
|
|
||||||
|
switch(which)
|
||||||
|
{
|
||||||
|
case 0x203:
|
||||||
|
*xform = dc->xformWorld2Wnd;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x304:
|
||||||
|
construct_window_to_viewport(dc, xform);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x204:
|
||||||
|
*xform = dc->xformWorld2Vport;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x402:
|
||||||
|
*xform = dc->xformVport2World;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
FIXME("Unknown code %x\n", which);
|
||||||
|
ret = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
release_dc_ptr( dc );
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user