Signed-off-by: Jeff Smith whydoubt@gmail.com --- dlls/gdiplus/tests/brush.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
diff --git a/dlls/gdiplus/tests/brush.c b/dlls/gdiplus/tests/brush.c index bb645ffef9..ed13b9e4b1 100644 --- a/dlls/gdiplus/tests/brush.c +++ b/dlls/gdiplus/tests/brush.c @@ -1299,6 +1299,7 @@ static void test_pathgradientcenterpoint(void) { static const GpPointF path_points[] = {{0,0}, {3,0}, {0,4}}; GpStatus status; + GpPath* path; GpPathGradient *grad; GpPointF point;
@@ -1344,6 +1345,20 @@ static void test_pathgradientcenterpoint(void) todo_wine expectf(1.0, point.X); todo_wine expectf(4.0/3.0, point.Y);
+ status = GdipCreatePath(FillModeWinding, &path); + expect(Ok, status); + + status = GdipAddPathEllipse(path, 0, 0, 100, 50); + expect(Ok, status); + + status = GdipCreatePathGradientFromPath(path, &grad); + expect(Ok, status); + + status = GdipGetPathGradientCenterPoint(grad, &point); + expect(Ok, status); + todo_wine expectf(700.0/13.0, point.X); + expectf(25.0, point.Y); + status = GdipDeleteBrush((GpBrush*)grad); expect(Ok, status); }
Signed-off-by: Jeff Smith whydoubt@gmail.com --- dlls/gdiplus/brush.c | 16 ++++++++++------ dlls/gdiplus/tests/brush.c | 6 +++--- 2 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/dlls/gdiplus/brush.c b/dlls/gdiplus/brush.c index e321dcaa60..ff0b009559 100644 --- a/dlls/gdiplus/brush.c +++ b/dlls/gdiplus/brush.c @@ -574,7 +574,8 @@ GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect* rect
static GpStatus create_path_gradient(GpPath *path, ARGB centercolor, GpPathGradient **grad) { - GpRectF bounds; + INT i; + REAL sum_x = 0, sum_y = 0;
if(!path || !grad) return InvalidParameter; @@ -582,8 +583,6 @@ static GpStatus create_path_gradient(GpPath *path, ARGB centercolor, GpPathGradi if (path->pathdata.Count < 2) return OutOfMemory;
- GdipGetPathWorldBounds(path, &bounds, NULL, NULL); - *grad = heap_alloc_zero(sizeof(GpPathGradient)); if (!*grad) { @@ -613,9 +612,14 @@ static GpStatus create_path_gradient(GpPath *path, ARGB centercolor, GpPathGradi (*grad)->centercolor = centercolor; (*grad)->wrap = WrapModeClamp; (*grad)->gamma = FALSE; - /* FIXME: this should be set to the "centroid" of the path by default */ - (*grad)->center.X = bounds.X + bounds.Width / 2; - (*grad)->center.Y = bounds.Y + bounds.Height / 2; + for (i=0; i<path->pathdata.Count; i++) + { + sum_x += path->pathdata.Points[i].X; + sum_y += path->pathdata.Points[i].Y; + } + (*grad)->center.X = sum_x / path->pathdata.Count; + (*grad)->center.Y = sum_y / path->pathdata.Count; + (*grad)->focus.X = 0.0; (*grad)->focus.Y = 0.0; (*grad)->surroundcolors[0] = 0xffffffff; diff --git a/dlls/gdiplus/tests/brush.c b/dlls/gdiplus/tests/brush.c index ed13b9e4b1..9caf033d77 100644 --- a/dlls/gdiplus/tests/brush.c +++ b/dlls/gdiplus/tests/brush.c @@ -1342,8 +1342,8 @@ static void test_pathgradientcenterpoint(void)
status = GdipGetPathGradientCenterPoint(grad, &point); expect(Ok, status); - todo_wine expectf(1.0, point.X); - todo_wine expectf(4.0/3.0, point.Y); + expectf(1.0, point.X); + expectf(4.0/3.0, point.Y);
status = GdipCreatePath(FillModeWinding, &path); expect(Ok, status); @@ -1356,7 +1356,7 @@ static void test_pathgradientcenterpoint(void)
status = GdipGetPathGradientCenterPoint(grad, &point); expect(Ok, status); - todo_wine expectf(700.0/13.0, point.X); + expectf(700.0/13.0, point.X); expectf(25.0, point.Y);
status = GdipDeleteBrush((GpBrush*)grad);
This leaks the previous path gradient brush and the new path.