gdiplus: Implemented GdipAddPathPie/GdipAddPathPieI with test.
This commit is contained in:
parent
5887e661b7
commit
aa0df2300e
|
@ -21,8 +21,8 @@
|
||||||
@ stdcall GdipAddPathLine(ptr long long long long)
|
@ stdcall GdipAddPathLine(ptr long long long long)
|
||||||
@ stdcall GdipAddPathLineI(ptr long long long long)
|
@ stdcall GdipAddPathLineI(ptr long long long long)
|
||||||
@ stdcall GdipAddPathPath(ptr ptr long)
|
@ stdcall GdipAddPathPath(ptr ptr long)
|
||||||
@ stub GdipAddPathPie
|
@ stdcall GdipAddPathPie(ptr long long long long long long)
|
||||||
@ stub GdipAddPathPieI
|
@ stdcall GdipAddPathPieI(ptr long long long long long long)
|
||||||
@ stdcall GdipAddPathPolygon(ptr ptr long)
|
@ stdcall GdipAddPathPolygon(ptr ptr long)
|
||||||
@ stdcall GdipAddPathPolygonI(ptr ptr long)
|
@ stdcall GdipAddPathPolygonI(ptr ptr long)
|
||||||
@ stdcall GdipAddPathRectangle(ptr long long long long)
|
@ stdcall GdipAddPathRectangle(ptr long long long long)
|
||||||
|
|
|
@ -546,6 +546,57 @@ GpStatus WINGDIPAPI GdipAddPathPath(GpPath *path, GDIPCONST GpPath* addingPath,
|
||||||
return Ok;
|
return Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipAddPathPie(GpPath *path, REAL x, REAL y, REAL width, REAL height,
|
||||||
|
REAL startAngle, REAL sweepAngle)
|
||||||
|
{
|
||||||
|
GpPointF *ptf;
|
||||||
|
GpStatus status;
|
||||||
|
INT i, count;
|
||||||
|
|
||||||
|
if(!path)
|
||||||
|
return InvalidParameter;
|
||||||
|
|
||||||
|
count = arc2polybezier(NULL, x, y, width, height, startAngle, sweepAngle);
|
||||||
|
|
||||||
|
if(count == 0)
|
||||||
|
return Ok;
|
||||||
|
|
||||||
|
ptf = GdipAlloc(sizeof(GpPointF)*count);
|
||||||
|
if(!ptf)
|
||||||
|
return OutOfMemory;
|
||||||
|
|
||||||
|
arc2polybezier(ptf, x, y, width, height, startAngle, sweepAngle);
|
||||||
|
|
||||||
|
status = GdipAddPathLine(path, (width - x)/2, (height - y)/2, ptf[0].X, ptf[0].Y);
|
||||||
|
if(status != Ok){
|
||||||
|
GdipFree(ptf);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
/* one spline is already added as a line endpoint */
|
||||||
|
if(!lengthen_path(path, count - 1)){
|
||||||
|
GdipFree(ptf);
|
||||||
|
return OutOfMemory;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(&(path->pathdata.Points[path->pathdata.Count]), &(ptf[1]),sizeof(GpPointF)*(count-1));
|
||||||
|
for(i = 0; i < count-1; i++)
|
||||||
|
path->pathdata.Types[path->pathdata.Count+i] = PathPointTypeBezier;
|
||||||
|
|
||||||
|
path->pathdata.Count += count-1;
|
||||||
|
|
||||||
|
GdipClosePathFigure(path);
|
||||||
|
|
||||||
|
GdipFree(ptf);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipAddPathPieI(GpPath *path, INT x, INT y, INT width, INT height,
|
||||||
|
REAL startAngle, REAL sweepAngle)
|
||||||
|
{
|
||||||
|
return GdipAddPathPieI(path, (REAL)x, (REAL)y, (REAL)width, (REAL)height, startAngle, sweepAngle);
|
||||||
|
}
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipAddPathPolygon(GpPath *path, GDIPCONST GpPointF *points, INT count)
|
GpStatus WINGDIPAPI GdipAddPathPolygon(GpPath *path, GDIPCONST GpPointF *points, INT count)
|
||||||
{
|
{
|
||||||
INT old_count;
|
INT old_count;
|
||||||
|
|
|
@ -856,6 +856,32 @@ static void test_reverse(void)
|
||||||
GdipDeletePath(path);
|
GdipDeletePath(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static path_test_t addpie_path[] = {
|
||||||
|
{50.0, 25.0, PathPointTypeStart, 0, 0}, /*0*/
|
||||||
|
{97.2, 33.3, PathPointTypeLine, 0, 0}, /*1*/
|
||||||
|
{91.8, 40.9, PathPointTypeBezier,0, 0}, /*2*/
|
||||||
|
{79.4, 46.8, PathPointTypeBezier,0, 0}, /*3*/
|
||||||
|
{63.9, 49.0, PathPointTypeBezier | PathPointTypeCloseSubpath, 0, 0} /*4*/
|
||||||
|
};
|
||||||
|
|
||||||
|
static void test_addpie(void)
|
||||||
|
{
|
||||||
|
GpStatus status;
|
||||||
|
GpPath *path;
|
||||||
|
|
||||||
|
GdipCreatePath(FillModeAlternate, &path);
|
||||||
|
|
||||||
|
/* NULL argument */
|
||||||
|
status = GdipAddPathPie(NULL, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
|
||||||
|
expect(InvalidParameter, status);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
GdipDeletePath(path);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(graphicspath)
|
START_TEST(graphicspath)
|
||||||
{
|
{
|
||||||
struct GdiplusStartupInput gdiplusStartupInput;
|
struct GdiplusStartupInput gdiplusStartupInput;
|
||||||
|
@ -882,6 +908,7 @@ START_TEST(graphicspath)
|
||||||
test_addcurve();
|
test_addcurve();
|
||||||
test_addclosedcurve();
|
test_addclosedcurve();
|
||||||
test_reverse();
|
test_reverse();
|
||||||
|
test_addpie();
|
||||||
|
|
||||||
GdiplusShutdown(gdiplusToken);
|
GdiplusShutdown(gdiplusToken);
|
||||||
}
|
}
|
||||||
|
|
|
@ -261,6 +261,8 @@ GpStatus WINGDIPAPI GdipAddPathLine2(GpPath*,GDIPCONST GpPointF*,INT);
|
||||||
GpStatus WINGDIPAPI GdipAddPathLine2I(GpPath*,GDIPCONST GpPoint*,INT);
|
GpStatus WINGDIPAPI GdipAddPathLine2I(GpPath*,GDIPCONST GpPoint*,INT);
|
||||||
GpStatus WINGDIPAPI GdipAddPathLineI(GpPath*,INT,INT,INT,INT);
|
GpStatus WINGDIPAPI GdipAddPathLineI(GpPath*,INT,INT,INT,INT);
|
||||||
GpStatus WINGDIPAPI GdipAddPathPath(GpPath*,GDIPCONST GpPath*,BOOL);
|
GpStatus WINGDIPAPI GdipAddPathPath(GpPath*,GDIPCONST GpPath*,BOOL);
|
||||||
|
GpStatus WINGDIPAPI GdipAddPathPie(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL);
|
||||||
|
GpStatus WINGDIPAPI GdipAddPathPieI(GpPath*,INT,INT,INT,INT,REAL,REAL);
|
||||||
GpStatus WINGDIPAPI GdipAddPathPolygon(GpPath*,GDIPCONST GpPointF*,INT);
|
GpStatus WINGDIPAPI GdipAddPathPolygon(GpPath*,GDIPCONST GpPointF*,INT);
|
||||||
GpStatus WINGDIPAPI GdipAddPathPolygonI(GpPath*,GDIPCONST GpPoint*,INT);
|
GpStatus WINGDIPAPI GdipAddPathPolygonI(GpPath*,GDIPCONST GpPoint*,INT);
|
||||||
GpStatus WINGDIPAPI GdipAddPathRectangle(GpPath*,REAL,REAL,REAL,REAL);
|
GpStatus WINGDIPAPI GdipAddPathRectangle(GpPath*,REAL,REAL,REAL,REAL);
|
||||||
|
|
Loading…
Reference in New Issue