[GDI32] Fix a metafile test

Felix Nawothnig felix.nawothnig at t-online.de
Thu Jul 14 10:44:37 CDT 2005


Tested on Wine, Win95 and WinXP.

The WRT page should go green now...

ChangeLog:
Fix the EnumEnhMetaFile tests
-------------- next part --------------
Index: dlls/gdi/tests/metafile.c
===================================================================
RCS file: /home/wine/wine/dlls/gdi/tests/metafile.c,v
retrieving revision 1.11
diff -u -p -r1.11 metafile.c
--- dlls/gdi/tests/metafile.c	22 Jun 2005 18:03:19 -0000	1.11
+++ dlls/gdi/tests/metafile.c	14 Jul 2005 14:57:46 -0000
@@ -443,43 +443,39 @@ static void test_mf_PatternBrush(void)
     HeapFree (GetProcessHeap(), 0, orig_lb);
 }
 
-static INT CALLBACK EmfMmTextEnumProc(HDC hdc, HANDLETABLE *lpHTable, const ENHMETARECORD *lpEMFR, INT nObj, LPARAM lpData)
+static INT CALLBACK EmfEnumProc(HDC hdc, HANDLETABLE *lpHTable, const ENHMETARECORD *lpEMFR, INT nObj, LPARAM lpData)
 {
+    LPMETAFILEPICT lpMFP = (LPMETAFILEPICT)lpData;
     POINT mapping[2] = { { 0, 0 }, { 10, 10 } };
-    LPtoDP(hdc, mapping, 2);
-    trace("Meta record: iType = %ld, (%ld,%ld)-(%ld,%ld)\n", lpEMFR->iType, mapping[0].x, mapping[0].y, mapping[1].x, mapping[1].y);
-    if (lpEMFR->iType == EMR_LINETO)
-    {
-        INT x0 = 0;
-        INT y0 = 0;
-        INT x1 = (INT)floor(10 * 100.0 / LINE_X + 0.5);
-        INT y1 = (INT)floor(10 * 100.0 / LINE_Y + 0.5);
-        ok(mapping[0].x == x0 && mapping[0].y == y0 && mapping[1].x == x1 && mapping[1].y == y1,
-            "(%ld,%ld)->(%ld,%ld), expected (%d,%d)->(%d,%d)\n",
-            mapping[0].x, mapping[0].y, mapping[1].x, mapping[1].y,
-            x0, y0, x1, y1);
-    }
+    /* When using MM_TEXT Win9x does not update the mapping mode 
+     * until a record is played which actually outputs something */
     PlayEnhMetaFileRecord(hdc, lpHTable, lpEMFR, nObj);
-    return TRUE;
-}
-
-static INT CALLBACK EmfMmAnisotropicEnumProc(HDC hdc, HANDLETABLE *lpHTable, const ENHMETARECORD *lpEMFR, INT nObj, LPARAM lpData)
-{
-    POINT mapping[2] = { { 0, 0 }, { 10, 10 } };
     LPtoDP(hdc, mapping, 2);
     trace("Meta record: iType = %ld, (%ld,%ld)-(%ld,%ld)\n", lpEMFR->iType, mapping[0].x, mapping[0].y, mapping[1].x, mapping[1].y);
     if (lpEMFR->iType == EMR_LINETO)
     {
-        INT x0 = MulDiv(0, GetDeviceCaps(hdc, HORZSIZE) * 100, GetDeviceCaps(hdc, HORZRES));
-        INT y0 = MulDiv(0, GetDeviceCaps(hdc, VERTSIZE) * 100, GetDeviceCaps(hdc, VERTRES));
-        INT x1 = MulDiv(10, GetDeviceCaps(hdc, HORZSIZE) * 100, GetDeviceCaps(hdc, HORZRES));
-        INT y1 = MulDiv(10, GetDeviceCaps(hdc, VERTSIZE) * 100, GetDeviceCaps(hdc, VERTRES));
+        INT x0, y0, x1, y1;
+        if (!lpMFP || lpMFP->mm == MM_TEXT)
+        {
+            x0 = 0;
+            y0 = 0;
+            x1 = (INT)floor(10 * 100.0 / LINE_X + 0.5);
+            y1 = (INT)floor(10 * 100.0 / LINE_Y + 0.5);
+        }
+        else
+        {
+            ok(lpMFP->mm == MM_ANISOTROPIC, "mm=%ld\n", lpMFP->mm);
+            
+            x0 = MulDiv(0, GetDeviceCaps(hdc, HORZSIZE) * 100, GetDeviceCaps(hdc, HORZRES));
+            y0 = MulDiv(0, GetDeviceCaps(hdc, VERTSIZE) * 100, GetDeviceCaps(hdc, VERTRES));
+            x1 = MulDiv(10, GetDeviceCaps(hdc, HORZSIZE) * 100, GetDeviceCaps(hdc, HORZRES));
+            y1 = MulDiv(10, GetDeviceCaps(hdc, VERTSIZE) * 100, GetDeviceCaps(hdc, VERTRES));
+        }
         ok(mapping[0].x == x0 && mapping[0].y == y0 && mapping[1].x == x1 && mapping[1].y == y1,
             "(%ld,%ld)->(%ld,%ld), expected (%d,%d)->(%d,%d)\n",
             mapping[0].x, mapping[0].y, mapping[1].x, mapping[1].y,
             x0, y0, x1, y1);
     }
-    PlayEnhMetaFileRecord(hdc, lpHTable, lpEMFR, nObj);
     return TRUE;
 }
 
@@ -518,7 +514,7 @@ static void test_mf_conversions(void)
         mfp.yExt = 100;
         mfp.hMF = NULL;
         hemf = create_converted_emf(&mfp);
-        EnumEnhMetaFile(hdcOffscreen, hemf, EmfMmAnisotropicEnumProc, NULL, &rect);
+        EnumEnhMetaFile(hdcOffscreen, hemf, EmfEnumProc, &mfp, &rect);
         DeleteEnhMetaFile(hemf);
         DeleteDC(hdcOffscreen);
     }
@@ -534,7 +530,7 @@ static void test_mf_conversions(void)
         mfp.yExt = 0;
         mfp.hMF = NULL;
         hemf = create_converted_emf(&mfp);
-        EnumEnhMetaFile(hdcOffscreen, hemf, EmfMmTextEnumProc, NULL, &rect);
+        EnumEnhMetaFile(hdcOffscreen, hemf, EmfEnumProc, &mfp, &rect);
         DeleteEnhMetaFile(hemf);
         DeleteDC(hdcOffscreen);
     }
@@ -545,7 +541,7 @@ static void test_mf_conversions(void)
         HENHMETAFILE hemf;
         RECT rect = { 0, 0, 100, 100 };
         hemf = create_converted_emf(NULL);
-        EnumEnhMetaFile(hdcOffscreen, hemf, EmfMmTextEnumProc, NULL, &rect);
+        EnumEnhMetaFile(hdcOffscreen, hemf, EmfEnumProc, NULL, &rect);
         DeleteEnhMetaFile(hemf);
         DeleteDC(hdcOffscreen);
     }


More information about the wine-patches mailing list