Module: wine Branch: master Commit: a82cdfc05016dffb9f8f649e9f00c675afd0e681 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a82cdfc05016dffb9f8f649e9f...
Author: Erich Hoover ehoover@mines.edu Date: Mon Jan 19 19:50:03 2009 -0700
oleaut32: Fix OLEPicture rendering vector metafiles without setting up the source rectangle.
---
dlls/oleaut32/olepicture.c | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/dlls/oleaut32/olepicture.c b/dlls/oleaut32/olepicture.c index c80f357..f05501d 100644 --- a/dlls/oleaut32/olepicture.c +++ b/dlls/oleaut32/olepicture.c @@ -710,17 +710,27 @@ static HRESULT WINAPI OLEPictureImpl_Render(IPicture *iface, HDC hdc,
case PICTYPE_METAFILE: { - POINT prevOrg; - SIZE prevExt; + POINT prevOrg, prevWndOrg; + SIZE prevExt, prevWndExt; int oldmode;
+ /* Render the WMF to the appropriate location by setting the + appropriate ratio between "device units" and "logical units" */ oldmode = SetMapMode(hdc, MM_ANISOTROPIC); + /* For the "source rectangle" the y-axis must be inverted */ + SetWindowOrgEx(hdc, xSrc, This->himetricHeight-ySrc, &prevWndOrg); + SetWindowExtEx(hdc, cxSrc, -cySrc, &prevWndExt); + /* For the "destination rectangle" no inversion is necessary */ SetViewportOrgEx(hdc, x, y, &prevOrg); SetViewportExtEx(hdc, cx, cy, &prevExt);
if (!PlayMetaFile(hdc, This->desc.u.wmf.hmeta)) ERR("PlayMetaFile failed!\n");
+ /* We're done, restore the DC to the previous settings for converting + logical units to device units */ + SetWindowExtEx(hdc, prevWndExt.cx, prevWndExt.cy, NULL); + SetWindowOrgEx(hdc, prevWndOrg.x, prevWndOrg.y, NULL); SetViewportExtEx(hdc, prevExt.cx, prevExt.cy, NULL); SetViewportOrgEx(hdc, prevOrg.x, prevOrg.y, NULL); SetMapMode(hdc, oldmode);