Ignore:
Timestamp:
Jan 18, 2007, 5:32:59 PM (15 years ago)
Author:
Eugene Romanenko
Message:

freetype update to version 2.3.0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/poppler/freetype2/src/raster/ftraster.c

    r150 r182  
    55/*    The FreeType glyph rasterizer (body).                                */
    66/*                                                                         */
    7 /*  Copyright 1996-2001, 2002, 2003, 2005 by                               */
     7/*  Copyright 1996-2001, 2002, 2003, 2005, 2007 by                         */
    88/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
    99/*                                                                         */
     
    379379
    380380
    381 #define RAS_ARGS       TRaster_Instance*  raster,
    382 #define RAS_ARG        TRaster_Instance*  raster
    383 
    384 #define RAS_VARS       raster,
    385 #define RAS_VAR        raster
    386 
    387 #define FT_UNUSED_RASTER  FT_UNUSED( raster )
     381#define RAS_ARGS       PWorker    worker,
     382#define RAS_ARG        PWorker    worker
     383
     384#define RAS_VARS       worker,
     385#define RAS_VAR        worker
     386
     387#define FT_UNUSED_RASTER  FT_UNUSED( worker )
    388388
    389389
     
    391391
    392392
    393   typedef struct TRaster_Instance_  TRaster_Instance;
     393  typedef struct TWorker_   TWorker, *PWorker;
    394394
    395395
     
    423423  /* opcodes, and it results in a smaller executable.          */
    424424
    425   struct  TRaster_Instance_
     425  struct  TWorker_
    426426  {
    427427    Int       precision_bits;       /* precision related variables         */
     
    499499    Int       band_top;             /* band stack top                      */
    500500
    501     Int       count_table[256];     /* Look-up table used to quickly count */
    502                                     /* set bits in a gray 2x2 cell         */
    503 
    504     void*     memory;
    505 
    506501#ifdef FT_RASTER_OPTION_ANTI_ALIASING
    507502
    508     Byte      grays[5];             /* Palette of gray levels used for     */
    509                                     /* render.                             */
     503    Byte*     grays;
    510504
    511505    Byte      gray_lines[RASTER_GRAY_LINES];
     
    524518#endif /* FT_RASTER_ANTI_ALIASING */
    525519
    526 #if 0
    527     PByte       flags;              /* current flags table                 */
    528     PUShort     outs;               /* current outlines table              */
    529     FT_Vector*  coords;
    530 
    531     UShort      nPoints;            /* number of points in current glyph   */
    532     Short       nContours;          /* number of contours in current glyph */
    533 #endif
    534 
    535520  };
    536521
    537522
     523  typedef struct TRaster_
     524  {
     525    char*     buffer;
     526    long      buffer_size;
     527    void*     memory;
     528    PWorker   worker;
     529    Byte      grays[5];
     530    Short     gray_width;
     531
     532  } TRaster, *PRaster;
     533
    538534#ifdef FT_STATIC_RASTER
    539535
    540   static TRaster_Instance  cur_ras;
     536  static TWorker   cur_ras;
    541537#define ras  cur_ras
    542538
    543539#else
    544540
    545 #define ras  (*raster)
     541#define ras  (*worker)
    546542
    547543#endif /* FT_STATIC_RASTER */
     544
     545
     546static const char  count_table[256] =
     547{
     548  0 , 1 , 1 , 2 , 1 , 2 , 2 , 3 , 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4,
     549  1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5,
     550  1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5,
     551  2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6,
     552  1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5,
     553  2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6,
     554  2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6,
     555  3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 4 , 5 , 5 , 6 , 5 , 6 , 6 , 7,
     556  1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5,
     557  2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6,
     558  2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6,
     559  3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 4 , 5 , 5 , 6 , 5 , 6 , 6 , 7,
     560  2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6,
     561  3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 4 , 5 , 5 , 6 , 5 , 6 , 6 , 7,
     562  3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 4 , 5 , 5 , 6 , 5 , 6 , 6 , 7,
     563  4 , 5 , 5 , 6 , 5 , 6 , 6 , 7 , 5 , 6 , 6 , 7 , 6 , 7 , 7 , 8 };
     564
    548565
    549566
     
    24952512    Int    c1, c2;
    24962513    PByte  pix, bit, bit2;
    2497     Int*   count = ras.count_table;
     2514    char*  count = (char*)count_table;
    24982515    Byte*  grays;
    24992516
     
    31543171
    31553172  static void
    3156   ft_black_init( TRaster_Instance*  raster )
    3157   {
     3173  ft_black_init( PRaster  raster )
     3174  {
     3175    FT_UNUSED( raster );
     3176
     3177#ifdef FT_RASTER_OPTION_ANTI_ALIASING
    31583178    FT_UInt  n;
    3159     FT_ULong c;
    3160 
    3161 
    3162     /* setup count table */
    3163     for ( n = 0; n < 256; n++ )
    3164     {
    3165       c = ( n & 0x55 ) + ( ( n & 0xAA ) >> 1 );
    3166 
    3167       c = ( ( c << 6 ) & 0x3000 ) |
    3168           ( ( c << 4 ) & 0x0300 ) |
    3169           ( ( c << 2 ) & 0x0030 ) |
    3170                    (c  & 0x0003 );
    3171 
    3172       ras.count_table[n] = (UInt)c;
    3173     }
    3174 
    3175 #ifdef FT_RASTER_OPTION_ANTI_ALIASING
     3179
    31763180
    31773181    /* set default 5-levels gray palette */
     
    31793183      raster->grays[n] = n * 255 / 4;
    31803184
    3181     ras.gray_width = RASTER_GRAY_LINES / 2;
     3185    raster->gray_width = RASTER_GRAY_LINES / 2;
    31823186
    31833187#endif
     
    31963200                FT_Raster  *araster )
    31973201  {
    3198      static TRaster_Instance  the_raster;
     3202     static TRaster  the_raster;
    31993203
    32003204
     
    32193223
    32203224  static int
    3221   ft_black_new( FT_Memory           memory,
    3222                 TRaster_Instance**  araster )
    3223   {
    3224     FT_Error           error;
    3225     TRaster_Instance*  raster;
     3225  ft_black_new( FT_Memory   memory,
     3226                PRaster    *araster )
     3227  {
     3228    FT_Error  error;
     3229    PRaster   raster;
    32263230
    32273231
     
    32403244
    32413245  static void
    3242   ft_black_done( TRaster_Instance*  raster )
     3246  ft_black_done( PRaster  raster )
    32433247  {
    32443248    FT_Memory  memory = (FT_Memory)raster->memory;
     
    32513255
    32523256  static void
    3253   ft_black_reset( TRaster_Instance*  raster,
    3254                   char*              pool_base,
    3255                   long               pool_size )
    3256   {
    3257     if ( (&ras) && pool_base && pool_size >= 4096 )
    3258     {
    3259       /* save the pool */
    3260       ras.buff     = (PLong)pool_base;
    3261       ras.sizeBuff = ras.buff + pool_size / sizeof ( Long );
     3257  ft_black_reset( PRaster   raster,
     3258                  char*     pool_base,
     3259                  long      pool_size )
     3260  {
     3261    if ( raster )
     3262    {
     3263      if ( pool_base && pool_size >= (long)sizeof(TWorker) + 2048 )
     3264      {
     3265        PWorker  worker = (PWorker)pool_base;
     3266
     3267
     3268        raster->buffer      = pool_base + ( (sizeof ( *worker ) + 7 ) & ~7 );
     3269        raster->buffer_size = ( ( pool_base + pool_size ) -
     3270                                (char*)raster->buffer ) / sizeof ( Long );
     3271        raster->worker      = worker;
     3272      }
     3273      else
     3274      {
     3275        raster->buffer      = NULL;
     3276        raster->buffer_size = 0;
     3277        raster->worker      = NULL;
     3278      }
    32623279    }
    32633280  }
     
    32653282
    32663283  static void
    3267   ft_black_set_mode( TRaster_Instance*  raster,
     3284  ft_black_set_mode( PRaster            raster,
    32683285                     unsigned long      mode,
    32693286                     const char*        palette )
     
    32743291    {
    32753292      /* set 5-levels gray palette */
    3276       ras.grays[0] = palette[0];
    3277       ras.grays[1] = palette[1];
    3278       ras.grays[2] = palette[2];
    3279       ras.grays[3] = palette[3];
    3280       ras.grays[4] = palette[4];
     3293      raster->grays[0] = palette[0];
     3294      raster->grays[1] = palette[1];
     3295      raster->grays[2] = palette[2];
     3296      raster->grays[3] = palette[3];
     3297      raster->grays[4] = palette[4];
    32813298    }
    32823299
     
    32923309
    32933310  static int
    3294   ft_black_render( TRaster_Instance*        raster,
     3311  ft_black_render( PRaster                  raster,
    32953312                   const FT_Raster_Params*  params )
    32963313  {
    32973314    const FT_Outline*  outline    = (const FT_Outline*)params->source;
    32983315    const FT_Bitmap*   target_map = params->target;
    3299 
    3300 
    3301     if ( !(&ras) || !ras.buff || !ras.sizeBuff )
     3316    PWorker            worker;
     3317
     3318
     3319    if ( !raster || !raster->buffer || !raster->buffer_size )
    33023320      return Raster_Err_Not_Ini;
    33033321
     
    33123330      return Raster_Err_Invalid;
    33133331
     3332    worker = raster->worker;
     3333
    33143334    /* this version of the raster does not support direct rendering, sorry */
    33153335    if ( params->flags & FT_RASTER_FLAG_DIRECT )
     
    33213341    ras.outline  = *outline;
    33223342    ras.target   = *target_map;
     3343
     3344    worker->buff        = (PLong) raster->buffer;
     3345    worker->sizeBuff    = worker->buff +
     3346                            raster->buffer_size / sizeof ( Long );
     3347#ifdef FT_RASTER_OPTION_ANTI_ALIASING
     3348    worker->grays       = raster->grays;
     3349    worker->gray_width  = raster->gray_width;
     3350#endif
    33233351
    33243352    return ( ( params->flags & FT_RASTER_FLAG_AA )
Note: See TracChangeset for help on using the changeset viewer.