[haiku-commits] r40534 - in haiku/trunk: headers/libs/freetype2 headers/libs/freetype2/freetype src/libs/freetype2 src/libs/freetype2/base src/libs/freetype2/cache ...

  • From: korli@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 16 Feb 2011 18:55:28 +0100 (CET)

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 ...]

Other related posts:

  • » [haiku-commits] r40534 - in haiku/trunk: headers/libs/freetype2 headers/libs/freetype2/freetype src/libs/freetype2 src/libs/freetype2/base src/libs/freetype2/cache ... - korli