[raster] Improve profile accounting during sweeping.
* src/raster/ftraster.c (TProfile): Get rid of `countL`.
(Draw_Sweep): Use `start` for countdown to activation.
(Horizontal_Sweep_Drop, Vertical_Sweep_Drop): Rely on `height` and
`offset` to verify profile ends for the stub detection.
diff --git a/src/raster/ftraster.c b/src/raster/ftraster.c
index 8f4967c..c015046 100644
--- a/src/raster/ftraster.c
+++ b/src/raster/ftraster.c
@@ -340,14 +340,13 @@
/* during drop-out control */
Int offset; /* bottom or currently scanned array index */
Int height; /* profile's height in scanlines */
- Int start; /* profile's starting scanline */
+ Int start; /* profile's starting scanline, also use */
+ /* as activation counter */
UShort flags; /* Bit 0-2: drop-out mode */
/* Bit 3: profile orientation (up/down) */
/* Bit 4: is top profile? */
/* Bit 5: is bottom profile? */
- Int countL; /* number of lines to step before this */
- /* profile becomes drawable */
FT_F26Dot6 X; /* current coordinate during sweep */
Long x[1]; /* actually variable array of scanline */
/* intersections with `height` elements */
@@ -2176,6 +2175,8 @@
Long e1, e2, pxl;
Int c1, f1;
+ FT_UNUSED( y );
+
FT_TRACE7(( " y=%d x=[% .*f;% .*f]",
y,
@@ -2257,14 +2258,14 @@
/* upper stub test */
if ( left->next == right &&
- left->height <= 0 &&
+ left->height == 1 &&
!( left->flags & Overshoot_Top &&
x2 - x1 >= ras.precision_half ) )
goto Exit;
/* lower stub test */
if ( right->next == left &&
- left->start == y &&
+ left->offset == 0 &&
!( left->flags & Overshoot_Bottom &&
x2 - x1 >= ras.precision_half ) )
goto Exit;
@@ -2475,14 +2476,14 @@
/* rightmost stub test */
if ( left->next == right &&
- left->height <= 0 &&
+ left->height == 1 &&
!( left->flags & Overshoot_Top &&
x2 - x1 >= ras.precision_half ) )
goto Exit;
/* leftmost stub test */
if ( right->next == left &&
- left->start == y &&
+ left->offset == 0 &&
!( left->flags & Overshoot_Bottom &&
x2 - x1 >= ras.precision_half ) )
goto Exit;
@@ -2583,7 +2584,7 @@
P = waiting;
while ( P )
{
- P->countL = P->start - min_Y;
+ P->start -= min_Y;
P->X = P->x[P->offset];
P = P->link;
@@ -2602,8 +2603,8 @@
while ( *Q )
{
P = *Q;
- P->countL -= y_height;
- if ( P->countL == 0 )
+ P->start -= y_height;
+ if ( P->start == 0 )
{
*Q = P->link; /* remove */
@@ -2654,7 +2655,7 @@
P_Right->X = x2;
/* mark profile for drop-out processing */
- P_Left->countL = 1;
+ P_Left->start = -1;
dropouts++;
}
}
@@ -2690,9 +2691,9 @@
while ( P_Left && P_Right )
{
- if ( P_Left->countL )
+ if ( P_Left->start )
{
- P_Left->countL = 0;
+ P_Left->start = 0;
#if 0
dropouts--; /* -- this is useful when debugging only */
#endif