Nikolay Sivov wrote: > Changelog: > - Implemented GdipGetPathData with test > > --- > dlls/gdiplus/gdiplus.spec | 2 +- > dlls/gdiplus/graphicspath.c | 22 ++++++++++++++++++++++ > dlls/gdiplus/tests/graphicspath.c | 23 +++++++++++++++++++++++ > include/gdiplusflat.h | 1 + > 4 files changed, 47 insertions(+), 1 deletions(-) > > diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec > index 70864ba..ed02a77 100644 > --- a/dlls/gdiplus/gdiplus.spec > +++ b/dlls/gdiplus/gdiplus.spec > @@ -323,7 +323,7 @@ > @ stub GdipGetNearestColor > @ stdcall GdipGetPageScale(ptr ptr) > @ stdcall GdipGetPageUnit(ptr ptr) > -@ stub GdipGetPathData > +@ stdcall GdipGetPathData(ptr ptr) > @ stdcall GdipGetPathFillMode(ptr ptr) > @ stub GdipGetPathGradientBlend > @ stub GdipGetPathGradientBlendCount > diff --git a/dlls/gdiplus/graphicspath.c b/dlls/gdiplus/graphicspath.c > index 4cbd33a..284b64c 100644 > --- a/dlls/gdiplus/graphicspath.c > +++ b/dlls/gdiplus/graphicspath.c > @@ -479,6 +479,28 @@ GpStatus WINGDIPAPI GdipDeletePath(GpPath *path) > return Ok; > } > > +GpStatus WINGDIPAPI GdipGetPathData(GpPath *path, GpPathData* pathData) > +{ > + if(!path || !pathData) > + return InvalidParameter; > + > + pathData->Count = path->pathdata.Count; > + > + pathData->Points = GdipAlloc(sizeof(PointF) * pathData->Count); > + if(!pathData->Points) > + return OutOfMemory; > + > + pathData->Types = GdipAlloc(pathData->Count); > + if(!pathData->Points) > + return OutOfMemory; > + > + /* copy data */ > + memcpy(pathData->Points, path->pathdata.Points, sizeof(PointF) * > pathData->Count); > + memcpy(pathData->Types , path->pathdata.Types , pathData->Count); > + > + return Ok; > +} > + > GpStatus WINGDIPAPI GdipGetPathFillMode(GpPath *path, GpFillMode *fillmode) > { > if(!path || !fillmode) > diff --git a/dlls/gdiplus/tests/graphicspath.c > b/dlls/gdiplus/tests/graphicspath.c > index 6436b1a..672f6da 100644 > --- a/dlls/gdiplus/tests/graphicspath.c > +++ b/dlls/gdiplus/tests/graphicspath.c > @@ -149,6 +149,28 @@ static void test_constructor_destructor(void) > expect(Ok, status); > } > > +static void test_getpathdata(void) > +{ > + GpPath *path; > + GpPathData data; > + GpStatus status; > + > + GdipCreatePath(FillModeAlternate, &path); > + status = GdipAddPathLine(path, 5.0, 5.0, 100.0, 50.0); > + expect(Ok, status); > + > + status = GdipGetPathData(path, &data); > + expect(Ok, status); > + expect((data.Count == 2), TRUE); > + expect((data.Points[0].X == 5.0) && (data.Points[0].Y == 5.0) && > + (data.Points[1].X == 100.0) && (data.Points[1].Y == 50.0), TRUE); > + expect((data.Types[0] == PathPointTypeStart) && (data.Types[1] == > PathPointTypeLine), TRUE); > + > + GdipFree(data.Points); > + GdipFree(data.Types); > + GdipDeletePath(path); > +} > + > static path_test_t line2_path[] = { > {0.0, 50.0, PathPointTypeStart, 0, 0}, /*0*/ > {5.0, 45.0, PathPointTypeLine, 0, 0}, /*1*/ > @@ -605,6 +627,7 @@ START_TEST(graphicspath) > GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); > > test_constructor_destructor(); > + test_getpathdata(); > test_line2(); > test_arc(); > test_worldbounds(); > diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h > index 5ce32b2..e4f5d62 100644 > --- a/include/gdiplusflat.h > +++ b/include/gdiplusflat.h > @@ -225,6 +225,7 @@ GpStatus WINGDIPAPI GdipCreatePath2(GDIPCONST > GpPointF*,GDIPCONST BYTE*,INT, > GpFillMode,GpPath**); > GpStatus WINGDIPAPI GdipCreatePath2I(GDIPCONST GpPoint*,GDIPCONST > BYTE*,INT,GpFillMode,GpPath**); > GpStatus WINGDIPAPI GdipDeletePath(GpPath*); > +GpStatus WINGDIPAPI GdipGetPathData(GpPath*,GpPathData*); > GpStatus WINGDIPAPI GdipGetPathFillMode(GpPath*,GpFillMode*); > GpStatus WINGDIPAPI GdipGetPathPoints(GpPath*,GpPointF*,INT); > GpStatus WINGDIPAPI GdipGetPathPointsI(GpPath*,GpPoint*,INT);
Hi, We seem to have numerous failures (and even more serious, test crashes) with these tests on Windows. I did check a few things myself but I'm lacking the knowledge to look further in to this. Running the tests on Wine succeeds for me, when I however run the same graphicspath tests on Wine with a native gdiplus.dll (through winetricks) this test is also crashing. -- Cheers, Paul.