gdiplus: Add test for page transform in metafiles.
This commit is contained in:
parent
f3568a5e12
commit
3f8864ea82
|
@ -18,11 +18,14 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include "objbase.h"
|
#include "objbase.h"
|
||||||
#include "gdiplus.h"
|
#include "gdiplus.h"
|
||||||
#include "wine/test.h"
|
#include "wine/test.h"
|
||||||
|
|
||||||
#define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got)
|
#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
|
typedef struct emfplus_record
|
||||||
{
|
{
|
||||||
|
@ -709,6 +712,205 @@ static void test_fillrect(void)
|
||||||
expect(Ok, stat);
|
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)
|
START_TEST(metafile)
|
||||||
{
|
{
|
||||||
struct GdiplusStartupInput gdiplusStartupInput;
|
struct GdiplusStartupInput gdiplusStartupInput;
|
||||||
|
@ -725,6 +927,7 @@ START_TEST(metafile)
|
||||||
test_getdc();
|
test_getdc();
|
||||||
test_emfonly();
|
test_emfonly();
|
||||||
test_fillrect();
|
test_fillrect();
|
||||||
|
test_pagetransform();
|
||||||
|
|
||||||
GdiplusShutdown(gdiplusToken);
|
GdiplusShutdown(gdiplusToken);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue