gdiplus: Calculate centroid of path as default center of path gradient.
Signed-off-by: Jeff Smith <whydoubt@gmail.com> Signed-off-by: Vincent Povirk <vincent@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
3a092fb616
commit
1802ca5e34
|
@ -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;
|
||||
|
|
|
@ -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 = GdipDeleteBrush((GpBrush*)grad);
|
||||
expect(Ok, status);
|
||||
|
@ -1359,7 +1359,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 = GdipDeletePath(path);
|
||||
|
|
Loading…
Reference in New Issue