Vincent Povirk : gdiplus: Add test for page transform in metafiles.

Alexandre Julliard julliard at winehq.org
Mon Jan 27 13:32:52 CST 2014


Module: wine
Branch: master
Commit: 3f8864ea822117a8dfb6a1f73ac554931febf13e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3f8864ea822117a8dfb6a1f73ac554931febf13e

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Thu Jan 16 14:58:50 2014 -0600

gdiplus: Add test for page transform in metafiles.

---

 dlls/gdiplus/tests/metafile.c |  203 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 203 insertions(+)

diff --git a/dlls/gdiplus/tests/metafile.c b/dlls/gdiplus/tests/metafile.c
index d4d7adb..16c440b 100644
--- a/dlls/gdiplus/tests/metafile.c
+++ b/dlls/gdiplus/tests/metafile.c
@@ -18,11 +18,14 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <math.h>
+
 #include "objbase.h"
 #include "gdiplus.h"
 #include "wine/test.h"
 
 #define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got)
+#define expectf(expected, got) ok(fabs((expected) - (got)) < 0.0001, "Expected %f, got %f\n", (expected), (got))
 
 typedef struct emfplus_record
 {
@@ -709,6 +712,205 @@ static void test_fillrect(void)
     expect(Ok, stat);
 }
 
+static const emfplus_record pagetransform_records[] = {
+    {0, EMR_HEADER},
+    {0, EmfPlusRecordTypeHeader},
+    {0, EmfPlusRecordTypeFillRects},
+    {0, EmfPlusRecordTypeSetPageTransform},
+    {0, EmfPlusRecordTypeFillRects},
+    {0, EmfPlusRecordTypeSetPageTransform},
+    {0, EmfPlusRecordTypeFillRects},
+    {0, EmfPlusRecordTypeSetPageTransform},
+    {0, EmfPlusRecordTypeFillRects},
+    {0, EmfPlusRecordTypeSetPageTransform},
+    {0, EmfPlusRecordTypeFillRects},
+    {0, EmfPlusRecordTypeEndOfFile},
+    {0, EMR_EOF},
+    {0}
+};
+
+static void test_pagetransform(void)
+{
+    GpStatus stat;
+    GpMetafile *metafile;
+    GpGraphics *graphics;
+    HDC hdc;
+    static const GpRectF frame = {0.0, 0.0, 5.0, 5.0};
+    static const GpPointF dst_points[3] = {{0.0,0.0},{100.0,0.0},{0.0,100.0}};
+    static const WCHAR description[] = {'w','i','n','e','t','e','s','t',0};
+    GpBitmap *bitmap;
+    ARGB color;
+    GpBrush *brush;
+    GpUnit unit;
+    REAL scale, dpix, dpiy;
+    UINT width, height;
+
+    hdc = CreateCompatibleDC(0);
+
+    stat = GdipRecordMetafile(hdc, EmfTypeEmfPlusOnly, &frame, MetafileFrameUnitInch, description, &metafile);
+    expect(Ok, stat);
+
+    DeleteDC(hdc);
+
+    if (stat != Ok)
+        return;
+
+    stat = GdipGetImageHorizontalResolution((GpImage*)metafile, &dpix);
+    todo_wine expect(InvalidParameter, stat);
+
+    stat = GdipGetImageVerticalResolution((GpImage*)metafile, &dpiy);
+    todo_wine expect(InvalidParameter, stat);
+
+    stat = GdipGetImageWidth((GpImage*)metafile, &width);
+    todo_wine expect(InvalidParameter, stat);
+
+    stat = GdipGetImageHeight((GpImage*)metafile, &height);
+    todo_wine expect(InvalidParameter, stat);
+
+    stat = GdipGetImageGraphicsContext((GpImage*)metafile, &graphics);
+    expect(Ok, stat);
+
+    /* initial scale */
+    stat = GdipGetPageUnit(graphics, &unit);
+    expect(Ok, stat);
+    expect(UnitDisplay, unit);
+
+    stat = GdipGetPageScale(graphics, &scale);
+    expect(Ok, stat);
+    expectf(1.0, scale);
+
+    stat = GdipGetDpiX(graphics, &dpix);
+    expect(Ok, stat);
+    expectf(96.0, dpix);
+
+    stat = GdipGetDpiY(graphics, &dpiy);
+    expect(Ok, stat);
+    expectf(96.0, dpiy);
+
+    stat = GdipCreateSolidFill((ARGB)0xff0000ff, (GpSolidFill**)&brush);
+    expect(Ok, stat);
+
+    stat = GdipFillRectangleI(graphics, brush, 1, 2, 1, 1);
+    expect(Ok, stat);
+
+    stat = GdipDeleteBrush(brush);
+    expect(Ok, stat);
+
+    /* page unit = pixels */
+    stat = GdipSetPageUnit(graphics, UnitPixel);
+    expect(Ok, stat);
+
+    stat = GdipGetPageUnit(graphics, &unit);
+    expect(Ok, stat);
+    expect(UnitPixel, unit);
+
+    stat = GdipCreateSolidFill((ARGB)0xff00ff00, (GpSolidFill**)&brush);
+    expect(Ok, stat);
+
+    stat = GdipFillRectangleI(graphics, brush, 0, 1, 1, 1);
+    expect(Ok, stat);
+
+    stat = GdipDeleteBrush(brush);
+    expect(Ok, stat);
+
+    /* page scale = 3, unit = pixels */
+    stat = GdipSetPageScale(graphics, 3.0);
+    expect(Ok, stat);
+
+    stat = GdipGetPageScale(graphics, &scale);
+    expect(Ok, stat);
+    expectf(3.0, scale);
+
+    stat = GdipCreateSolidFill((ARGB)0xff00ffff, (GpSolidFill**)&brush);
+    expect(Ok, stat);
+
+    stat = GdipFillRectangleI(graphics, brush, 0, 1, 2, 2);
+    expect(Ok, stat);
+
+    stat = GdipDeleteBrush(brush);
+    expect(Ok, stat);
+
+    /* page scale = 3, unit = inches */
+    stat = GdipSetPageUnit(graphics, UnitInch);
+    expect(Ok, stat);
+
+    stat = GdipGetPageUnit(graphics, &unit);
+    expect(Ok, stat);
+    expect(UnitInch, unit);
+
+    stat = GdipCreateSolidFill((ARGB)0xffff0000, (GpSolidFill**)&brush);
+    expect(Ok, stat);
+
+    stat = GdipFillRectangle(graphics, brush, 1.0/96.0, 0, 1, 1);
+    expect(Ok, stat);
+
+    stat = GdipDeleteBrush(brush);
+    expect(Ok, stat);
+
+    /* page scale = 3, unit = display */
+    stat = GdipSetPageUnit(graphics, UnitDisplay);
+    expect(Ok, stat);
+
+    stat = GdipGetPageUnit(graphics, &unit);
+    expect(Ok, stat);
+    expect(UnitDisplay, unit);
+
+    stat = GdipCreateSolidFill((ARGB)0xffff00ff, (GpSolidFill**)&brush);
+    expect(Ok, stat);
+
+    stat = GdipFillRectangle(graphics, brush, 3, 3, 2, 2);
+    expect(Ok, stat);
+
+    stat = GdipDeleteBrush(brush);
+    expect(Ok, stat);
+
+    stat = GdipDeleteGraphics(graphics);
+    expect(Ok, stat);
+
+    check_metafile(metafile, pagetransform_records, "pagetransform metafile", dst_points, &frame, UnitPixel);
+
+    stat = GdipCreateBitmapFromScan0(100, 100, 0, PixelFormat32bppARGB, NULL, &bitmap);
+    expect(Ok, stat);
+
+    stat = GdipGetImageGraphicsContext((GpImage*)bitmap, &graphics);
+    expect(Ok, stat);
+
+    play_metafile(metafile, graphics, pagetransform_records, "pagetransform playback", dst_points, &frame, UnitPixel);
+
+    stat = GdipBitmapGetPixel(bitmap, 50, 50, &color);
+    expect(Ok, stat);
+    expect(0, color);
+
+    stat = GdipBitmapGetPixel(bitmap, 30, 50, &color);
+    expect(Ok, stat);
+    expect(0xff0000ff, color);
+
+    stat = GdipBitmapGetPixel(bitmap, 10, 30, &color);
+    expect(Ok, stat);
+    expect(0xff00ff00, color);
+
+    stat = GdipBitmapGetPixel(bitmap, 20, 80, &color);
+    expect(Ok, stat);
+    expect(0xff00ffff, color);
+
+    stat = GdipBitmapGetPixel(bitmap, 80, 20, &color);
+    expect(Ok, stat);
+    expect(0xffff0000, color);
+
+    stat = GdipBitmapGetPixel(bitmap, 80, 80, &color);
+    expect(Ok, stat);
+    expect(0xffff00ff, color);
+
+    stat = GdipDeleteGraphics(graphics);
+    expect(Ok, stat);
+
+    stat = GdipDisposeImage((GpImage*)bitmap);
+    expect(Ok, stat);
+
+    stat = GdipDisposeImage((GpImage*)metafile);
+    expect(Ok, stat);
+}
+
 START_TEST(metafile)
 {
     struct GdiplusStartupInput gdiplusStartupInput;
@@ -725,6 +927,7 @@ START_TEST(metafile)
     test_getdc();
     test_emfonly();
     test_fillrect();
+    test_pagetransform();
 
     GdiplusShutdown(gdiplusToken);
 }




More information about the wine-cvs mailing list