Module: wine Branch: master Commit: 6260af2a7cceb77ce240d48b7b9eec44f2ec39cc URL: http://source.winehq.org/git/wine.git/?a=commit;h=6260af2a7cceb77ce240d48b7b...
Author: Huw Davies huw@codeweavers.com Date: Wed Jun 24 11:42:51 2009 +0100
gdi32: Implement GetTransform for the other valid transform types.
---
dlls/gdi32/dc.c | 75 +++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 59 insertions(+), 16 deletions(-)
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index 30bd7a4..db8a91b 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -284,6 +284,20 @@ static BOOL DC_InvertXform( const XFORM *xformSrc, XFORM *xformDest ) 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 @@ -298,19 +312,8 @@ static BOOL DC_InvertXform( const XFORM *xformSrc, XFORM *xformDest ) void DC_UpdateXforms( DC *dc ) { XFORM xformWnd2Vport, oldworld2vport; - double scaleX, scaleY;
- /* Construct a transformation to do the window-to-viewport conversion */ - 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; + construct_window_to_viewport(dc, &xformWnd2Vport);
oldworld2vport = dc->xformWorld2Vport; /* Combine with the world transformation */ @@ -1164,12 +1167,52 @@ BOOL WINAPI GetWorldTransform( HDC hdc, LPXFORM xform )
/*********************************************************************** * 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 ); - FIXME("stub: don't know what to do for code %x\n", unknown ); - return FALSE; + BOOL ret = TRUE; + DC *dc = get_dc_ptr( hdc ); + 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; }