From: Jeff Smith Subject: [PATCH 2/2] gdiplus: Calculate centroid of path as default center of path gradient. Message-Id: <20200122064023.423962-2-whydoubt@gmail.com> Date: Wed, 22 Jan 2020 00:40:23 -0600 In-Reply-To: <20200122064023.423962-1-whydoubt@gmail.com> References: <20200122064023.423962-1-whydoubt@gmail.com> Signed-off-by: Jeff Smith --- 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; ipathdata.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); -- 2.23.0