|
|
|
@ -483,6 +483,9 @@ typedef ptrdiff_t FT_PtrDist; |
|
|
|
|
static gray_TWorker ras; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#define FT_INTEGRATE( ras, a, b ) \ |
|
|
|
|
ras.cover += (a), ras.area += (a) * (TArea)(b) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct gray_TRaster_ |
|
|
|
|
{ |
|
|
|
@ -655,10 +658,9 @@ typedef ptrdiff_t FT_PtrDist; |
|
|
|
|
/* XXX: y-delta and x-delta below should be related. */ |
|
|
|
|
FT_DIV_MOD( TCoord, p, dx, delta, mod ); |
|
|
|
|
|
|
|
|
|
ras.area += (TArea)( ( fx1 + first ) * delta ); |
|
|
|
|
ras.cover += delta; |
|
|
|
|
y1 += delta; |
|
|
|
|
ex1 += incr; |
|
|
|
|
FT_INTEGRATE( ras, delta, fx1 + first ); |
|
|
|
|
y1 += delta; |
|
|
|
|
ex1 += incr; |
|
|
|
|
gray_set_cell( RAS_VAR_ ex1, ey ); |
|
|
|
|
|
|
|
|
|
if ( ex1 != ex2 ) |
|
|
|
@ -679,10 +681,9 @@ typedef ptrdiff_t FT_PtrDist; |
|
|
|
|
delta++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ras.area += (TArea)( ONE_PIXEL * delta ); |
|
|
|
|
ras.cover += delta; |
|
|
|
|
y1 += delta; |
|
|
|
|
ex1 += incr; |
|
|
|
|
FT_INTEGRATE( ras, delta, ONE_PIXEL ); |
|
|
|
|
y1 += delta; |
|
|
|
|
ex1 += incr; |
|
|
|
|
gray_set_cell( RAS_VAR_ ex1, ey ); |
|
|
|
|
} while ( ex1 != ex2 ); |
|
|
|
|
} |
|
|
|
@ -690,10 +691,7 @@ typedef ptrdiff_t FT_PtrDist; |
|
|
|
|
fx1 = ONE_PIXEL - first; |
|
|
|
|
|
|
|
|
|
End: |
|
|
|
|
dy = y2 - y1; |
|
|
|
|
|
|
|
|
|
ras.area += (TArea)( ( fx1 + fx2 ) * dy ); |
|
|
|
|
ras.cover += dy; |
|
|
|
|
FT_INTEGRATE( ras, y2 - y1, fx1 + fx2 ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -736,7 +734,6 @@ typedef ptrdiff_t FT_PtrDist; |
|
|
|
|
{ |
|
|
|
|
TCoord ex = TRUNC( ras.x ); |
|
|
|
|
TCoord two_fx = FRACT( ras.x ) << 1; |
|
|
|
|
TArea area; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( dy > 0) |
|
|
|
@ -750,27 +747,23 @@ typedef ptrdiff_t FT_PtrDist; |
|
|
|
|
incr = -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
delta = first - fy1; |
|
|
|
|
ras.area += (TArea)two_fx * delta; |
|
|
|
|
ras.cover += delta; |
|
|
|
|
ey1 += incr; |
|
|
|
|
delta = first - fy1; |
|
|
|
|
FT_INTEGRATE( ras, delta, two_fx); |
|
|
|
|
ey1 += incr; |
|
|
|
|
|
|
|
|
|
gray_set_cell( RAS_VAR_ ex, ey1 ); |
|
|
|
|
|
|
|
|
|
delta = first + first - ONE_PIXEL; |
|
|
|
|
area = (TArea)two_fx * delta; |
|
|
|
|
while ( ey1 != ey2 ) |
|
|
|
|
{ |
|
|
|
|
ras.area += area; |
|
|
|
|
ras.cover += delta; |
|
|
|
|
ey1 += incr; |
|
|
|
|
FT_INTEGRATE( ras, delta, two_fx); |
|
|
|
|
ey1 += incr; |
|
|
|
|
|
|
|
|
|
gray_set_cell( RAS_VAR_ ex, ey1 ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
delta = fy2 - ONE_PIXEL + first; |
|
|
|
|
ras.area += (TArea)two_fx * delta; |
|
|
|
|
ras.cover += delta; |
|
|
|
|
delta = fy2 - ONE_PIXEL + first; |
|
|
|
|
FT_INTEGRATE( ras, delta, two_fx); |
|
|
|
|
|
|
|
|
|
goto End; |
|
|
|
|
} |
|
|
|
@ -883,8 +876,7 @@ typedef ptrdiff_t FT_PtrDist; |
|
|
|
|
do |
|
|
|
|
{ |
|
|
|
|
fy2 = ONE_PIXEL; |
|
|
|
|
ras.cover += ( fy2 - fy1 ); |
|
|
|
|
ras.area += ( fy2 - fy1 ) * fx1 * 2; |
|
|
|
|
FT_INTEGRATE( ras, fy2 - fy1, fx1 * 2 ); |
|
|
|
|
fy1 = 0; |
|
|
|
|
ey1++; |
|
|
|
|
gray_set_cell( RAS_VAR_ ex1, ey1 ); |
|
|
|
@ -893,8 +885,7 @@ typedef ptrdiff_t FT_PtrDist; |
|
|
|
|
do |
|
|
|
|
{ |
|
|
|
|
fy2 = 0; |
|
|
|
|
ras.cover += ( fy2 - fy1 ); |
|
|
|
|
ras.area += ( fy2 - fy1 ) * fx1 * 2; |
|
|
|
|
FT_INTEGRATE( ras, fy2 - fy1, fx1 * 2 ); |
|
|
|
|
fy1 = ONE_PIXEL; |
|
|
|
|
ey1--; |
|
|
|
|
gray_set_cell( RAS_VAR_ ex1, ey1 ); |
|
|
|
@ -918,8 +909,7 @@ typedef ptrdiff_t FT_PtrDist; |
|
|
|
|
fx2 = 0; |
|
|
|
|
fy2 = FT_UDIV( -prod, -dx ); |
|
|
|
|
prod -= dy * ONE_PIXEL; |
|
|
|
|
ras.cover += ( fy2 - fy1 ); |
|
|
|
|
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 ); |
|
|
|
|
FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 ); |
|
|
|
|
fx1 = ONE_PIXEL; |
|
|
|
|
fy1 = fy2; |
|
|
|
|
ex1--; |
|
|
|
@ -930,8 +920,7 @@ typedef ptrdiff_t FT_PtrDist; |
|
|
|
|
prod -= dx * ONE_PIXEL; |
|
|
|
|
fx2 = FT_UDIV( -prod, dy ); |
|
|
|
|
fy2 = ONE_PIXEL; |
|
|
|
|
ras.cover += ( fy2 - fy1 ); |
|
|
|
|
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 ); |
|
|
|
|
FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 ); |
|
|
|
|
fx1 = fx2; |
|
|
|
|
fy1 = 0; |
|
|
|
|
ey1++; |
|
|
|
@ -942,8 +931,7 @@ typedef ptrdiff_t FT_PtrDist; |
|
|
|
|
prod += dy * ONE_PIXEL; |
|
|
|
|
fx2 = ONE_PIXEL; |
|
|
|
|
fy2 = FT_UDIV( prod, dx ); |
|
|
|
|
ras.cover += ( fy2 - fy1 ); |
|
|
|
|
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 ); |
|
|
|
|
FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 ); |
|
|
|
|
fx1 = 0; |
|
|
|
|
fy1 = fy2; |
|
|
|
|
ex1++; |
|
|
|
@ -954,8 +942,7 @@ typedef ptrdiff_t FT_PtrDist; |
|
|
|
|
fx2 = FT_UDIV( prod, -dy ); |
|
|
|
|
fy2 = 0; |
|
|
|
|
prod += dx * ONE_PIXEL; |
|
|
|
|
ras.cover += ( fy2 - fy1 ); |
|
|
|
|
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 ); |
|
|
|
|
FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 ); |
|
|
|
|
fx1 = fx2; |
|
|
|
|
fy1 = ONE_PIXEL; |
|
|
|
|
ey1--; |
|
|
|
@ -968,8 +955,7 @@ typedef ptrdiff_t FT_PtrDist; |
|
|
|
|
fx2 = FRACT( to_x ); |
|
|
|
|
fy2 = FRACT( to_y ); |
|
|
|
|
|
|
|
|
|
ras.cover += ( fy2 - fy1 ); |
|
|
|
|
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 ); |
|
|
|
|
FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 ); |
|
|
|
|
|
|
|
|
|
End: |
|
|
|
|
ras.x = to_x; |
|
|
|
|