Author: jimtabor
Date: Sat Aug 26 22:49:13 2017
New Revision: 75685

URL: http://svn.reactos.org/svn/reactos?rev=75685&view=rev
Log:
[GDI32|Metafile]
- Andrew Eikum : Update metafile world transform immediately in winnt mode.
- More information at 
https://www.winehq.org/pipermail/wine-cvs/2017-August/122607.html .

Modified:
    trunk/reactos/win32ss/gdi/gdi32/wine/enhmetafile.c

Modified: trunk/reactos/win32ss/gdi/gdi32/wine/enhmetafile.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/gdi32/wine/enhmetafile.c?rev=75685&r1=75684&r2=75685&view=diff
==============================================================================
--- trunk/reactos/win32ss/gdi/gdi32/wine/enhmetafile.c  [iso-8859-1] (original)
+++ trunk/reactos/win32ss/gdi/gdi32/wine/enhmetafile.c  [iso-8859-1] Sat Aug 26 
22:49:13 2017
@@ -786,6 +786,10 @@
             break;
         info->state.mode = pSetMapMode->iMode;
         EMF_SetMapMode(hdc, info);
+
+        if (!IS_WIN9X())
+            EMF_Update_MF_Xform(hdc, info);
+
        break;
       }
     case EMR_SETBKMODE:
@@ -887,12 +891,16 @@
         info->state.wndOrgY = pSetWindowOrgEx->ptlOrigin.y;
 
         TRACE("SetWindowOrgEx: %d,%d\n", info->state.wndOrgX, 
info->state.wndOrgY);
+
+        if (!IS_WIN9X())
+            EMF_Update_MF_Xform(hdc, info);
+
         break;
       }
     case EMR_SETWINDOWEXTEX:
       {
        const EMRSETWINDOWEXTEX *pSetWindowExtEx = (const EMRSETWINDOWEXTEX 
*)mr;
-
+       
         if (info->state.mode != MM_ISOTROPIC && info->state.mode != 
MM_ANISOTROPIC)
            break;
         info->state.wndExtX = pSetWindowExtEx->szlExtent.cx;
@@ -901,6 +909,10 @@
             EMF_FixIsotropic(hdc, info);
 
         TRACE("SetWindowExtEx: %d,%d\n",info->state.wndExtX, 
info->state.wndExtY);
+
+        if (!IS_WIN9X())
+            EMF_Update_MF_Xform(hdc, info);
+
        break;
       }
     case EMR_SETVIEWPORTORGEX:
@@ -910,6 +922,10 @@
         info->state.vportOrgX = pSetViewportOrgEx->ptlOrigin.x;
         info->state.vportOrgY = pSetViewportOrgEx->ptlOrigin.y;
         TRACE("SetViewportOrgEx: %d,%d\n", info->state.vportOrgX, 
info->state.vportOrgY);
+
+        if (!IS_WIN9X())
+            EMF_Update_MF_Xform(hdc, info);
+
        break;
       }
     case EMR_SETVIEWPORTEXTEX:
@@ -923,6 +939,10 @@
         if (info->state.mode == MM_ISOTROPIC)
             EMF_FixIsotropic(hdc, info);
         TRACE("SetViewportExtEx: %d,%d\n", info->state.vportExtX, 
info->state.vportExtY);
+
+        if (!IS_WIN9X())
+            EMF_Update_MF_Xform(hdc, info);
+
        break;
       }
     case EMR_CREATEPEN:
@@ -1259,6 +1279,10 @@
       {
         const EMRSETWORLDTRANSFORM *lpXfrm = (const EMRSETWORLDTRANSFORM *)mr;
         info->state.world_transform = lpXfrm->xform;
+
+        if (!IS_WIN9X())
+            EMF_Update_MF_Xform(hdc, info);
+
         break;
       }
 
@@ -1414,6 +1438,9 @@
              lpScaleViewportExtEx->xNum,lpScaleViewportExtEx->xDenom,
              lpScaleViewportExtEx->yNum,lpScaleViewportExtEx->yDenom);
 
+        if (!IS_WIN9X())
+            EMF_Update_MF_Xform(hdc, info);
+
         break;
       }
 
@@ -1439,6 +1466,9 @@
              lpScaleWindowExtEx->xNum,lpScaleWindowExtEx->xDenom,
              lpScaleWindowExtEx->yNum,lpScaleWindowExtEx->yDenom);
 
+        if (!IS_WIN9X())
+            EMF_Update_MF_Xform(hdc, info);
+
         break;
       }
 
@@ -1451,14 +1481,20 @@
             info->state.world_transform.eM11 = 
info->state.world_transform.eM22 = 1;
             info->state.world_transform.eM12 = 
info->state.world_transform.eM21 = 0;
             info->state.world_transform.eDx  = info->state.world_transform.eDy 
 = 0;
+            if (!IS_WIN9X())
+                EMF_Update_MF_Xform(hdc, info);
             break;
         case MWT_LEFTMULTIPLY:
             CombineTransform(&info->state.world_transform, 
&lpModifyWorldTrans->xform,
                              &info->state.world_transform);
+            if (!IS_WIN9X())
+                ModifyWorldTransform(hdc, &lpModifyWorldTrans->xform, 
MWT_LEFTMULTIPLY);
             break;
         case MWT_RIGHTMULTIPLY:
             CombineTransform(&info->state.world_transform, 
&info->state.world_transform,
                              &lpModifyWorldTrans->xform);
+            if (!IS_WIN9X())
+                EMF_Update_MF_Xform(hdc, info);
             break;
         default:
             FIXME("Unknown imode %d\n", lpModifyWorldTrans->iMode);
@@ -2435,11 +2471,6 @@
        TRACE("Calling EnumFunc with record %s, size %d\n", 
get_emr_name(emr->iType), emr->nSize);
        ret = (*callback)(hdc, ht, emr, emh->nHandles, (LPARAM)data);
        offset += emr->nSize;
-
-        /* WinNT - update the transform (win9x updates when the next graphics
-           output record is played). */
-        if (hdc && !IS_WIN9X())
-            EMF_Update_MF_Xform(hdc, info);
     }
 
     if (hdc)


Reply via email to