* src/raster/ftraster.c (Bezier_Up): Improve joint and loop.

This commit is contained in:
Alexei Podtelezhnikov 2023-11-09 22:31:36 -05:00
parent 6338f2a681
commit e9a81e4dd8

View File

@ -1151,22 +1151,19 @@
if ( y1 == e )
{
if ( ras.joint )
{
top--;
ras.joint = FALSE;
}
*top++ = arc[degree].x;
e += ras.precision;
e += ras.precision;
}
ras.joint = (Bool)( y2 == e2 );
if ( e2 < e )
goto Fin;
if ( ( top + TRUNC( e2 - e ) + 1 ) >= ras.maxBuff )
{
ras.top = top;
ras.error = FT_THROW( Raster_Overflow );
return FAILURE;
}
@ -1175,8 +1172,6 @@
do
{
ras.joint = FALSE;
y2 = arc[0].y;
x2 = arc[0].x;
@ -1185,7 +1180,6 @@
dy = y2 - arc[degree].y;
dx = x2 - arc[degree].x;
/* split condition should be invariant of direction */
if ( dy > ras.precision_step ||
dx > ras.precision_step ||
@ -1197,22 +1191,21 @@
else
{
*top++ = x2 - FMulDiv( y2 - e, dx, dy );
e += ras.precision;
arc -= degree;
e += ras.precision;
}
}
else
{
if ( y2 == e )
{
ras.joint = TRUE;
*top++ = x2;
e += ras.precision;
*top++ = x2;
e += ras.precision;
}
arc -= degree;
arc -= degree;
}
} while ( arc >= start_arc && e <= e2 );
}
while ( e <= e2 );
Fin:
ras.top = top;