Maarten Lankhorst : gdiplus: Add tests and fix GdipDrawImagePointsRect.
Alexandre Julliard
julliard at winehq.org
Thu Mar 3 11:46:23 CST 2011
Module: wine
Branch: master
Commit: c0576948833522e71aa9cc2c77ce5d515b473d2f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c0576948833522e71aa9cc2c77ce5d515b473d2f
Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Thu Feb 17 10:51:33 2011 +0100
gdiplus: Add tests and fix GdipDrawImagePointsRect.
---
dlls/gdiplus/graphics.c | 5 +++
dlls/gdiplus/tests/graphics.c | 56 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+), 0 deletions(-)
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 65700da..5f226e9 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -2161,6 +2161,9 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image
count, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes, callback,
callbackData);
+ if (count > 3)
+ return NotImplemented;
+
if(!graphics || !image || !points || count != 3)
return InvalidParameter;
@@ -2170,6 +2173,8 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image
memcpy(ptf, points, 3 * sizeof(GpPointF));
ptf[3].X = ptf[2].X + ptf[1].X - ptf[0].X;
ptf[3].Y = ptf[2].Y + ptf[1].Y - ptf[0].Y;
+ if (!srcwidth || !srcheight || ptf[3].X == ptf[0].X || ptf[3].Y == ptf[0].Y)
+ return Ok;
transform_and_round_points(graphics, pti, ptf, 4);
if (image->picture)
diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c
index 9a746b1..275c237 100644
--- a/dlls/gdiplus/tests/graphics.c
+++ b/dlls/gdiplus/tests/graphics.c
@@ -1130,6 +1130,60 @@ static void test_GdipDrawLineI(void)
ReleaseDC(hwnd, hdc);
}
+static void test_GdipDrawImagePointsRect(void)
+{
+ GpStatus status;
+ GpGraphics *graphics = NULL;
+ GpPointF ptf[4];
+ GpBitmap *bm = NULL;
+ BYTE rbmi[sizeof(BITMAPINFOHEADER)];
+ BYTE buff[400];
+ BITMAPINFO *bmi = (BITMAPINFO*)rbmi;
+ HDC hdc = GetDC( hwnd );
+ if (!hdc)
+ return;
+
+ memset(rbmi, 0, sizeof(rbmi));
+ bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+ bmi->bmiHeader.biWidth = 10;
+ bmi->bmiHeader.biHeight = 10;
+ bmi->bmiHeader.biPlanes = 1;
+ bmi->bmiHeader.biBitCount = 32;
+ bmi->bmiHeader.biCompression = BI_RGB;
+ status = GdipCreateBitmapFromGdiDib(bmi, buff, &bm);
+ expect(Ok, status);
+ ok(NULL != bm, "Expected bitmap to be initialized\n");
+ status = GdipCreateFromHDC(hdc, &graphics);
+ expect(Ok, status);
+ ptf[0].X = 0;
+ ptf[0].Y = 0;
+ ptf[1].X = 10;
+ ptf[1].Y = 0;
+ ptf[2].X = 0;
+ ptf[2].Y = 10;
+ ptf[3].X = 10;
+ ptf[3].Y = 10;
+ status = GdipDrawImagePointsRect(graphics, (GpImage*)bm, ptf, 4, 0, 0, 10, 10, UnitPixel, NULL, NULL, NULL);
+ expect(NotImplemented, status);
+ status = GdipDrawImagePointsRect(graphics, (GpImage*)bm, ptf, 2, 0, 0, 10, 10, UnitPixel, NULL, NULL, NULL);
+ expect(InvalidParameter, status);
+ status = GdipDrawImagePointsRect(graphics, (GpImage*)bm, ptf, 3, 0, 0, 10, 10, UnitPixel, NULL, NULL, NULL);
+ expect(Ok, status);
+ status = GdipDrawImagePointsRect(graphics, NULL, ptf, 3, 0, 0, 10, 10, UnitPixel, NULL, NULL, NULL);
+ expect(InvalidParameter, status);
+ status = GdipDrawImagePointsRect(graphics, (GpImage*)bm, NULL, 3, 0, 0, 10, 10, UnitPixel, NULL, NULL, NULL);
+ expect(InvalidParameter, status);
+ status = GdipDrawImagePointsRect(graphics, (GpImage*)bm, ptf, 3, 0, 0, 0, 0, UnitPixel, NULL, NULL, NULL);
+ expect(Ok, status);
+ memset(ptf, 0, sizeof(ptf));
+ status = GdipDrawImagePointsRect(graphics, (GpImage*)bm, ptf, 3, 0, 0, 10, 10, UnitPixel, NULL, NULL, NULL);
+ expect(Ok, status);
+
+ GdipDisposeImage((GpImage*)bm);
+ GdipDeleteGraphics(graphics);
+ ReleaseDC(hwnd, hdc);
+}
+
static void test_GdipDrawLinesI(void)
{
GpStatus status;
@@ -1603,6 +1657,7 @@ static void test_Get_Release_DC(void)
expect(ObjectBusy, status);
status = GdipTransformPoints(graphics, CoordinateSpacePage, CoordinateSpaceWorld, ptf, 5);
expect(ObjectBusy, status);
+
/* try to delete before release */
status = GdipDeleteGraphics(graphics);
expect(ObjectBusy, status);
@@ -2998,6 +3053,7 @@ START_TEST(graphics)
test_GdipDrawCurve3I();
test_GdipDrawLineI();
test_GdipDrawLinesI();
+ test_GdipDrawImagePointsRect();
test_GdipFillClosedCurve();
test_GdipFillClosedCurveI();
test_GdipDrawString();
More information about the wine-cvs
mailing list