* src/base/ftmac.c (p2c_str): Removed.

(file_spec_from_path) [TARGET_API_MAC_CARBON]: Added support for
OS X.
(is_dfont) [TARGET_API_MAC_CARBON]: Define only for OS X.
Handle `nameLen' <= 6 also.
(parse_fond): Remove unused variable `name_table'.
Use functionality of old p2c_str directly.
Add safety checks.
(read_lwfn): Initialize `size_p'.
Check for size_p == NULL.
(new_memory_stream, open_face_from_buffer): Updated to FreeType 2.1.
(FT_New_Face_From_LWFN): Remove unused variable `memory'.
Remove some dead code.
(FT_New_Face_From_SFNT): Remove unused variable `stream'.
(FT_New_Face_From_dfont) [TARGET_API_MAC_CARBON]: Define only for
OS X.
(FT_New_Face_From_FOND): Remove unused variable `error'.
(ResourceForkSize): New function.
(FT_New_Face): Use it.
Handle empty resource forks.
Conditionalize some code for OS X.
Add code to call normal loader as a fallback.

Some more variable renames to avoid troubles on the Mac.

* src/raster/ftraster.c:
s/Unknown|Ascending|Descending|Flat/\1_State/.
* src/smooth/ftgrays.c: s/TScan/TCoord/.

Other changes for the Mac.

* include/freetype/config/ftconfig.h: Define FT_MACINTOSH for
Mac platforms.
* src/base/ftobjs.c: s/macintosh/FT_MACINTOSH/.

* src/raster/ftrend1.c (ft_raster1_render): Make `pitch' always
an even number.
This commit is contained in:
Werner Lemberg 2002-04-30 14:26:49 +00:00
parent b5127306ad
commit 26d737a8a5
7 changed files with 287 additions and 193 deletions

View File

@ -1,3 +1,28 @@
2002-04-30 Wenlin Institute (Tom Bishop) <wenlin@wenlin.com>
* src/base/ftmac.c (p2c_str): Removed.
(file_spec_from_path) [TARGET_API_MAC_CARBON]: Added support for
OS X.
(is_dfont) [TARGET_API_MAC_CARBON]: Define only for OS X.
Handle `nameLen' <= 6 also.
(parse_fond): Remove unused variable `name_table'.
Use functionality of old p2c_str directly.
Add safety checks.
(read_lwfn): Initialize `size_p'.
Check for size_p == NULL.
(new_memory_stream, open_face_from_buffer): Updated to FreeType 2.1.
(FT_New_Face_From_LWFN): Remove unused variable `memory'.
Remove some dead code.
(FT_New_Face_From_SFNT): Remove unused variable `stream'.
(FT_New_Face_From_dfont) [TARGET_API_MAC_CARBON]: Define only for
OS X.
(FT_New_Face_From_FOND): Remove unused variable `error'.
(ResourceForkSize): New function.
(FT_New_Face): Use it.
Handle empty resource forks.
Conditionalize some code for OS X.
Add code to call normal loader as a fallback.
2002-04-30 Werner Lemberg <wl@gnu.org>
`interface' is reserved on the Mac.
@ -15,6 +40,21 @@
* src/truetype/ttdriver.c: s/interface/tt_interface/.
* src/type1/t1driver.c: s/interface/t1_interface/.
Some more variable renames to avoid troubles on the Mac.
* src/raster/ftraster.c:
s/Unknown|Ascending|Descending|Flat/\1_State/.
* src/smooth/ftgrays.c: s/TScan/TCoord/.
Other changes for the Mac.
* include/freetype/config/ftconfig.h: Define FT_MACINTOSH for
Mac platforms.
* src/base/ftobjs.c: s/macintosh/FT_MACINTOSH/.
* src/raster/ftrend1.c (ft_raster1_render): Make `pitch' always
an even number.
2002-04-29 Jouk Jansen <joukj@hrem.stm.tudelft.nl>
* descrip.mms (all): Add pfr driver.

View File

@ -101,6 +101,18 @@ FT_BEGIN_HEADER
/*************************************************************************/
/*************************************************************************/
/* */
/* Mac support */
/* */
/* This is the only necessary change, so it is defined here instead */
/* providing a new configuration file. */
/* */
#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
#define FT_MACINTOSH 1
#endif
/*************************************************************************/
/* */
/* IntN types */

View File

@ -19,36 +19,38 @@
/*
Notes
Mac suitcase files can (and often do!) contain multiple fonts. To
Mac suitcase files can (and often do!) contain multiple fonts. To
support this I use the face_index argument of FT_(Open|New)_Face()
functions, and pretend the suitcase file is a collection.
Warning: although the FOND driver sets face->num_faces field to the
Warning: Although the FOND driver sets face->num_faces field to the
number of available fonts, but the Type 1 driver sets it to 1 anyway.
So this field is currently not reliable, and I don't see a clean way
to resolve that. The face_index argument translates to
to resolve that. The face_index argument translates to
Get1IndResource( 'FOND', face_index + 1 );
so clients should figure out the resource index of the FOND.
(I'll try to provide some example code for this at some point.)
The Mac FOND support works roughly like this:
- Check whether the offered stream points to a Mac suitcase file.
This is done by checking the file type: it has to be 'FFIL' or 'tfil'.
The stream that gets passed to our init_face() routine is a stdio
stream, which isn't usable for us, since the FOND resources live
in the resource fork. So we just grab the stream->pathname field.
in the resource fork. So we just grab the stream->pathname field.
- Read the FOND resource into memory, then check whether there is
a TrueType font and/or (!) a Type 1 font available.
a TrueType font and/or(!) a Type 1 font available.
- If there is a Type 1 font available (as a separate 'LWFN' file),
read its data into memory, massage it slightly so it becomes
PFB data, wrap it into a memory stream, load the Type 1 driver
and delegate the rest of the work to it by calling FT_Open_Face().
(XXX TODO: after this has been done, the kerning data from the FOND
resource should be appended to the face: on the Mac there are usually
no AFM files available. However, this is tricky since we need to map
resource should be appended to the face: On the Mac there are usually
no AFM files available. However, this is tricky since we need to map
Mac char codes to ps glyph names to glyph ID's...)
- If there is a TrueType font (an 'sfnt' resource), read it into
@ -80,26 +82,25 @@
#define PREFER_LWFN 1
#endif
/* Quick'n'dirty Pascal string to C string converter.
Warning: this call is not thread safe! Use with caution. */
static char*
p2c_str( unsigned char* pstr )
{
static char cstr[256];
ft_strncpy( cstr, (char*)pstr + 1, pstr[0] );
cstr[pstr[0]] = '\0';
return cstr;
}
/* Given a pathname, fill in a file spec. */
static int
file_spec_from_path( const char* pathname,
FSSpec* spec )
{
#if TARGET_API_MAC_CARBON
OSErr e;
FSRef ref;
e = FSPathMakeRef( (UInt8 *)pathname, &ref, false /* not a directory */ );
if ( e == noErr )
e = FSGetCatalogInfo( &ref, kFSCatInfoNone, NULL, NULL, spec, NULL );
return ( e == noErr ) ? 0 : (-1);
#else
Str255 p_path;
FT_ULong path_len;
@ -115,6 +116,8 @@
return -1;
else
return 0;
#endif
}
@ -132,24 +135,21 @@
}
#if TARGET_API_MAC_CARBON
/* is this a Mac OS X .dfont file */
static Boolean
is_dfont( FSSpec* spec )
{
int nameLen = spec->name[0];
int nameLen = spec->name[0];
if ( spec->name[nameLen - 5] == '.' &&
spec->name[nameLen - 4] == 'd' &&
spec->name[nameLen - 3] == 'f' &&
spec->name[nameLen - 2] == 'o' &&
spec->name[nameLen - 1] == 'n' &&
spec->name[nameLen ] == 't' )
return true;
else
return false;
return nameLen >= 6 &&
!memcmp( spec->name + nameLen - 5, ".dfont", 6 );
}
#endif
/* Given a PostScript font name, create the Macintosh LWFN file name. */
static void
@ -193,12 +193,12 @@
FCBPBRec pb;
OSErr error;
pb.ioNamePtr = file_name;
pb.ioVRefNum = 0;
pb.ioRefNum = ref_num;
pb.ioFCBIndx = 0;
error = PBGetFCBInfoSync( &pb );
if ( error == noErr )
{
@ -280,7 +280,6 @@
unsigned char* p = (unsigned char*)fond_data;
StyleTable* style;
unsigned short string_count;
unsigned char* name_table = 0;
char ps_name[256];
unsigned char* names[64];
int i;
@ -298,16 +297,43 @@
p += names[i][0];
p++;
}
ft_strcpy( ps_name, p2c_str( names[0] ) ); /* Family name */
if ( style->indexes[0] > 1 )
{
unsigned char* suffixes = names[style->indexes[0] - 1];
size_t ps_name_len = (size_t)names[0][0];
for ( i = 1; i <= suffixes[0]; i++ )
strcat( ps_name, p2c_str( names[suffixes[i] - 1] ) );
if ( ps_name_len != 0 )
{
memcpy(ps_name, names[0] + 1, ps_name_len);
ps_name[ps_name_len] = 0;
}
if ( style->indexes[0] > 1 )
{
unsigned char* suffixes = names[style->indexes[0] - 1];
for ( i = 1; i < suffixes[0]; i++ )
{
unsigned char* s;
size_t j = suffixes[i] - 1;
if ( j < string_count && ( s = names[j] ) != NULL )
{
size_t s_len = (size_t)s[0];
if ( s_len != 0 && ps_name_len + s_len < sizeof ( ps_name ) )
{
memcpy( ps_name + ps_name_len, s + 1, s_len );
ps_name_len += s_len;
ps_name[ps_name_len] = 0;
}
}
}
}
}
create_lwfn_name( ps_name, lwfn_file_name );
}
}
@ -326,7 +352,7 @@
{
FT_Error error = FT_Err_Ok;
short res_ref, res_id;
unsigned char *buffer, *p, *size_p;
unsigned char *buffer, *p, *size_p = NULL;
FT_ULong total_size = 0;
FT_ULong post_size, pfb_chunk_size;
Handle post_data;
@ -340,7 +366,7 @@
/* First pass: load all POST resources, and determine the size of
the output buffer. */
res_id = 501;
res_id = 501;
last_code = -1;
for (;;)
@ -368,9 +394,9 @@
/* Second pass: append all POST data to the buffer, add PFB fields.
Glue all consecutive chunks of the same type together. */
p = buffer;
res_id = 501;
last_code = -1;
p = buffer;
res_id = 501;
last_code = -1;
pfb_chunk_size = 0;
for (;;)
@ -387,10 +413,13 @@
if ( last_code != -1 )
{
/* we're done adding a chunk, fill in the size field */
*size_p++ = (FT_Byte)( pfb_chunk_size & 0xFF );
*size_p++ = (FT_Byte)( ( pfb_chunk_size >> 8 ) & 0xFF );
*size_p++ = (FT_Byte)( ( pfb_chunk_size >> 16 ) & 0xFF );
*size_p++ = (FT_Byte)( ( pfb_chunk_size >> 24 ) & 0xFF );
if ( size_p != NULL )
{
*size_p++ = (FT_Byte)( pfb_chunk_size & 0xFF );
*size_p++ = (FT_Byte)( ( pfb_chunk_size >> 8 ) & 0xFF );
*size_p++ = (FT_Byte)( ( pfb_chunk_size >> 16 ) & 0xFF );
*size_p++ = (FT_Byte)( ( pfb_chunk_size >> 24 ) & 0xFF );
}
pfb_chunk_size = 0;
}
@ -442,39 +471,36 @@
/* Create a new memory stream from a buffer and a size. */
static FT_Error
new_memory_stream( FT_Library library,
FT_Byte* base,
FT_ULong size,
FT_Stream_Close close,
FT_Stream* astream )
new_memory_stream( FT_Library library,
FT_Byte* base,
FT_ULong size,
FT_Stream_CloseFunc close,
FT_Stream *astream )
{
FT_Error error;
FT_Memory memory;
FT_Stream stream;
FT_Error error;
FT_Memory memory;
FT_Stream stream;
if ( !library )
return FT_Err_Invalid_Library_Handle;
if ( !library )
return FT_Err_Invalid_Library_Handle;
if ( !base )
return FT_Err_Invalid_Argument;
if ( !base )
return FT_Err_Invalid_Argument;
*astream = 0;
memory = library->memory;
if ( FT_NEW( stream ) )
goto Exit;
*astream = 0;
memory = library->memory;
if ( FT_NEW( stream ) )
goto Exit;
FT_Stream_OpenMemory( library,
base,
size,
stream );
FT_Stream_OpenMemory( stream, base, size );
stream->close = close;
stream->close = close;
*astream = stream;
*astream = stream;
Exit:
return error;
Exit:
return error;
}
@ -485,7 +511,7 @@
FT_ULong size,
FT_Long face_index,
char* driver_name,
FT_Face* aface )
FT_Face *aface )
{
FT_Open_Args args;
FT_Error error;
@ -517,9 +543,10 @@
(*aface)->face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
else
{
FT_Stream_Close( stream );
FT_Stream_CloseFunc( stream );
FT_FREE( stream );
}
return error;
}
@ -529,35 +556,17 @@
FT_New_Face_From_LWFN( FT_Library library,
FSSpec* spec,
FT_Long face_index,
FT_Face* aface )
FT_Face *aface )
{
FT_Byte* pfb_data;
FT_ULong pfb_size;
FT_Error error;
FT_Memory memory = library->memory;
FT_Byte* pfb_data;
FT_ULong pfb_size;
FT_Error error;
error = read_lwfn( library->memory, spec, &pfb_data, &pfb_size );
if ( error )
return error;
#if 0
{
FILE* f;
char* path;
path = p2c_str( spec->name );
strcat( path, ".PFB" );
f = fopen( path, "wb" );
if ( f )
{
fwrite( pfb_data, 1, pfb_size, f );
fclose( f );
}
}
#endif
return open_face_from_buffer( library,
pfb_data,
pfb_size,
@ -572,12 +581,11 @@
FT_New_Face_From_SFNT( FT_Library library,
short sfnt_id,
FT_Long face_index,
FT_Face* aface )
FT_Face *aface )
{
Handle sfnt = NULL;
FT_Byte* sfnt_data;
size_t sfnt_size;
FT_Stream stream = NULL;
FT_Error error = 0;
FT_Memory memory = library->memory;
@ -612,7 +620,7 @@
FT_New_Face_From_Suitcase( FT_Library library,
FSSpec* spec,
FT_Long face_index,
FT_Face* aface )
FT_Face *aface )
{
FT_Error error = FT_Err_Ok;
short res_ref, res_index;
@ -648,6 +656,8 @@
}
#if TARGET_API_MAC_CARBON
/* Create a new FT_Face from a file spec to a suitcase file. */
static FT_Error
FT_New_Face_From_dfont( FT_Library library,
@ -694,8 +704,10 @@
return error;
}
#endif
/* documentation in ftmac.h */
/* documentation is in ftmac.h */
FT_EXPORT_DEF( FT_Error )
FT_New_Face_From_FOND( FT_Library library,
@ -703,13 +715,12 @@
FT_Long face_index,
FT_Face *aface )
{
short sfnt_id, have_sfnt, have_lwfn = 0;
Str255 lwfn_file_name;
short fond_id;
OSType fond_type;
Str255 fond_name;
FSSpec lwfn_spec;
FT_Error error = FT_Err_Unknown_File_Format;
short sfnt_id, have_sfnt, have_lwfn = 0;
Str255 lwfn_file_name;
short fond_id;
OSType fond_type;
Str255 fond_name;
FSSpec lwfn_spec;
GetResInfo( fond, &fond_id, &fond_type, fond_name );
@ -743,7 +754,7 @@
}
/* documentation in ftmac.h */
/* documentation is in ftmac.h */
FT_EXPORT_DEF( FT_Error )
FT_GetFile_From_Mac_Name( char* fontName,
@ -792,7 +803,7 @@
&style, &size );
if ( stat2 == 0 && size == 0 )
{
char fullName[256];
char fullName[256];
/* build up a complete face name */
@ -829,6 +840,25 @@
}
static long
ResourceForkSize(FSSpec* spec)
{
long len;
short refNum;
OSErr e;
e = FSpOpenRF( spec, fsRdPerm, &refNum ); /* I.M. Files 2-155 */
if ( e == noErr )
{
e = GetEOF( refNum, &len );
FSClose( refNum );
}
return ( e == noErr ) ? len : 0;
}
/*************************************************************************/
/* */
/* <Function> */
@ -858,20 +888,31 @@
if ( file_spec_from_path( pathname, &spec ) )
return FT_Err_Invalid_Argument;
file_type = get_file_type( &spec );
if ( file_type == 'FFIL' || file_type == 'tfil' )
return FT_New_Face_From_Suitcase( library, &spec, face_index, aface );
else if ( file_type == 'LWFN' )
return FT_New_Face_From_LWFN( library, &spec, face_index, aface );
else if ( is_dfont( &spec ) )
return FT_New_Face_From_dfont( library, &spec, face_index, aface );
else /* let it fall through to normal loader (.ttf, .otf, etc.) */
{
args.flags = ft_open_pathname;
args.pathname = (char*)pathname;
/* Regardless of type, don't try to use the resource fork if it is */
/* empty. Some TTF fonts have type `FFIL', for example, but they */
/* only have data forks. */
return FT_Open_Face( library, &args, face_index, aface );
if ( ResourceForkSize( &spec ) != 0 )
{
file_type = get_file_type( &spec );
if ( file_type == 'FFIL' || file_type == 'tfil' )
return FT_New_Face_From_Suitcase( library, &spec, face_index, aface );
if ( file_type == 'LWFN' )
return FT_New_Face_From_LWFN( library, &spec, face_index, aface );
}
#if TARGET_API_MAC_CARBON
if ( is_dfont( &spec ) )
return FT_New_Face_From_dfont( library, &spec, face_index, aface );
#endif
/* let it fall through to normal loader (.ttf, .otf, etc.) */
args.flags = ft_open_pathname;
args.pathname = (char*)pathname;
return FT_Open_Face( library, &args, face_index, aface );
}

View File

@ -738,7 +738,7 @@
/* there's a Mac-specific extended implementation of FT_New_Face() */
/* in src/mac/ftmac.c */
#ifndef macintosh
#ifndef FT_MACINTOSH
/* documentation is in freetype.h */
@ -761,7 +761,7 @@
return FT_Open_Face( library, &args, face_index, aface );
}
#endif /* !macintosh */
#endif /* !FT_MACINTOSH */
/* documentation is in freetype.h */

View File

@ -271,10 +271,10 @@
/* States of each line, arc, and profile */
typedef enum TStates_
{
Unknown,
Ascending,
Descending,
Flat
Unknown_State,
Ascending_State,
Descending_State,
Flat_State
} TStates;
@ -579,12 +579,12 @@
switch ( aState )
{
case Ascending:
case Ascending_State:
ras.cProfile->flow = Flow_Up;
FT_TRACE6(( "New ascending profile = %lx\n", (long)ras.cProfile ));
break;
case Descending:
case Descending_State:
ras.cProfile->flow = Flow_Down;
FT_TRACE6(( "New descending profile = %lx\n", (long)ras.cProfile ));
break;
@ -1265,34 +1265,34 @@
switch ( ras.state )
{
case Unknown:
case Unknown_State:
if ( y > ras.lastY )
{
if ( New_Profile( RAS_VARS Ascending ) )
if ( New_Profile( RAS_VARS Ascending_State ) )
return FAILURE;
}
else
{
if ( y < ras.lastY )
if ( New_Profile( RAS_VARS Descending ) )
if ( New_Profile( RAS_VARS Descending_State ) )
return FAILURE;
}
break;
case Ascending:
case Ascending_State:
if ( y < ras.lastY )
{
if ( End_Profile( RAS_VAR ) ||
New_Profile( RAS_VARS Descending ) )
if ( End_Profile( RAS_VAR ) ||
New_Profile( RAS_VARS Descending_State ) )
return FAILURE;
}
break;
case Descending:
case Descending_State:
if ( y > ras.lastY )
{
if ( End_Profile( RAS_VAR ) ||
New_Profile( RAS_VARS Ascending ) )
if ( End_Profile( RAS_VAR ) ||
New_Profile( RAS_VARS Ascending_State ) )
return FAILURE;
}
break;
@ -1305,13 +1305,13 @@
switch ( ras.state )
{
case Ascending:
case Ascending_State:
if ( Line_Up( RAS_VARS ras.lastX, ras.lastY,
x, y, ras.minY, ras.maxY ) )
return FAILURE;
break;
case Descending:
case Descending_State:
if ( Line_Down( RAS_VARS ras.lastX, ras.lastY,
x, y, ras.minY, ras.maxY ) )
return FAILURE;
@ -1402,11 +1402,11 @@
{
/* the arc is y-monotonous, either ascending or descending */
/* detect a change of direction */
state_bez = y1 < y3 ? Ascending : Descending;
state_bez = y1 < y3 ? Ascending_State : Descending_State;
if ( ras.state != state_bez )
{
/* finalize current profile if any */
if ( ras.state != Unknown &&
if ( ras.state != Unknown_State &&
End_Profile( RAS_VAR ) )
goto Fail;
@ -1416,7 +1416,7 @@
}
/* now call the appropriate routine */
if ( state_bez == Ascending )
if ( state_bez == Ascending_State )
{
if ( Bezier_Up( RAS_VARS 2, Split_Conic, ras.minY, ras.maxY ) )
goto Fail;
@ -1529,12 +1529,12 @@
}
else
{
state_bez = ( y1 <= y4 ) ? Ascending : Descending;
state_bez = ( y1 <= y4 ) ? Ascending_State : Descending_State;
/* detect a change of direction */
if ( ras.state != state_bez )
{
if ( ras.state != Unknown &&
if ( ras.state != Unknown_State &&
End_Profile( RAS_VAR ) )
goto Fail;
@ -1543,7 +1543,7 @@
}
/* compute intersections */
if ( state_bez == Ascending )
if ( state_bez == Ascending_State )
{
if ( Bezier_Up( RAS_VARS 3, Split_Cubic, ras.minY, ras.maxY ) )
goto Fail;
@ -1838,7 +1838,7 @@
for ( i = 0; i < ras.outline.n_contours; i++ )
{
ras.state = Unknown;
ras.state = Unknown_State;
ras.gProfile = NULL;
if ( Decompose_Curve( RAS_VARS (unsigned short)start,

View File

@ -167,7 +167,7 @@
}
else
{
pitch = ( width + 7 ) >> 3;
pitch = ( ( width + 15 ) >> 4 ) << 1;
bitmap->pixel_mode = ft_pixel_mode_mono;
}

View File

@ -217,8 +217,8 @@
/* need to define them to "float" or "double" when experimenting with */
/* new algorithms */
typedef int TScan; /* integer scanline/pixel coordinate */
typedef long TPos; /* sub-pixel coordinate */
typedef int TCoord; /* integer scanline/pixel coordinate */
typedef long TPos; /* sub-pixel coordinate */
/* determine the type used to store cell areas. This normally takes at */
/* least PIXEL_BYTES*2 + 1. On 16-bit systems, we need to use `long' */
@ -259,10 +259,10 @@
typedef struct TCell_
{
TScan x;
TScan y;
int cover;
TArea area;
TCoord x;
TCoord y;
int cover;
TArea area;
} TCell, *PCell;
@ -271,22 +271,22 @@
typedef struct TRaster_
{
PCell cells;
int max_cells;
int num_cells;
PCell cells;
int max_cells;
int num_cells;
TScan min_ex, max_ex;
TScan min_ey, max_ey;
TCoord min_ex, max_ex;
TCoord min_ey, max_ey;
TArea area;
int cover;
int invalid;
TArea area;
int cover;
int invalid;
TScan ex, ey;
TScan cx, cy;
TPos x, y;
TCoord ex, ey;
TCoord cx, cy;
TPos x, y;
TScan last_ey;
TCoord last_ey;
FT_Vector bez_stack[32 * 3 + 1];
int lev_stack[32];
@ -407,8 +407,8 @@
/* Set the current cell to a new position. */
/* */
static void
gray_set_cell( RAS_ARG_ TScan ex,
TScan ey )
gray_set_cell( RAS_ARG_ TCoord ex,
TCoord ey )
{
int invalid, record, clean;
@ -464,8 +464,8 @@
/* Start a new contour at a given cell. */
/* */
static void
gray_start_cell( RAS_ARG_ TScan ex,
TScan ey )
gray_start_cell( RAS_ARG_ TCoord ex,
TCoord ey )
{
if ( ex < ras.min_ex )
ex = ras.min_ex - 1;
@ -486,15 +486,15 @@
/* Render a scanline as one or more cells. */
/* */
static void
gray_render_scanline( RAS_ARG_ TScan ey,
TPos x1,
TScan y1,
TPos x2,
TScan y2 )
gray_render_scanline( RAS_ARG_ TCoord ey,
TPos x1,
TCoord y1,
TPos x2,
TCoord y2 )
{
TScan ex1, ex2, fx1, fx2, delta;
long p, first, dx;
int incr, lift, mod, rem;
TCoord ex1, ex2, fx1, fx2, delta;
long p, first, dx;
int incr, lift, mod, rem;
dx = x2 - x1;
@ -596,9 +596,9 @@
gray_render_line( RAS_ARG_ TPos to_x,
TPos to_y )
{
TScan ey1, ey2, fy1, fy2;
TPos dx, dy, x, x2;
int p, rem, mod, lift, delta, first, incr;
TCoord ey1, ey2, fy1, fy2;
TPos dx, dy, x, x2;
int p, rem, mod, lift, delta, first, incr;
ey1 = TRUNC( ras.last_ey );
@ -614,7 +614,7 @@
/* perform vertical clipping */
{
TScan min, max;
TCoord min, max;
min = ey1;
@ -640,9 +640,9 @@
if ( dx == 0 )
{
TScan ex = TRUNC( ras.x );
TScan two_fx = ( ras.x - SUBPIXELS( ex ) ) << 1;
TPos area;
TCoord ex = TRUNC( ras.x );
TCoord two_fx = ( ras.x - SUBPIXELS( ex ) ) << 1;
TPos area;
first = ONE_PIXEL;
@ -1332,10 +1332,10 @@
static void
gray_hline( RAS_ARG_ TScan x,
TScan y,
TPos area,
int acount )
gray_hline( RAS_ARG_ TCoord x,
TCoord y,
TPos area,
int acount )
{
FT_Span* span;
int count;
@ -1431,12 +1431,13 @@
static void
gray_sweep( RAS_ARG_ FT_Bitmap* target )
{
TScan x, y, cover;
TArea area;
PCell start, cur, limit;
TCoord x, y, cover;
TArea area;
PCell start, cur, limit;
FT_UNUSED( target );
if ( ras.num_cells == 0 )
return;