diff --git a/src/raster/ftraster.c b/src/raster/ftraster.c index 41b13fd19..ece8c10e7 100644 --- a/src/raster/ftraster.c +++ b/src/raster/ftraster.c @@ -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;