mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-31 08:49:15 +00:00
gdiplus: Added GdipAddPathRectangle with tests.
This commit is contained in:
parent
22c6e57637
commit
b5046c28ca
4 changed files with 83 additions and 2 deletions
|
@ -25,8 +25,8 @@
|
||||||
@ stub GdipAddPathPieI
|
@ stub GdipAddPathPieI
|
||||||
@ stub GdipAddPathPolygon
|
@ stub GdipAddPathPolygon
|
||||||
@ stub GdipAddPathPolygonI
|
@ stub GdipAddPathPolygonI
|
||||||
@ stub GdipAddPathRectangle
|
@ stdcall GdipAddPathRectangle(ptr long long long long)
|
||||||
@ stub GdipAddPathRectangleI
|
@ stdcall GdipAddPathRectangleI(ptr long long long long)
|
||||||
@ stub GdipAddPathRectangles
|
@ stub GdipAddPathRectangles
|
||||||
@ stub GdipAddPathRectanglesI
|
@ stub GdipAddPathRectanglesI
|
||||||
@ stub GdipAddPathString
|
@ stub GdipAddPathString
|
||||||
|
|
|
@ -708,3 +708,53 @@ GpStatus WINGDIPAPI GdipTransformPath(GpPath *path, GpMatrix *matrix)
|
||||||
return GdipTransformMatrixPoints(matrix, path->pathdata.Points,
|
return GdipTransformMatrixPoints(matrix, path->pathdata.Points,
|
||||||
path->pathdata.Count);
|
path->pathdata.Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipAddPathRectangle(GpPath *path, REAL x, REAL y,
|
||||||
|
REAL width, REAL height)
|
||||||
|
{
|
||||||
|
GpPath *backup;
|
||||||
|
GpPointF ptf[2];
|
||||||
|
GpStatus retstat;
|
||||||
|
BOOL old_new;
|
||||||
|
|
||||||
|
if(!path || width < 0.0 || height < 0.0)
|
||||||
|
return InvalidParameter;
|
||||||
|
|
||||||
|
/* make a backup copy of path data */
|
||||||
|
if((retstat = GdipClonePath(path, &backup)) != Ok)
|
||||||
|
return retstat;
|
||||||
|
|
||||||
|
/* rectangle should start as new path */
|
||||||
|
old_new = path->newfigure;
|
||||||
|
path->newfigure = TRUE;
|
||||||
|
if((retstat = GdipAddPathLine(path,x,y,x+width,y)) != Ok){
|
||||||
|
path->newfigure = old_new;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
ptf[0].X = x+width;
|
||||||
|
ptf[0].Y = y+height;
|
||||||
|
ptf[1].X = x;
|
||||||
|
ptf[1].Y = y+height;
|
||||||
|
|
||||||
|
if((retstat = GdipAddPathLine2(path,(GDIPCONST GpPointF*)&ptf,2)) != Ok) goto fail;
|
||||||
|
path->pathdata.Types[path->pathdata.Count-1] |= PathPointTypeCloseSubpath;
|
||||||
|
|
||||||
|
/* free backup */
|
||||||
|
GdipDeletePath(backup);
|
||||||
|
return Ok;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
/* reverting */
|
||||||
|
GdipDeletePath(path);
|
||||||
|
GdipClonePath(backup, &path);
|
||||||
|
GdipDeletePath(backup);
|
||||||
|
|
||||||
|
return retstat;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipAddPathRectangleI(GpPath *path, INT x, INT y,
|
||||||
|
INT width, INT height)
|
||||||
|
{
|
||||||
|
return GdipAddPathRectangle(path,(REAL)x,(REAL)y,(REAL)width,(REAL)height);
|
||||||
|
}
|
||||||
|
|
|
@ -545,6 +545,34 @@ static void test_linei(void)
|
||||||
GdipDeletePath(path);
|
GdipDeletePath(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static path_test_t rect_path[] = {
|
||||||
|
{5.0, 5.0, PathPointTypeStart, 0, 0}, /*0*/
|
||||||
|
{105.0, 5.0, PathPointTypeLine, 0, 0}, /*1*/
|
||||||
|
{105.0, 55.0, PathPointTypeLine, 0, 0}, /*2*/
|
||||||
|
{5.0, 55.0, PathPointTypeLine | PathPointTypeCloseSubpath, 0, 0}, /*3*/
|
||||||
|
|
||||||
|
{100.0, 50.0, PathPointTypeStart, 0, 0}, /*4*/
|
||||||
|
{220.0, 50.0, PathPointTypeLine, 0, 0}, /*5*/
|
||||||
|
{220.0, 80.0, PathPointTypeLine, 0, 0}, /*6*/
|
||||||
|
{100.0, 80.0, PathPointTypeLine | PathPointTypeCloseSubpath, 0, 0} /*7*/
|
||||||
|
};
|
||||||
|
|
||||||
|
static void test_rect(void)
|
||||||
|
{
|
||||||
|
GpStatus status;
|
||||||
|
GpPath *path;
|
||||||
|
|
||||||
|
GdipCreatePath(FillModeAlternate, &path);
|
||||||
|
status = GdipAddPathRectangle(path, 5.0, 5.0, 100.0, 50.0);
|
||||||
|
expect(Ok, status);
|
||||||
|
status = GdipAddPathRectangle(path, 100.0, 50.0, 120.0, 30.0);
|
||||||
|
expect(Ok, status);
|
||||||
|
|
||||||
|
ok_path(path, rect_path, sizeof(rect_path)/sizeof(path_test_t), FALSE);
|
||||||
|
|
||||||
|
GdipDeletePath(path);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(graphicspath)
|
START_TEST(graphicspath)
|
||||||
{
|
{
|
||||||
struct GdiplusStartupInput gdiplusStartupInput;
|
struct GdiplusStartupInput gdiplusStartupInput;
|
||||||
|
@ -564,6 +592,7 @@ START_TEST(graphicspath)
|
||||||
test_pathpath();
|
test_pathpath();
|
||||||
test_ellipse();
|
test_ellipse();
|
||||||
test_linei();
|
test_linei();
|
||||||
|
test_rect();
|
||||||
|
|
||||||
GdiplusShutdown(gdiplusToken);
|
GdiplusShutdown(gdiplusToken);
|
||||||
}
|
}
|
||||||
|
|
|
@ -213,6 +213,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 GdipAddPathRectangle(GpPath*,REAL,REAL,REAL,REAL);
|
||||||
|
GpStatus WINGDIPAPI GdipAddPathRectangleI(GpPath*,INT,INT,INT,INT);
|
||||||
GpStatus WINGDIPAPI GdipClonePath(GpPath*,GpPath**);
|
GpStatus WINGDIPAPI GdipClonePath(GpPath*,GpPath**);
|
||||||
GpStatus WINGDIPAPI GdipClosePathFigure(GpPath*);
|
GpStatus WINGDIPAPI GdipClosePathFigure(GpPath*);
|
||||||
GpStatus WINGDIPAPI GdipClosePathFigures(GpPath*);
|
GpStatus WINGDIPAPI GdipClosePathFigures(GpPath*);
|
||||||
|
|
Loading…
Reference in a new issue