[6/7] gdiplus: Implemented GdipGetPathData with test
Paul Vriens
paul.vriens.wine at gmail.com
Wed Jun 25 10:14:38 CDT 2008
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.
More information about the wine-devel
mailing list