[raster] Harmonize target bitmap navigation.
* src/raster/ftraster.c (black_TWorker): Store signed maximum indexes in both directions instead of unsigned dimensions of the original bitmap. (*_Sweep_*, Render_Glyph, ft_black_render): Updated all users.
This commit is contained in:
parent
e920273774
commit
6338f2a681
|
@ -459,10 +459,6 @@
|
||||||
|
|
||||||
Byte dropOutControl; /* current drop_out control method */
|
Byte dropOutControl; /* current drop_out control method */
|
||||||
|
|
||||||
UShort bWidth; /* target bitmap width */
|
|
||||||
PByte bOrigin; /* target bitmap bottom-left origin */
|
|
||||||
PByte bLine; /* target bitmap current line */
|
|
||||||
|
|
||||||
Long lastX, lastY;
|
Long lastX, lastY;
|
||||||
Long minY, maxY;
|
Long minY, maxY;
|
||||||
|
|
||||||
|
@ -480,9 +476,14 @@
|
||||||
|
|
||||||
TStates state; /* rendering state */
|
TStates state; /* rendering state */
|
||||||
|
|
||||||
FT_Bitmap target; /* description of target bit/pixmap */
|
|
||||||
FT_Outline outline;
|
FT_Outline outline;
|
||||||
|
|
||||||
|
Int bTop; /* target bitmap max line index */
|
||||||
|
Int bRight; /* target bitmap rightmost index */
|
||||||
|
Int bPitch; /* target bitmap pitch */
|
||||||
|
PByte bOrigin; /* target bitmap bottom-left origin */
|
||||||
|
PByte bLine; /* target bitmap current line */
|
||||||
|
|
||||||
/* dispatch variables */
|
/* dispatch variables */
|
||||||
|
|
||||||
Function_Sweep_Init* Proc_Sweep_Init;
|
Function_Sweep_Init* Proc_Sweep_Init;
|
||||||
|
@ -2084,7 +2085,7 @@
|
||||||
FT_UNUSED( max );
|
FT_UNUSED( max );
|
||||||
|
|
||||||
|
|
||||||
ras.bLine = ras.bOrigin - min * ras.target.pitch;
|
ras.bLine = ras.bOrigin - min * ras.bPitch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2110,7 +2111,7 @@
|
||||||
e1 = (Int)TRUNC( CEILING( x1 ) );
|
e1 = (Int)TRUNC( CEILING( x1 ) );
|
||||||
e2 = (Int)TRUNC( FLOOR( x2 ) );
|
e2 = (Int)TRUNC( FLOOR( x2 ) );
|
||||||
|
|
||||||
if ( e2 >= 0 && e1 < ras.bWidth )
|
if ( e2 >= 0 && e1 <= ras.bRight )
|
||||||
{
|
{
|
||||||
Byte* target;
|
Byte* target;
|
||||||
|
|
||||||
|
@ -2119,8 +2120,8 @@
|
||||||
|
|
||||||
if ( e1 < 0 )
|
if ( e1 < 0 )
|
||||||
e1 = 0;
|
e1 = 0;
|
||||||
if ( e2 >= ras.bWidth )
|
if ( e2 > ras.bRight )
|
||||||
e2 = ras.bWidth - 1;
|
e2 = ras.bRight;
|
||||||
|
|
||||||
FT_TRACE7(( " -> x=[%d;%d]", e1, e2 ));
|
FT_TRACE7(( " -> x=[%d;%d]", e1, e2 ));
|
||||||
|
|
||||||
|
@ -2273,7 +2274,7 @@
|
||||||
/* bounding box instead */
|
/* bounding box instead */
|
||||||
if ( pxl < 0 )
|
if ( pxl < 0 )
|
||||||
pxl = e1;
|
pxl = e1;
|
||||||
else if ( TRUNC( pxl ) >= ras.bWidth )
|
else if ( TRUNC( pxl ) > ras.bRight )
|
||||||
pxl = e2;
|
pxl = e2;
|
||||||
|
|
||||||
/* check that the other pixel isn't set */
|
/* check that the other pixel isn't set */
|
||||||
|
@ -2284,7 +2285,7 @@
|
||||||
c1 = (Int)( e1 >> 3 );
|
c1 = (Int)( e1 >> 3 );
|
||||||
f1 = (Int)( e1 & 7 );
|
f1 = (Int)( e1 & 7 );
|
||||||
|
|
||||||
if ( e1 >= 0 && e1 < ras.bWidth &&
|
if ( e1 >= 0 && e1 <= ras.bRight &&
|
||||||
ras.bLine[c1] & ( 0x80 >> f1 ) )
|
ras.bLine[c1] & ( 0x80 >> f1 ) )
|
||||||
goto Exit;
|
goto Exit;
|
||||||
}
|
}
|
||||||
|
@ -2294,7 +2295,7 @@
|
||||||
|
|
||||||
e1 = TRUNC( pxl );
|
e1 = TRUNC( pxl );
|
||||||
|
|
||||||
if ( e1 >= 0 && e1 < ras.bWidth )
|
if ( e1 >= 0 && e1 <= ras.bRight )
|
||||||
{
|
{
|
||||||
FT_TRACE7(( " -> x=%ld", e1 ));
|
FT_TRACE7(( " -> x=%ld", e1 ));
|
||||||
|
|
||||||
|
@ -2312,7 +2313,7 @@
|
||||||
static void
|
static void
|
||||||
Vertical_Sweep_Step( RAS_ARG )
|
Vertical_Sweep_Step( RAS_ARG )
|
||||||
{
|
{
|
||||||
ras.bLine -= ras.target.pitch;
|
ras.bLine -= ras.bPitch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2366,13 +2367,13 @@
|
||||||
{
|
{
|
||||||
e1 = TRUNC( e1 );
|
e1 = TRUNC( e1 );
|
||||||
|
|
||||||
if ( e1 >= 0 && (ULong)e1 < ras.target.rows )
|
if ( e1 >= 0 && e1 <= ras.bTop )
|
||||||
{
|
{
|
||||||
Int f1;
|
Int f1;
|
||||||
PByte bits;
|
PByte bits;
|
||||||
|
|
||||||
|
|
||||||
bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.target.pitch;
|
bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.bPitch;
|
||||||
f1 = 0x80 >> ( y & 7 );
|
f1 = 0x80 >> ( y & 7 );
|
||||||
|
|
||||||
FT_TRACE7(( bits[0] & f1 ? " redundant"
|
FT_TRACE7(( bits[0] & f1 ? " redundant"
|
||||||
|
@ -2388,13 +2389,13 @@
|
||||||
{
|
{
|
||||||
e2 = TRUNC( e2 );
|
e2 = TRUNC( e2 );
|
||||||
|
|
||||||
if ( e2 >= 0 && (ULong)e2 < ras.target.rows )
|
if ( e2 >= 0 && e2 <= ras.bTop )
|
||||||
{
|
{
|
||||||
Int f1;
|
Int f1;
|
||||||
PByte bits;
|
PByte bits;
|
||||||
|
|
||||||
|
|
||||||
bits = ras.bOrigin + ( y >> 3 ) - e2 * ras.target.pitch;
|
bits = ras.bOrigin + ( y >> 3 ) - e2 * ras.bPitch;
|
||||||
f1 = 0x80 >> ( y & 7 );
|
f1 = 0x80 >> ( y & 7 );
|
||||||
|
|
||||||
FT_TRACE7(( bits[0] & f1 ? " redundant"
|
FT_TRACE7(( bits[0] & f1 ? " redundant"
|
||||||
|
@ -2491,7 +2492,7 @@
|
||||||
/* bounding box instead */
|
/* bounding box instead */
|
||||||
if ( pxl < 0 )
|
if ( pxl < 0 )
|
||||||
pxl = e1;
|
pxl = e1;
|
||||||
else if ( (ULong)( TRUNC( pxl ) ) >= ras.target.rows )
|
else if ( TRUNC( pxl ) > ras.bTop )
|
||||||
pxl = e2;
|
pxl = e2;
|
||||||
|
|
||||||
/* check that the other pixel isn't set */
|
/* check that the other pixel isn't set */
|
||||||
|
@ -2499,11 +2500,10 @@
|
||||||
|
|
||||||
e1 = TRUNC( e1 );
|
e1 = TRUNC( e1 );
|
||||||
|
|
||||||
bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.target.pitch;
|
bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.bPitch;
|
||||||
f1 = 0x80 >> ( y & 7 );
|
f1 = 0x80 >> ( y & 7 );
|
||||||
|
|
||||||
if ( e1 >= 0 &&
|
if ( e1 >= 0 && e1 <= ras.bTop &&
|
||||||
(ULong)e1 < ras.target.rows &&
|
|
||||||
*bits & f1 )
|
*bits & f1 )
|
||||||
goto Exit;
|
goto Exit;
|
||||||
}
|
}
|
||||||
|
@ -2513,11 +2513,11 @@
|
||||||
|
|
||||||
e1 = TRUNC( pxl );
|
e1 = TRUNC( pxl );
|
||||||
|
|
||||||
if ( e1 >= 0 && (ULong)e1 < ras.target.rows )
|
if ( e1 >= 0 && e1 <= ras.bTop )
|
||||||
{
|
{
|
||||||
FT_TRACE7(( " -> y=%ld", e1 ));
|
FT_TRACE7(( " -> y=%ld", e1 ));
|
||||||
|
|
||||||
bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.target.pitch;
|
bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.bPitch;
|
||||||
f1 = 0x80 >> ( y & 7 );
|
f1 = 0x80 >> ( y & 7 );
|
||||||
|
|
||||||
bits[0] |= f1;
|
bits[0] |= f1;
|
||||||
|
@ -2910,7 +2910,7 @@
|
||||||
ras.Proc_Sweep_Drop = Vertical_Sweep_Drop;
|
ras.Proc_Sweep_Drop = Vertical_Sweep_Drop;
|
||||||
ras.Proc_Sweep_Step = Vertical_Sweep_Step;
|
ras.Proc_Sweep_Step = Vertical_Sweep_Step;
|
||||||
|
|
||||||
error = Render_Single_Pass( RAS_VARS 0, 0, (Int)ras.target.rows - 1 );
|
error = Render_Single_Pass( RAS_VARS 0, 0, ras.bTop );
|
||||||
if ( error )
|
if ( error )
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
@ -2922,7 +2922,7 @@
|
||||||
ras.Proc_Sweep_Drop = Horizontal_Sweep_Drop;
|
ras.Proc_Sweep_Drop = Horizontal_Sweep_Drop;
|
||||||
ras.Proc_Sweep_Step = Horizontal_Sweep_Step;
|
ras.Proc_Sweep_Step = Horizontal_Sweep_Step;
|
||||||
|
|
||||||
error = Render_Single_Pass( RAS_VARS 1, 0, (Int)ras.target.width - 1 );
|
error = Render_Single_Pass( RAS_VARS 1, 0, ras.bRight );
|
||||||
if ( error )
|
if ( error )
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
@ -3067,13 +3067,14 @@
|
||||||
return FT_THROW( Invalid_Argument );
|
return FT_THROW( Invalid_Argument );
|
||||||
|
|
||||||
ras.outline = *outline;
|
ras.outline = *outline;
|
||||||
ras.target = *target_map;
|
|
||||||
|
|
||||||
ras.bWidth = (UShort)ras.target.width;
|
ras.bTop = (Int)target_map->rows - 1;
|
||||||
ras.bOrigin = (Byte*)ras.target.buffer;
|
ras.bRight = (Int)target_map->width - 1;
|
||||||
|
ras.bPitch = (Int)target_map->pitch;
|
||||||
|
ras.bOrigin = (PByte)target_map->buffer;
|
||||||
|
|
||||||
if ( ras.target.pitch > 0 )
|
if ( ras.bPitch > 0 )
|
||||||
ras.bOrigin += (Long)( ras.target.rows - 1 ) * ras.target.pitch;
|
ras.bOrigin += ras.bTop * ras.bPitch;
|
||||||
|
|
||||||
return Render_Glyph( RAS_VAR );
|
return Render_Glyph( RAS_VAR );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue