Commit cba24001 authored by Zhiyi Zhang's avatar Zhiyi Zhang Committed by Alexandre Julliard

gdiplus: Avoid calling GdipFillPath() with an empty path.

There is no point filling an empty path. And an empty path will cause SelectClipPath() used in brush_fill_path() to return error. Signed-off-by: 's avatarZhiyi Zhang <zzhang@codeweavers.com> Signed-off-by: 's avatarVincent Povirk <vincent@codeweavers.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent 07cf5ed1
......@@ -4264,6 +4264,9 @@ GpStatus WINGDIPAPI GdipFillPath(GpGraphics *graphics, GpBrush *brush, GpPath *p
if(graphics->busy)
return ObjectBusy;
if (!path->pathdata.Count)
return Ok;
if (graphics->image && graphics->image->type == ImageTypeMetafile)
return METAFILE_FillPath((GpMetafile*)graphics->image, brush, path);
......
......@@ -1539,6 +1539,52 @@ static void test_GdipFillClosedCurveI(void)
ReleaseDC(hwnd, hdc);
}
static void test_GdipFillPath(void)
{
GpStatus status;
GpGraphics *graphics;
GpSolidFill *brush;
GpPath *path;
HDC hdc = GetDC(hwnd);
ok(hdc != NULL, "Expected HDC to be initialized\n");
status = GdipCreateFromHDC(hdc, &graphics);
expect(Ok, status);
ok(graphics != NULL, "Expected graphics to be initialized\n");
status = GdipCreateSolidFill((ARGB)0xffffffff, &brush);
expect(Ok, status);
ok(brush != NULL, "Expected brush to be initialized\n");
status = GdipCreatePath(FillModeAlternate, &path);
expect(Ok, status);
ok(path != NULL, "Expected path to be initialized\n");
/* Empty path */
GdipResetPath(path);
status = GdipFillPath(graphics, (GpBrush *)brush, path);
expect(Ok, status);
/* Not closed path */
GdipResetPath(path);
status = GdipAddPathLineI(path, 0, 0, 2, 2);
expect(Ok, status);
status = GdipAddPathLineI(path, 2, 2, 4, 0);
expect(Ok, status);
status = GdipFillPath(graphics, (GpBrush *)brush, path);
expect(Ok, status);
/* Closed path */
GdipResetPath(path);
status = GdipAddPathRectangle(path, 0, 0, 4, 4);
expect(Ok, status);
status = GdipFillPath(graphics, (GpBrush *)brush, path);
expect(Ok, status);
GdipDeletePath(path);
GdipDeleteBrush((GpBrush *)brush);
GdipDeleteGraphics(graphics);
ReleaseDC(hwnd, hdc);
}
static void test_Get_Release_DC(void)
{
GpStatus status;
......@@ -6795,6 +6841,7 @@ START_TEST(graphics)
test_GdipDrawImagePointsRect();
test_GdipFillClosedCurve();
test_GdipFillClosedCurveI();
test_GdipFillPath();
test_GdipDrawString();
test_GdipGetNearestColor();
test_GdipGetVisibleClipBounds();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment