gdiplus: Handle zero width/height in GdipAddPathPie.
This commit is contained in:
parent
2e29c7d516
commit
8cb170126a
|
@ -723,6 +723,17 @@ GpStatus WINGDIPAPI GdipAddPathPie(GpPath *path, REAL x, REAL y, REAL width, REA
|
|||
if(!path)
|
||||
return InvalidParameter;
|
||||
|
||||
/* on zero width/height only start point added */
|
||||
if(width <= 1e-7 || height <= 1e-7){
|
||||
if(!lengthen_path(path, 1))
|
||||
return OutOfMemory;
|
||||
path->pathdata.Points[0].X = x + width / 2.0;
|
||||
path->pathdata.Points[0].Y = y + height / 2.0;
|
||||
path->pathdata.Types[0] = PathPointTypeStart | PathPointTypeCloseSubpath;
|
||||
path->pathdata.Count = 1;
|
||||
return InvalidParameter;
|
||||
}
|
||||
|
||||
count = arc2polybezier(NULL, x, y, width, height, startAngle, sweepAngle);
|
||||
|
||||
if(count == 0)
|
||||
|
|
|
@ -907,7 +907,12 @@ static path_test_t addpie_path[] = {
|
|||
{79.4, 46.8, PathPointTypeBezier,0, 0}, /*3*/
|
||||
{63.9, 49.0, PathPointTypeBezier | PathPointTypeCloseSubpath, 0, 0} /*4*/
|
||||
};
|
||||
|
||||
static path_test_t addpie_path2[] = {
|
||||
{0.0, 30.0, PathPointTypeStart | PathPointTypeCloseSubpath, 0, 0} /*0*/
|
||||
};
|
||||
static path_test_t addpie_path3[] = {
|
||||
{30.0, 0.0, PathPointTypeStart | PathPointTypeCloseSubpath, 0, 0} /*0*/
|
||||
};
|
||||
static void test_addpie(void)
|
||||
{
|
||||
GpStatus status;
|
||||
|
@ -922,6 +927,20 @@ static void test_addpie(void)
|
|||
status = GdipAddPathPie(path, 0.0, 0.0, 100.0, 50.0, 10.0, 50.0);
|
||||
expect(Ok, status);
|
||||
ok_path(path, addpie_path, sizeof(addpie_path)/sizeof(path_test_t), FALSE);
|
||||
status = GdipResetPath(path);
|
||||
expect(Ok, status);
|
||||
|
||||
/* zero width base ellipse */
|
||||
status = GdipAddPathPie(path, 0.0, 0.0, 0.0, 60.0, -90.0, 24.0);
|
||||
expect(InvalidParameter, status);
|
||||
ok_path(path, addpie_path2, sizeof(addpie_path2)/sizeof(path_test_t), FALSE);
|
||||
status = GdipResetPath(path);
|
||||
expect(Ok, status);
|
||||
|
||||
/* zero height base ellipse */
|
||||
status = GdipAddPathPie(path, 0.0, 0.0, 60.0, 0.0 , -90.0, 24.0);
|
||||
expect(InvalidParameter, status);
|
||||
ok_path(path, addpie_path3, sizeof(addpie_path3)/sizeof(path_test_t), FALSE);
|
||||
|
||||
GdipDeletePath(path);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue