gdiplus: Don't calculate the number of points in the arc by dividing.

oldstable
Vincent Povirk 2009-09-04 16:14:32 -05:00 committed by Alexandre Julliard
parent 99012b9a4e
commit 0acfffc17b
1 changed files with 12 additions and 13 deletions

View File

@ -211,38 +211,37 @@ static void unstretch_angle(REAL * angle, REAL rad_x, REAL rad_y)
INT arc2polybezier(GpPointF * points, REAL x1, REAL y1, REAL x2, REAL y2,
REAL startAngle, REAL sweepAngle)
{
INT i, count;
INT i;
REAL end_angle, start_angle, endAngle;
endAngle = startAngle + sweepAngle;
unstretch_angle(&startAngle, x2 / 2.0, y2 / 2.0);
unstretch_angle(&endAngle, x2 / 2.0, y2 / 2.0);
count = ceilf(fabs(endAngle - startAngle) / M_PI_2) * 3 + 1;
/* don't make more than a full circle */
count = min(MAX_ARC_PTS, count);
if(count == 1)
return 0;
if(!points)
return count;
/* start_angle and end_angle are the iterative variables */
start_angle = startAngle;
for(i = 0; i < count - 1; i += 3){
for(i = 0; i < MAX_ARC_PTS - 1; i += 3){
/* check if we've overshot the end angle */
if( sweepAngle > 0.0 )
{
if (start_angle >= endAngle) break;
end_angle = min(start_angle + M_PI_2, endAngle);
}
else
{
if (start_angle <= endAngle) break;
end_angle = max(start_angle - M_PI_2, endAngle);
}
add_arc_part(&points[i], x1, y1, x2, y2, start_angle, end_angle, i == 0);
if (points)
add_arc_part(&points[i], x1, y1, x2, y2, start_angle, end_angle, i == 0);
start_angle += M_PI_2 * (sweepAngle < 0.0 ? -1.0 : 1.0);
}
return count;
if (i == 0) return 0;
else return i+1;
}
COLORREF ARGB2COLORREF(ARGB color)