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: Zhiyi Zhang <zzhang@codeweavers.com> Signed-off-by: Vincent Povirk <vincent@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
07cf5ed189
commit
cba24001e4
|
@ -4264,6 +4264,9 @@ GpStatus WINGDIPAPI GdipFillPath(GpGraphics *graphics, GpBrush *brush, GpPath *p
|
||||||
if(graphics->busy)
|
if(graphics->busy)
|
||||||
return ObjectBusy;
|
return ObjectBusy;
|
||||||
|
|
||||||
|
if (!path->pathdata.Count)
|
||||||
|
return Ok;
|
||||||
|
|
||||||
if (graphics->image && graphics->image->type == ImageTypeMetafile)
|
if (graphics->image && graphics->image->type == ImageTypeMetafile)
|
||||||
return METAFILE_FillPath((GpMetafile*)graphics->image, brush, path);
|
return METAFILE_FillPath((GpMetafile*)graphics->image, brush, path);
|
||||||
|
|
||||||
|
|
|
@ -1539,6 +1539,52 @@ static void test_GdipFillClosedCurveI(void)
|
||||||
ReleaseDC(hwnd, hdc);
|
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)
|
static void test_Get_Release_DC(void)
|
||||||
{
|
{
|
||||||
GpStatus status;
|
GpStatus status;
|
||||||
|
@ -6795,6 +6841,7 @@ START_TEST(graphics)
|
||||||
test_GdipDrawImagePointsRect();
|
test_GdipDrawImagePointsRect();
|
||||||
test_GdipFillClosedCurve();
|
test_GdipFillClosedCurve();
|
||||||
test_GdipFillClosedCurveI();
|
test_GdipFillClosedCurveI();
|
||||||
|
test_GdipFillPath();
|
||||||
test_GdipDrawString();
|
test_GdipDrawString();
|
||||||
test_GdipGetNearestColor();
|
test_GdipGetNearestColor();
|
||||||
test_GdipGetVisibleClipBounds();
|
test_GdipGetVisibleClipBounds();
|
||||||
|
|
Loading…
Reference in New Issue