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)
|
||||
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();
|
||||
|
|
Loading…
Reference in New Issue