Ignore:
Timestamp:
Apr 12, 2009, 10:25:05 AM (13 years ago)
Author:
Eugene Romanenko
Message:

PDF plugin: freetype library updated to version 2.3.9

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/poppler/freetype2/src/sfnt/sfobjs.c

    r262 r269  
    409409      face->ttc_header.count   = 1;
    410410
    411       if ( FT_NEW( face->ttc_header.offsets) )
     411      if ( FT_NEW( face->ttc_header.offsets ) )
    412412        return error;
    413413
     
    863863      }
    864864
     865#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
     866
     867      /*
     868       *  Now allocate the root array of FT_Bitmap_Size records and
     869       *  populate them.  Unfortunately, it isn't possible to indicate bit
     870       *  depths in the FT_Bitmap_Size record.  This is a design error.
     871       */
     872      {
     873        FT_UInt  i, count;
     874
     875
     876#ifndef FT_CONFIG_OPTION_OLD_INTERNALS
     877        count = face->sbit_num_strikes;
     878#else
     879        count = (FT_UInt)face->num_sbit_strikes;
     880#endif
     881
     882        if ( count > 0 )
     883        {
     884          FT_Memory        memory   = face->root.stream->memory;
     885          FT_UShort        em_size  = face->header.Units_Per_EM;
     886          FT_Short         avgwidth = face->os2.xAvgCharWidth;
     887          FT_Size_Metrics  metrics;
     888
     889
     890          if ( em_size == 0 || face->os2.version == 0xFFFFU )
     891          {
     892            avgwidth = 0;
     893            em_size = 1;
     894          }
     895
     896          if ( FT_NEW_ARRAY( root->available_sizes, count ) )
     897            goto Exit;
     898
     899          for ( i = 0; i < count; i++ )
     900          {
     901            FT_Bitmap_Size*  bsize = root->available_sizes + i;
     902
     903
     904            error = sfnt->load_strike_metrics( face, i, &metrics );
     905            if ( error )
     906              goto Exit;
     907
     908            bsize->height = (FT_Short)( metrics.height >> 6 );
     909            bsize->width = (FT_Short)(
     910                ( avgwidth * metrics.x_ppem + em_size / 2 ) / em_size );
     911
     912            bsize->x_ppem = metrics.x_ppem << 6;
     913            bsize->y_ppem = metrics.y_ppem << 6;
     914
     915            /* assume 72dpi */
     916            bsize->size   = metrics.y_ppem << 6;
     917          }
     918
     919          root->face_flags     |= FT_FACE_FLAG_FIXED_SIZES;
     920          root->num_fixed_sizes = (FT_Int)count;
     921        }
     922      }
     923
     924#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
     925
     926      /* a font with no bitmaps and no outlines is scalable; */
     927      /* it has only empty glyphs then                       */
     928      if ( !FT_HAS_FIXED_SIZES( root ) && !FT_IS_SCALABLE( root ) )
     929        root->face_flags |= FT_FACE_FLAG_SCALABLE;
     930
    865931
    866932      /*********************************************************************/
     
    868934      /*  Set up metrics.                                                  */
    869935      /*                                                                   */
    870       if ( has_outline == TRUE )
     936      if ( FT_IS_SCALABLE( root ) )
    871937      {
    872938        /* XXX What about if outline header is missing */
     
    9531019      }
    9541020
    955 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
    956 
    957       /*
    958        *  Now allocate the root array of FT_Bitmap_Size records and
    959        *  populate them.  Unfortunately, it isn't possible to indicate bit
    960        *  depths in the FT_Bitmap_Size record.  This is a design error.
    961        */
    962       {
    963         FT_UInt  i, count;
    964 
    965 
    966 #ifndef FT_CONFIG_OPTION_OLD_INTERNALS
    967         count = face->sbit_num_strikes;
    968 #else
    969         count = (FT_UInt)face->num_sbit_strikes;
    970 #endif
    971 
    972         if ( count > 0 )
    973         {
    974           FT_Memory        memory   = face->root.stream->memory;
    975           FT_UShort        em_size  = face->header.Units_Per_EM;
    976           FT_Short         avgwidth = face->os2.xAvgCharWidth;
    977           FT_Size_Metrics  metrics;
    978 
    979 
    980           if ( em_size == 0 || face->os2.version == 0xFFFFU )
    981           {
    982             avgwidth = 0;
    983             em_size = 1;
    984           }
    985 
    986           if ( FT_NEW_ARRAY( root->available_sizes, count ) )
    987             goto Exit;
    988 
    989           for ( i = 0; i < count; i++ )
    990           {
    991             FT_Bitmap_Size*  bsize = root->available_sizes + i;
    992 
    993 
    994             error = sfnt->load_strike_metrics( face, i, &metrics );
    995             if ( error )
    996               goto Exit;
    997 
    998             bsize->height = (FT_Short)( metrics.height >> 6 );
    999             bsize->width = (FT_Short)(
    1000                 ( avgwidth * metrics.x_ppem + em_size / 2 ) / em_size );
    1001 
    1002             bsize->x_ppem = metrics.x_ppem << 6;
    1003             bsize->y_ppem = metrics.y_ppem << 6;
    1004 
    1005             /* assume 72dpi */
    1006             bsize->size   = metrics.y_ppem << 6;
    1007           }
    1008 
    1009           root->face_flags     |= FT_FACE_FLAG_FIXED_SIZES;
    1010           root->num_fixed_sizes = (FT_Int)count;
    1011         }
    1012       }
    1013 
    1014 #endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
    1015 
    1016       /* a font with no bitmaps and no outlines is scalable; */
    1017       /* it has only empty glyphs then                       */
    1018       if ( !FT_HAS_FIXED_SIZES( root ) && !FT_IS_SCALABLE( root ) )
    1019         root->face_flags |= FT_FACE_FLAG_SCALABLE;
    10201021    }
    10211022
Note: See TracChangeset for help on using the changeset viewer.