Author: korli Date: 2011-02-16 18:55:28 +0100 (Wed, 16 Feb 2011) New Revision: 40534 Changeset: http://dev.haiku-os.org/changeset/40534 Modified: haiku/trunk/headers/libs/freetype2/ haiku/trunk/headers/libs/freetype2/freetype/freetype.h haiku/trunk/headers/libs/freetype2/freetype/ftcache.h haiku/trunk/src/libs/freetype2/ haiku/trunk/src/libs/freetype2/base/ftbase.h haiku/trunk/src/libs/freetype2/base/ftdbgmem.c haiku/trunk/src/libs/freetype2/base/ftobjs.c haiku/trunk/src/libs/freetype2/base/ftrfork.c haiku/trunk/src/libs/freetype2/base/ftsystem.c haiku/trunk/src/libs/freetype2/cache/ftcbasic.c haiku/trunk/src/libs/freetype2/cache/ftccache.c haiku/trunk/src/libs/freetype2/cache/ftccache.h haiku/trunk/src/libs/freetype2/cache/ftccmap.c haiku/trunk/src/libs/freetype2/cache/ftcglyph.c haiku/trunk/src/libs/freetype2/cache/ftcglyph.h haiku/trunk/src/libs/freetype2/cache/ftcmanag.h haiku/trunk/src/libs/freetype2/psaux/t1decode.c haiku/trunk/src/libs/freetype2/raster/ftraster.c haiku/trunk/src/libs/freetype2/sfnt/sfobjs.c haiku/trunk/src/libs/freetype2/sfnt/ttload.c haiku/trunk/src/libs/freetype2/sfnt/ttpost.c haiku/trunk/src/libs/freetype2/smooth/ftgrays.c haiku/trunk/src/libs/freetype2/truetype/ttgxvar.c haiku/trunk/src/libs/freetype2/truetype/ttinterp.c haiku/trunk/src/libs/freetype2/truetype/ttobjs.c haiku/trunk/src/libs/freetype2/truetype/ttpload.c haiku/trunk/src/libs/freetype2/type1/t1load.c Log: merged freetype 2.4.4 Property changes on: haiku/trunk/headers/libs/freetype2 ___________________________________________________________________ Modified: svn:mergeinfo - /haiku/branches/developer/bonefish/signals/headers/libs/freetype2:40148-40195 /haiku/vendor/freetype2/2.4.3/include:39521-39523 /haiku/vendor/freetype2/current/include:37946-39520 + /haiku/branches/developer/bonefish/signals/headers/libs/freetype2:40148-40195 /haiku/vendor/freetype2/2.4.4/include:40532 /haiku/vendor/freetype2/current/include:37946-40531 Modified: haiku/trunk/headers/libs/freetype2/freetype/freetype.h =================================================================== --- haiku/trunk/headers/libs/freetype2/freetype/freetype.h 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/headers/libs/freetype2/freetype/freetype.h 2011-02-16 17:55:28 UTC (rev 40534) @@ -3808,7 +3808,7 @@ */ #define FREETYPE_MAJOR 2 #define FREETYPE_MINOR 4 -#define FREETYPE_PATCH 3 +#define FREETYPE_PATCH 4 /*************************************************************************/ Modified: haiku/trunk/headers/libs/freetype2/freetype/ftcache.h =================================================================== --- haiku/trunk/headers/libs/freetype2/freetype/ftcache.h 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/headers/libs/freetype2/freetype/ftcache.h 2011-02-16 17:55:28 UTC (rev 40534) @@ -214,12 +214,17 @@ /* */ +#ifdef FT_CONFIG_OPTION_OLD_INTERNALS + + /* these macros are incompatible with LLP64, should not be used */ + #define FT_POINTER_TO_ULONG( p ) ( (FT_ULong)(FT_Pointer)(p) ) #define FTC_FACE_ID_HASH( i ) \ ((FT_UInt32)(( FT_POINTER_TO_ULONG( i ) >> 3 ) ^ \ ( FT_POINTER_TO_ULONG( i ) << 7 ) ) ) +#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */ /*************************************************************************/ /*************************************************************************/ @@ -700,12 +705,18 @@ (d1)->width == (d2)->width && \ (d1)->flags == (d2)->flags ) +#ifdef FT_CONFIG_OPTION_OLD_INTERNALS + + /* this macro is incompatible with LLP64, should not be used */ + #define FTC_IMAGE_TYPE_HASH( d ) \ (FT_UFast)( FTC_FACE_ID_HASH( (d)->face_id ) ^ \ ( (d)->width << 8 ) ^ (d)->height ^ \ ( (d)->flags << 4 ) ) +#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */ + /*************************************************************************/ /* */ /* <Type> */ @@ -1096,6 +1107,7 @@ (f1)->pix_width == (f2)->pix_width && \ (f1)->pix_height == (f2)->pix_height ) + /* this macro is incompatible with LLP64, should not be used */ #define FTC_FONT_HASH( f ) \ (FT_UInt32)( FTC_FACE_ID_HASH((f)->face_id) ^ \ ((f)->pix_width << 8) ^ \ Property changes on: haiku/trunk/src/libs/freetype2 ___________________________________________________________________ Modified: svn:mergeinfo - /haiku/branches/developer/bonefish/signals/src/libs/freetype2:40148-40195 /haiku/vendor/freetype2/2.4.3:39521-39522 /haiku/vendor/freetype2/2.4.3/src:39521-39523 /haiku/vendor/freetype2/current:37946-39520 /haiku/vendor/freetype2/current/src:37946-39520 + /haiku/branches/developer/bonefish/signals/src/libs/freetype2:40148-40195 /haiku/vendor/freetype2/2.4.3:39521-39522 /haiku/vendor/freetype2/2.4.4/src:40532 /haiku/vendor/freetype2/current:37946-39520 /haiku/vendor/freetype2/current/src:37946-40531 Modified: haiku/trunk/src/libs/freetype2/base/ftbase.h =================================================================== --- haiku/trunk/src/libs/freetype2/base/ftbase.h 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/base/ftbase.h 2011-02-16 17:55:28 UTC (rev 40534) @@ -49,6 +49,17 @@ FT_Face *aface ); +#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK + /* Mac OS X/Darwin kernel often changes recommended method to access */ + /* the resource fork and older methods makes the kernel issue the */ + /* warning of deprecated method. To calm it down, the methods based */ + /* on Darwin VFS should be grouped and skip the rest methods after */ + /* the case the resource is opened but found to lack a font in it. */ + FT_LOCAL( FT_Bool ) + raccess_rule_by_darwin_vfs( FT_UInt rule_index ); +#endif /* FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */ + + FT_END_HEADER #endif /* __FTBASE_H__ */ Modified: haiku/trunk/src/libs/freetype2/base/ftdbgmem.c =================================================================== --- haiku/trunk/src/libs/freetype2/base/ftdbgmem.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/base/ftdbgmem.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -47,7 +47,7 @@ typedef struct FT_MemTableRec_* FT_MemTable; -#define FT_MEM_VAL( addr ) ((FT_ULong)(FT_Pointer)( addr )) +#define FT_MEM_VAL( addr ) ((FT_PtrDist)(FT_Pointer)( addr )) /* * This structure holds statistics for a single allocation/release @@ -275,7 +275,7 @@ for ( i = 0; i < table->size; i++ ) { FT_MemNode node, next, *pnode; - FT_ULong hash; + FT_PtrDist hash; node = table->buckets[i]; @@ -430,7 +430,7 @@ ft_mem_table_get_nodep( FT_MemTable table, FT_Byte* address ) { - FT_ULong hash; + FT_PtrDist hash; FT_MemNode *pnode, node; Modified: haiku/trunk/src/libs/freetype2/base/ftobjs.c =================================================================== --- haiku/trunk/src/libs/freetype2/base/ftobjs.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/base/ftobjs.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -1062,6 +1062,7 @@ if ( cur[0]->platform_id == TT_PLATFORM_APPLE_UNICODE && cur[0]->encoding_id == TT_APPLE_ID_VARIANT_SELECTOR && FT_Get_CMap_Format( cur[0] ) == 14 ) + { #ifdef FT_MAX_CHARMAP_CACHEABLE if ( cur - first > FT_MAX_CHARMAP_CACHEABLE ) { @@ -1071,6 +1072,7 @@ } #endif return cur[0]; + } } return NULL; @@ -1849,6 +1851,7 @@ char * file_names[FT_RACCESS_N_RULES]; FT_Long offsets[FT_RACCESS_N_RULES]; FT_Error errors[FT_RACCESS_N_RULES]; + FT_Bool is_darwin_vfs, vfs_rfork_has_no_font = FALSE; /* not tested */ FT_Open_Args args2; FT_Stream stream2 = 0; @@ -1859,6 +1862,15 @@ for ( i = 0; i < FT_RACCESS_N_RULES; i++ ) { + is_darwin_vfs = raccess_rule_by_darwin_vfs( i ); + if ( is_darwin_vfs && vfs_rfork_has_no_font ) + { + FT_TRACE3(( "Skip rule %d: darwin vfs resource fork" + " is already checked and" + " no font is found\n", i )); + continue; + } + if ( errors[i] ) { FT_TRACE3(( "Error[%d] has occurred in rule %d\n", errors[i], i )); @@ -1872,6 +1884,9 @@ i, args2.pathname, offsets[i] )); error = FT_Stream_New( library, &args2, &stream2 ); + if ( is_darwin_vfs && error == FT_Err_Cannot_Open_Stream ) + vfs_rfork_has_no_font = TRUE; + if ( error ) { FT_TRACE3(( "failed\n" )); @@ -1886,6 +1901,8 @@ if ( !error ) break; + else if ( is_darwin_vfs ) + vfs_rfork_has_no_font = TRUE; } for (i = 0; i < FT_RACCESS_N_RULES; i++) Modified: haiku/trunk/src/libs/freetype2/base/ftrfork.c =================================================================== --- haiku/trunk/src/libs/freetype2/base/ftrfork.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/base/ftrfork.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -349,6 +349,42 @@ const char *insertion ); + typedef enum FT_RFork_Rule_ { + FT_RFork_Rule_invalid = -2, + FT_RFork_Rule_uknown, /* -1 */ + FT_RFork_Rule_apple_double, + FT_RFork_Rule_apple_single, + FT_RFork_Rule_darwin_ufs_export, + FT_RFork_Rule_darwin_newvfs, + FT_RFork_Rule_darwin_hfsplus, + FT_RFork_Rule_vfat, + FT_RFork_Rule_linux_cap, + FT_RFork_Rule_linux_double, + FT_RFork_Rule_linux_netatalk + } FT_RFork_Rule; + + /* For fast translation between rule index and rule type, + * the macros FT_RFORK_xxx should be kept consistent with + * the raccess_guess_funcs table + */ + typedef struct raccess_guess_rec_ { + raccess_guess_func func; + FT_RFork_Rule type; + } raccess_guess_rec; + + static raccess_guess_rec raccess_guess_table[FT_RACCESS_N_RULES] = + { + { raccess_guess_apple_double, FT_RFork_Rule_apple_double, }, + { raccess_guess_apple_single, FT_RFork_Rule_apple_single, }, + { raccess_guess_darwin_ufs_export, FT_RFork_Rule_darwin_ufs_export, }, + { raccess_guess_darwin_newvfs, FT_RFork_Rule_darwin_newvfs, }, + { raccess_guess_darwin_hfsplus, FT_RFork_Rule_darwin_hfsplus, }, + { raccess_guess_vfat, FT_RFork_Rule_vfat, }, + { raccess_guess_linux_cap, FT_RFork_Rule_linux_cap, }, + { raccess_guess_linux_double, FT_RFork_Rule_linux_double, }, + { raccess_guess_linux_netatalk, FT_RFork_Rule_linux_netatalk, }, + }; + FT_BASE_DEF( void ) FT_Raccess_Guess( FT_Library library, FT_Stream stream, @@ -360,19 +396,6 @@ FT_Long i; - raccess_guess_func funcs[FT_RACCESS_N_RULES] = - { - raccess_guess_apple_double, - raccess_guess_apple_single, - raccess_guess_darwin_ufs_export, - raccess_guess_darwin_newvfs, - raccess_guess_darwin_hfsplus, - raccess_guess_vfat, - raccess_guess_linux_cap, - raccess_guess_linux_double, - raccess_guess_linux_netatalk, - }; - for ( i = 0; i < FT_RACCESS_N_RULES; i++ ) { new_names[i] = NULL; @@ -384,14 +407,41 @@ if ( errors[i] ) continue ; - errors[i] = (funcs[i])( library, stream, base_name, - &(new_names[i]), &(offsets[i]) ); + errors[i] = (raccess_guess_table[i].func)( library, + stream, base_name, + &(new_names[i]), + &(offsets[i]) ); } return; } + static FT_RFork_Rule + raccess_get_rule_type_from_rule_index( FT_UInt rule_index ) + { + if ( rule_index >= FT_RACCESS_N_RULES ) + return FT_RFork_Rule_invalid; + + return raccess_guess_table[rule_index].type; + } + + + FT_LOCAL_DEF( FT_Bool ) + raccess_rule_by_darwin_vfs( FT_UInt rule_index ) + { + switch( raccess_get_rule_type_from_rule_index( rule_index ) ) + { + case FT_RFork_Rule_darwin_newvfs: + case FT_RFork_Rule_darwin_hfsplus: + return TRUE; + + default: + return FALSE; + } + } + + static FT_Error raccess_guess_apple_double( FT_Library library, FT_Stream stream, Modified: haiku/trunk/src/libs/freetype2/base/ftsystem.c =================================================================== --- haiku/trunk/src/libs/freetype2/base/ftsystem.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/base/ftsystem.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -229,6 +229,13 @@ if ( !stream ) return FT_Err_Invalid_Stream_Handle; + stream->descriptor.pointer = NULL; + stream->pathname.pointer = (char*)filepathname; + stream->base = 0; + stream->pos = 0; + stream->read = NULL; + stream->close = NULL; + file = ft_fopen( filepathname, "rb" ); if ( !file ) { @@ -240,12 +247,16 @@ ft_fseek( file, 0, SEEK_END ); stream->size = ft_ftell( file ); + if ( !stream->size ) + { + FT_ERROR(( "FT_Stream_Open:" )); + FT_ERROR(( " opened `%s' but zero-sized\n", filepathname )); + ft_fclose( file ); + return FT_Err_Cannot_Open_Stream; + } ft_fseek( file, 0, SEEK_SET ); stream->descriptor.pointer = file; - stream->pathname.pointer = (char*)filepathname; - stream->pos = 0; - stream->read = ft_ansi_stream_io; stream->close = ft_ansi_stream_close; Modified: haiku/trunk/src/libs/freetype2/cache/ftcbasic.c =================================================================== --- haiku/trunk/src/libs/freetype2/cache/ftcbasic.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/cache/ftcbasic.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -318,7 +318,7 @@ FTC_BasicQueryRec query; FTC_Node node = 0; /* make compiler happy */ FT_Error error; - FT_UInt32 hash; + FT_PtrDist hash; /* some argument checks are delayed to FTC_Cache_Lookup */ @@ -414,7 +414,7 @@ FTC_BasicQueryRec query; FTC_Node node = 0; /* make compiler happy */ FT_Error error; - FT_UInt32 hash; + FT_PtrDist hash; /* some argument checks are delayed to FTC_Cache_Lookup */ @@ -656,7 +656,7 @@ FT_Error error; FTC_BasicQueryRec query; FTC_Node node = 0; /* make compiler happy */ - FT_UInt32 hash; + FT_PtrDist hash; if ( anode ) @@ -753,7 +753,7 @@ FT_Error error; FTC_BasicQueryRec query; FTC_Node node = 0; /* make compiler happy */ - FT_UInt32 hash; + FT_PtrDist hash; if ( anode ) Modified: haiku/trunk/src/libs/freetype2/cache/ftccache.c =================================================================== --- haiku/trunk/src/libs/freetype2/cache/ftccache.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/cache/ftccache.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -410,7 +410,7 @@ static void ftc_cache_add( FTC_Cache cache, - FT_UInt32 hash, + FT_PtrDist hash, FTC_Node node ) { node->hash = hash; @@ -438,7 +438,7 @@ FT_LOCAL_DEF( FT_Error ) FTC_Cache_NewNode( FTC_Cache cache, - FT_UInt32 hash, + FT_PtrDist hash, FT_Pointer query, FTC_Node *anode ) { @@ -477,7 +477,7 @@ FT_LOCAL_DEF( FT_Error ) FTC_Cache_Lookup( FTC_Cache cache, - FT_UInt32 hash, + FT_PtrDist hash, FT_Pointer query, FTC_Node *anode ) { Modified: haiku/trunk/src/libs/freetype2/cache/ftccache.h =================================================================== --- haiku/trunk/src/libs/freetype2/cache/ftccache.h 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/cache/ftccache.h 2011-02-16 17:55:28 UTC (rev 40534) @@ -24,6 +24,9 @@ FT_BEGIN_HEADER +#define _FTC_FACE_ID_HASH( i ) \ + ((FT_PtrDist)(( (FT_PtrDist)(i) >> 3 ) ^ ( (FT_PtrDist)(i) << 7 ))) + /* handle to cache object */ typedef struct FTC_CacheRec_* FTC_Cache; @@ -56,7 +59,7 @@ { FTC_MruNodeRec mru; /* circular mru list pointer */ FTC_Node link; /* used for hashing */ - FT_UInt32 hash; /* used for hashing too */ + FT_PtrDist hash; /* used for hashing too */ FT_UShort cache_index; /* index of cache the node belongs to */ FT_Short ref_count; /* reference count for this node */ @@ -168,14 +171,14 @@ #ifndef FTC_INLINE FT_LOCAL( FT_Error ) FTC_Cache_Lookup( FTC_Cache cache, - FT_UInt32 hash, + FT_PtrDist hash, FT_Pointer query, FTC_Node *anode ); #endif FT_LOCAL( FT_Error ) FTC_Cache_NewNode( FTC_Cache cache, - FT_UInt32 hash, + FT_PtrDist hash, FT_Pointer query, FTC_Node *anode ); @@ -200,7 +203,7 @@ FT_BEGIN_STMNT \ FTC_Node *_bucket, *_pnode, _node; \ FTC_Cache _cache = FTC_CACHE(cache); \ - FT_UInt32 _hash = (FT_UInt32)(hash); \ + FT_PtrDist _hash = (FT_PtrDist)(hash); \ FTC_Node_CompareFunc _nodcomp = (FTC_Node_CompareFunc)(nodecmp); \ FT_UFast _idx; \ \ Modified: haiku/trunk/src/libs/freetype2/cache/ftccmap.c =================================================================== --- haiku/trunk/src/libs/freetype2/cache/ftccmap.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/cache/ftccmap.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -87,7 +87,7 @@ /* compute a query/node hash */ #define FTC_CMAP_HASH( faceid, index, charcode ) \ - ( FTC_FACE_ID_HASH( faceid ) + 211 * (index) + \ + ( _FTC_FACE_ID_HASH( faceid ) + 211 * (index) + \ ( (charcode) / FTC_CMAP_INDICES_MAX ) ) /* the charmap query */ @@ -287,7 +287,7 @@ FTC_Node node; FT_Error error; FT_UInt gindex = 0; - FT_UInt32 hash; + FT_PtrDist hash; FT_Int no_cmap_change = 0; Modified: haiku/trunk/src/libs/freetype2/cache/ftcglyph.c =================================================================== --- haiku/trunk/src/libs/freetype2/cache/ftcglyph.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/cache/ftcglyph.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -175,7 +175,7 @@ FT_LOCAL_DEF( FT_Error ) FTC_GCache_Lookup( FTC_GCache cache, - FT_UInt32 hash, + FT_PtrDist hash, FT_UInt gindex, FTC_GQuery query, FTC_Node *anode ) Modified: haiku/trunk/src/libs/freetype2/cache/ftcglyph.h =================================================================== --- haiku/trunk/src/libs/freetype2/cache/ftcglyph.h 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/cache/ftcglyph.h 2011-02-16 17:55:28 UTC (rev 40534) @@ -254,7 +254,7 @@ #ifndef FTC_INLINE FT_LOCAL( FT_Error ) FTC_GCache_Lookup( FTC_GCache cache, - FT_UInt32 hash, + FT_PtrDist hash, FT_UInt gindex, FTC_GQuery query, FTC_Node *anode ); Modified: haiku/trunk/src/libs/freetype2/cache/ftcmanag.h =================================================================== --- haiku/trunk/src/libs/freetype2/cache/ftcmanag.h 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/cache/ftcmanag.h 2011-02-16 17:55:28 UTC (rev 40534) @@ -161,7 +161,7 @@ (a)->y_res == (b)->y_res ) ) ) #define FTC_SCALER_HASH( q ) \ - ( FTC_FACE_ID_HASH( (q)->face_id ) + \ + ( _FTC_FACE_ID_HASH( (q)->face_id ) + \ (q)->width + (q)->height*7 + \ ( (q)->pixel ? 0 : ( (q)->x_res*33 ^ (q)->y_res*61 ) ) ) Modified: haiku/trunk/src/libs/freetype2/psaux/t1decode.c =================================================================== --- haiku/trunk/src/libs/freetype2/psaux/t1decode.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/psaux/t1decode.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -373,15 +373,6 @@ #endif - /* we don't want to touch the source code -- use macro trick */ -#define start_point t1_builder_start_point -#define check_points t1_builder_check_points -#define add_point t1_builder_add_point -#define add_point1 t1_builder_add_point1 -#define add_contour t1_builder_add_contour -#define close_contour t1_builder_close_contour - - /* compute random seed from stack address of parameter */ seed = (FT_Fixed)( ( (FT_PtrDist)(char*)&seed ^ (FT_PtrDist)(char*)&decoder ^ @@ -739,8 +730,10 @@ decoder->flex_state = 1; decoder->num_flex_vectors = 0; - if ( start_point( builder, x, y ) || - check_points( builder, 6 ) ) + if ( ( error = t1_builder_start_point( builder, x, y ) ) + != PSaux_Err_Ok || + ( error = t1_builder_check_points( builder, 6 ) ) + != PSaux_Err_Ok ) goto Fail; break; @@ -757,10 +750,10 @@ /* point without adding any point to the outline */ idx = decoder->num_flex_vectors++; if ( idx > 0 && idx < 7 ) - add_point( builder, - x, - y, - (FT_Byte)( idx == 3 || idx == 6 ) ); + t1_builder_add_point( builder, + x, + y, + (FT_Byte)( idx == 3 || idx == 6 ) ); } break; @@ -1077,7 +1070,7 @@ case op_endchar: FT_TRACE4(( " endchar\n" )); - close_contour( builder ); + t1_builder_close_contour( builder ); /* close hints recording session */ if ( hinter ) @@ -1176,7 +1169,7 @@ /* if there is no path, `closepath' is a no-op */ if ( builder->parse_state == T1_Parse_Have_Path || builder->parse_state == T1_Parse_Have_Moveto ) - close_contour( builder ); + t1_builder_close_contour( builder ); builder->parse_state = T1_Parse_Have_Width; break; @@ -1184,7 +1177,8 @@ case op_hlineto: FT_TRACE4(( " hlineto" )); - if ( start_point( builder, x, y ) ) + if ( ( error = t1_builder_start_point( builder, x, y ) ) + != PSaux_Err_Ok ) goto Fail; x += top[0]; @@ -1205,30 +1199,34 @@ case op_hvcurveto: FT_TRACE4(( " hvcurveto" )); - if ( start_point( builder, x, y ) || - check_points( builder, 3 ) ) + if ( ( error = t1_builder_start_point( builder, x, y ) ) + != PSaux_Err_Ok || + ( error = t1_builder_check_points( builder, 3 ) ) + != PSaux_Err_Ok ) goto Fail; x += top[0]; - add_point( builder, x, y, 0 ); + t1_builder_add_point( builder, x, y, 0 ); x += top[1]; y += top[2]; - add_point( builder, x, y, 0 ); + t1_builder_add_point( builder, x, y, 0 ); y += top[3]; - add_point( builder, x, y, 1 ); + t1_builder_add_point( builder, x, y, 1 ); break; case op_rlineto: FT_TRACE4(( " rlineto" )); - if ( start_point( builder, x, y ) ) + if ( ( error = t1_builder_start_point( builder, x, y ) ) + != PSaux_Err_Ok ) goto Fail; x += top[0]; y += top[1]; Add_Line: - if ( add_point1( builder, x, y ) ) + if ( ( error = t1_builder_add_point1( builder, x, y ) ) + != PSaux_Err_Ok ) goto Fail; break; @@ -1248,43 +1246,48 @@ case op_rrcurveto: FT_TRACE4(( " rrcurveto" )); - if ( start_point( builder, x, y ) || - check_points( builder, 3 ) ) + if ( ( error = t1_builder_start_point( builder, x, y ) ) + != PSaux_Err_Ok || + ( error = t1_builder_check_points( builder, 3 ) ) + != PSaux_Err_Ok ) goto Fail; x += top[0]; y += top[1]; - add_point( builder, x, y, 0 ); + t1_builder_add_point( builder, x, y, 0 ); x += top[2]; y += top[3]; - add_point( builder, x, y, 0 ); + t1_builder_add_point( builder, x, y, 0 ); x += top[4]; y += top[5]; - add_point( builder, x, y, 1 ); + t1_builder_add_point( builder, x, y, 1 ); break; case op_vhcurveto: FT_TRACE4(( " vhcurveto" )); - if ( start_point( builder, x, y ) || - check_points( builder, 3 ) ) + if ( ( error = t1_builder_start_point( builder, x, y ) ) + != PSaux_Err_Ok || + ( error = t1_builder_check_points( builder, 3 ) ) + != PSaux_Err_Ok ) goto Fail; y += top[0]; - add_point( builder, x, y, 0 ); + t1_builder_add_point( builder, x, y, 0 ); x += top[1]; y += top[2]; - add_point( builder, x, y, 0 ); + t1_builder_add_point( builder, x, y, 0 ); x += top[3]; - add_point( builder, x, y, 1 ); + t1_builder_add_point( builder, x, y, 1 ); break; case op_vlineto: FT_TRACE4(( " vlineto" )); - if ( start_point( builder, x, y ) ) + if ( ( error = t1_builder_start_point( builder, x, y ) ) + != PSaux_Err_Ok ) goto Fail; y += top[0]; Modified: haiku/trunk/src/libs/freetype2/raster/ftraster.c =================================================================== --- haiku/trunk/src/libs/freetype2/raster/ftraster.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/raster/ftraster.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -302,7 +302,6 @@ typedef short Short; typedef unsigned short UShort, *PUShort; typedef long Long, *PLong; - typedef unsigned long ULong; typedef unsigned char Byte, *PByte; typedef char Bool; @@ -448,7 +447,6 @@ Int precision_bits; /* precision related variables */ Int precision; Int precision_half; - Long precision_mask; Int precision_shift; Int precision_step; Int precision_jitter; @@ -671,7 +669,6 @@ ras.precision = 1 << ras.precision_bits; ras.precision_half = ras.precision / 2; ras.precision_shift = ras.precision_bits - Pixel_Bits; - ras.precision_mask = -ras.precision; } @@ -725,13 +722,13 @@ if ( overshoot ) ras.cProfile->flags |= Overshoot_Bottom; - FT_TRACE6(( "New ascending profile = %lx\n", (long)ras.cProfile )); + FT_TRACE6(( "New ascending profile = %p\n", ras.cProfile )); break; case Descending_State: if ( overshoot ) ras.cProfile->flags |= Overshoot_Top; - FT_TRACE6(( "New descending profile = %lx\n", (long)ras.cProfile )); + FT_TRACE6(( "New descending profile = %p\n", ras.cProfile )); break; default: @@ -784,8 +781,8 @@ if ( h > 0 ) { - FT_TRACE6(( "Ending profile %lx, start = %ld, height = %ld\n", - (long)ras.cProfile, ras.cProfile->start, h )); + FT_TRACE6(( "Ending profile %p, start = %ld, height = %ld\n", + ras.cProfile, ras.cProfile->start, h )); ras.cProfile->height = h; if ( overshoot ) @@ -1094,7 +1091,7 @@ return SUCCESS; else { - x1 += FMulDiv( Dx, ras.precision - f1, Dy ); + x1 += SMulDiv( Dx, ras.precision - f1, Dy ); e1 += 1; } } @@ -1122,13 +1119,13 @@ if ( Dx > 0 ) { - Ix = SMulDiv( ras.precision, Dx, Dy); + Ix = SMulDiv( ras.precision, Dx, Dy); Rx = ( ras.precision * Dx ) % Dy; Dx = 1; } else { - Ix = SMulDiv( ras.precision, -Dx, Dy) * -1; + Ix = SMulDiv( ras.precision, -Dx, Dy) * -1; Rx = ( ras.precision * -Dx ) % Dy; Dx = -1; } Modified: haiku/trunk/src/libs/freetype2/sfnt/sfobjs.c =================================================================== --- haiku/trunk/src/libs/freetype2/sfnt/sfobjs.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/sfnt/sfobjs.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -691,9 +691,7 @@ LOAD_( os2 ); if ( error ) { - if ( error != SFNT_Err_Table_Missing ) - goto Exit; - + /* we treat the table as missing if there are any errors */ face->os2.version = 0xFFFFU; } } Modified: haiku/trunk/src/libs/freetype2/sfnt/ttload.c =================================================================== --- haiku/trunk/src/libs/freetype2/sfnt/ttload.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/sfnt/ttload.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -384,6 +384,10 @@ entry = face->dir_tables; + FT_TRACE2(( "\n" + " tag offset length checksum\n" + " ----------------------------------\n" )); + for ( nn = 0; nn < sfnt.num_tables; nn++ ) { entry->Tag = FT_GET_TAG4(); @@ -396,13 +400,14 @@ continue; else { - FT_TRACE2(( " %c%c%c%c - %08lx - %08lx\n", + FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx\n", (FT_Char)( entry->Tag >> 24 ), (FT_Char)( entry->Tag >> 16 ), (FT_Char)( entry->Tag >> 8 ), (FT_Char)( entry->Tag ), entry->Offset, - entry->Length )); + entry->Length, + entry->CheckSum )); entry++; } } Modified: haiku/trunk/src/libs/freetype2/sfnt/ttpost.c =================================================================== --- haiku/trunk/src/libs/freetype2/sfnt/ttpost.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/sfnt/ttpost.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -26,6 +26,7 @@ #include <ft2build.h> +#include FT_INTERNAL_DEBUG_H #include FT_INTERNAL_STREAM_H #include FT_TRUETYPE_TAGS_H #include "ttpost.h" Modified: haiku/trunk/src/libs/freetype2/smooth/ftgrays.c =================================================================== --- haiku/trunk/src/libs/freetype2/smooth/ftgrays.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/smooth/ftgrays.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -91,11 +91,6 @@ #define FT_COMPONENT trace_smooth - /* The maximum distance of a curve from the chord, in 64ths of a pixel; */ - /* used when flattening curves. */ -#define FT_MAX_CURVE_DEVIATION 16 - - #ifdef _STANDALONE_ @@ -882,41 +877,36 @@ FT_Vector* arc; - dx = DOWNSCALE( ras.x ) + to->x - ( control->x << 1 ); - if ( dx < 0 ) - dx = -dx; - dy = DOWNSCALE( ras.y ) + to->y - ( control->y << 1 ); - if ( dy < 0 ) - dy = -dy; + arc = ras.bez_stack; + arc[0].x = UPSCALE( to->x ); + arc[0].y = UPSCALE( to->y ); + arc[1].x = UPSCALE( control->x ); + arc[1].y = UPSCALE( control->y ); + arc[2].x = ras.x; + arc[2].y = ras.y; + + dx = FT_ABS( arc[2].x + arc[0].x - 2 * arc[1].x ); + dy = FT_ABS( arc[2].y + arc[0].y - 2 * arc[1].y ); if ( dx < dy ) dx = dy; - if ( dx <= FT_MAX_CURVE_DEVIATION ) + if ( dx <= ONE_PIXEL / 4 ) { - gray_render_line( RAS_VAR_ UPSCALE( to->x ), UPSCALE( to->y ) ); + gray_render_line( RAS_VAR_ arc[0].x, arc[0].y ); return; } - level = 1; - dx /= FT_MAX_CURVE_DEVIATION; - while ( dx > 1 ) + level = 0; + while ( dx > ONE_PIXEL / 4 ) { dx >>= 2; level++; } - arc = ras.bez_stack; levels = ras.lev_stack; - top = 0; levels[0] = level; + top = 0; - arc[0].x = UPSCALE( to->x ); - arc[0].y = UPSCALE( to->y ); - arc[1].x = UPSCALE( control->x ); - arc[1].y = UPSCALE( control->y ); - arc[2].x = ras.x; - arc[2].y = ras.y; - while ( top >= 0 ) { level = levels[top]; @@ -1067,14 +1057,20 @@ dx_ = FT_ABS( dx ); dy_ = FT_ABS( dy ); - L = ( 236 * FT_MAX( dx_, dy_ ) + 97 * FT_MIN( dx_, dy_ ) ) >> 8; + /* This is the same as */ + /* */ + /* L = ( 236 * FT_MAX( dx_, dy_ ) */ + /* + 97 * FT_MIN( dx_, dy_ ) ) >> 8; */ + L = ( dx_ > dy_ ? 236 * dx_ + 97 * dy_ + : 97 * dx_ + 236 * dy_ ) >> 8; + /* Avoid possible arithmetic overflow below by splitting. */ if ( L > 32767 ) goto Split; /* Max deviation may be as much as (s/L) * 3/4 (if Hain's v = 1). */ - s_limit = L * (TPos)( FT_MAX_CURVE_DEVIATION / 0.75 ); + s_limit = L * (TPos)( ONE_PIXEL / 6 ); /* s is L * the perpendicular distance from P1 to the line P0-P3. */ dx1 = arc[1].x - arc[0].x; Modified: haiku/trunk/src/libs/freetype2/truetype/ttgxvar.c =================================================================== --- haiku/trunk/src/libs/freetype2/truetype/ttgxvar.c 2011-02-16 17:42:23 UTC (rev 40533) +++ haiku/trunk/src/libs/freetype2/truetype/ttgxvar.c 2011-02-16 17:55:28 UTC (rev 40534) @@ -130,7 +130,7 @@ FT_Int j; FT_Int first; FT_Memory memory = stream->memory; - FT_Error error = TT_Err_Ok; + FT_Error error = TT_Err_Ok; FT_UNUSED( error ); @@ -154,7 +154,7 @@ runcnt = runcnt & GX_PT_POINT_RUN_COUNT_MASK; first = points[i++] = FT_GET_USHORT(); - if ( runcnt < 1 ) + if ( runcnt < 1 || i + runcnt >= n ) goto Exit; /* first point not included in runcount */ @@ -165,7 +165,7 @@ { first = points[i++] = FT_GET_BYTE(); - if ( runcnt < 1 ) + if ( runcnt < 1 || i + runcnt >= n ) goto Exit; for ( j = 0; j < runcnt; ++j ) Modified: haiku/trunk/src/libs/freetype2/truetype/ttinterp.c [... truncated: 368 lines follow ...]