Module: wine Branch: master Commit: 3f8864ea822117a8dfb6a1f73ac554931febf13e URL: http://source.winehq.org/git/wine.git/?a=commit;h=3f8864ea822117a8dfb6a1f73a...
Author: Vincent Povirk vincent@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); }