亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bdfdrivr.c

?? 智能設備中PDF閱讀器的源碼!用于windows mobile2003或者WM5以上
?? C
?? 第 1 頁 / 共 2 頁
字號:
        else
          bsize->width = (FT_Short)( bsize->height * 2/3 );

        prop = bdf_get_font_property( font, "POINT_SIZE" );
        if ( prop )
          /* convert from 722.7 decipoints to 72 points per inch */
          bsize->size =
            (FT_Pos)( ( prop->value.int32 * 64 * 7200 + 36135L ) / 72270L );

        prop = bdf_get_font_property( font, "PIXEL_SIZE" );
        if ( prop )
          bsize->y_ppem = (FT_Short)prop->value.int32 << 6;

        prop = bdf_get_font_property( font, "RESOLUTION_X" );
        if ( prop )
          resolution_x = (FT_Short)prop->value.int32;

        prop = bdf_get_font_property( font, "RESOLUTION_Y" );
        if ( prop )
          resolution_y = (FT_Short)prop->value.int32;

        if ( bsize->y_ppem == 0 )
        {
          bsize->y_ppem = bsize->size;
          if ( resolution_y )
            bsize->y_ppem = bsize->y_ppem * resolution_y / 72;
        }
        if ( resolution_x && resolution_y )
          bsize->x_ppem = bsize->y_ppem * resolution_x / resolution_y;
        else
          bsize->x_ppem = bsize->y_ppem;
      }

      /* encoding table */
      {
        bdf_glyph_t*   cur = font->glyphs;
        unsigned long  n;


        if ( FT_NEW_ARRAY( face->en_table, font->glyphs_size ) )
          goto Exit;

        face->default_glyph = 0;
        for ( n = 0; n < font->glyphs_size; n++ )
        {
          (face->en_table[n]).enc = cur[n].encoding;
          FT_TRACE4(( "idx %d, val 0x%lX\n", n, cur[n].encoding ));
          (face->en_table[n]).glyph = (FT_Short)n;

          if ( cur[n].encoding == font->default_char )
            face->default_glyph = n;
        }
      }

      /* charmaps */
      {
        bdf_property_t  *charset_registry = 0, *charset_encoding = 0;
        FT_Bool          unicode_charmap  = 0;


        charset_registry =
          bdf_get_font_property( font, "CHARSET_REGISTRY" );
        charset_encoding =
          bdf_get_font_property( font, "CHARSET_ENCODING" );
        if ( charset_registry && charset_encoding )
        {
          if ( charset_registry->format == BDF_ATOM &&
               charset_encoding->format == BDF_ATOM &&
               charset_registry->value.atom         &&
               charset_encoding->value.atom         )
          {
            const char*  s;


            if ( FT_NEW_ARRAY( face->charset_encoding,
                               ft_strlen( charset_encoding->value.atom ) + 1 ) )
              goto Exit;
            if ( FT_NEW_ARRAY( face->charset_registry,
                               ft_strlen( charset_registry->value.atom ) + 1 ) )
              goto Exit;

            ft_strcpy( face->charset_registry, charset_registry->value.atom );
            ft_strcpy( face->charset_encoding, charset_encoding->value.atom );

            /* Uh, oh, compare first letters manually to avoid dependency
               on locales. */
            s = face->charset_registry;
            if ( ( s[0] == 'i' || s[0] == 'I' ) &&
                 ( s[1] == 's' || s[1] == 'S' ) &&
                 ( s[2] == 'o' || s[2] == 'O' ) )
            {
              s += 3;
              if ( !ft_strcmp( s, "10646" )                      ||
                   ( !ft_strcmp( s, "8859" ) &&
                     !ft_strcmp( face->charset_encoding, "1" ) ) )
              unicode_charmap = 1;
            }

            {
              FT_CharMapRec  charmap;


              charmap.face        = FT_FACE( face );
              charmap.encoding    = FT_ENCODING_NONE;
              charmap.platform_id = 0;
              charmap.encoding_id = 0;

              if ( unicode_charmap )
              {
                charmap.encoding    = FT_ENCODING_UNICODE;
                charmap.platform_id = 3;
                charmap.encoding_id = 1;
              }

              error = FT_CMap_New( &bdf_cmap_class, NULL, &charmap, NULL );

#if 0
              /* Select default charmap */
              if ( bdfface->num_charmaps )
                bdfface->charmap = bdfface->charmaps[0];
#endif
            }

            goto Exit;
          }
        }

        /* otherwise assume Adobe standard encoding */

        {
          FT_CharMapRec  charmap;


          charmap.face        = FT_FACE( face );
          charmap.encoding    = FT_ENCODING_ADOBE_STANDARD;
          charmap.platform_id = 7;
          charmap.encoding_id = 0;

          error = FT_CMap_New( &bdf_cmap_class, NULL, &charmap, NULL );

          /* Select default charmap */
          if ( bdfface->num_charmaps )
            bdfface->charmap = bdfface->charmaps[0];
        }
      }
    }

  Exit:
    return error;

  Fail:
    BDF_Face_Done( bdfface );
    return BDF_Err_Unknown_File_Format;
  }


  FT_CALLBACK_DEF( FT_Error )
  BDF_Size_Select( FT_Size   size,
                   FT_ULong  strike_index )
  {
    bdf_font_t*  bdffont = ( (BDF_Face)size->face )->bdffont;


    FT_Select_Metrics( size->face, strike_index );

    size->metrics.ascender    = bdffont->font_ascent << 6;
    size->metrics.descender   = -bdffont->font_descent << 6;
    size->metrics.max_advance = bdffont->bbx.width << 6;

    return BDF_Err_Ok;
  }


  FT_CALLBACK_DEF( FT_Error )
  BDF_Size_Request( FT_Size          size,
                    FT_Size_Request  req )
  {
    FT_Face          face    = size->face;
    FT_Bitmap_Size*  bsize   = face->available_sizes;
    bdf_font_t*      bdffont = ( (BDF_Face)face )->bdffont;
    FT_Error         error   = BDF_Err_Invalid_Pixel_Size;
    FT_Long          height;


    height = FT_REQUEST_HEIGHT( req );
    height = ( height + 32 ) >> 6;

    switch ( req->type )
    {
    case FT_SIZE_REQUEST_TYPE_NOMINAL:
      if ( height == ( bsize->y_ppem + 32 ) >> 6 )
        error = BDF_Err_Ok;
      break;

    case FT_SIZE_REQUEST_TYPE_REAL_DIM:
      if ( height == ( bdffont->font_ascent +
                       bdffont->font_descent ) )
        error = BDF_Err_Ok;
      break;

    default:
      error = BDF_Err_Unimplemented_Feature;
      break;
    }

    if ( error )
      return error;
    else
      return BDF_Size_Select( size, 0 );
  }



  FT_CALLBACK_DEF( FT_Error )
  BDF_Glyph_Load( FT_GlyphSlot  slot,
                  FT_Size       size,
                  FT_UInt       glyph_index,
                  FT_Int32      load_flags )
  {
    BDF_Face     face   = (BDF_Face)FT_SIZE_FACE( size );
    FT_Error     error  = BDF_Err_Ok;
    FT_Bitmap*   bitmap = &slot->bitmap;
    bdf_glyph_t  glyph;
    int          bpp    = face->bdffont->bpp;

    FT_UNUSED( load_flags );


    if ( !face )
    {
      error = BDF_Err_Invalid_Argument;
      goto Exit;
    }

    /* index 0 is the undefined glyph */
    if ( glyph_index == 0 )
      glyph_index = face->default_glyph;
    else
      glyph_index--;

    /* slot, bitmap => freetype, glyph => bdflib */
    glyph = face->bdffont->glyphs[glyph_index];

    bitmap->rows  = glyph.bbx.height;
    bitmap->width = glyph.bbx.width;
    bitmap->pitch = glyph.bpr;

    /* note: we don't allocate a new array to hold the bitmap; */
    /*       we can simply point to it                         */
    ft_glyphslot_set_bitmap( slot, glyph.bitmap );

    switch ( bpp )
    {
    case 1:
      bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
      break;
    case 2:
      bitmap->pixel_mode = FT_PIXEL_MODE_GRAY2;
      break;
    case 4:
      bitmap->pixel_mode = FT_PIXEL_MODE_GRAY4;
      break;
    case 8:
      bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
      bitmap->num_grays  = 256;
      break;
    }

    slot->format      = FT_GLYPH_FORMAT_BITMAP;
    slot->bitmap_left = glyph.bbx.x_offset;
    slot->bitmap_top  = glyph.bbx.ascent;

    slot->metrics.horiAdvance  = glyph.dwidth << 6;
    slot->metrics.horiBearingX = glyph.bbx.x_offset << 6;
    slot->metrics.horiBearingY = glyph.bbx.ascent << 6;
    slot->metrics.width        = bitmap->width << 6;
    slot->metrics.height       = bitmap->rows << 6;

    /*
     * XXX DWIDTH1 and VVECTOR should be parsed and
     * used here, provided such fonts do exist.
     */
    ft_synthesize_vertical_metrics( &slot->metrics,
                                    face->bdffont->bbx.height << 6 );

  Exit:
    return error;
  }


 /*
  *
  *  BDF SERVICE
  *
  */

  static FT_Error
  bdf_get_bdf_property( BDF_Face          face,
                        const char*       prop_name,
                        BDF_PropertyRec  *aproperty )
  {
    bdf_property_t*  prop;


    FT_ASSERT( face && face->bdffont );

    prop = bdf_get_font_property( face->bdffont, prop_name );
    if ( prop )
    {
      switch ( prop->format )
      {
      case BDF_ATOM:
        aproperty->type   = BDF_PROPERTY_TYPE_ATOM;
        aproperty->u.atom = prop->value.atom;
        break;

      case BDF_INTEGER:
        aproperty->type      = BDF_PROPERTY_TYPE_INTEGER;
        aproperty->u.integer = prop->value.int32;
        break;

      case BDF_CARDINAL:
        aproperty->type       = BDF_PROPERTY_TYPE_CARDINAL;
        aproperty->u.cardinal = prop->value.card32;
        break;

      default:
        goto Fail;
      }
      return 0;
    }

  Fail:
    return BDF_Err_Invalid_Argument;
  }


  static FT_Error
  bdf_get_charset_id( BDF_Face      face,
                      const char*  *acharset_encoding,
                      const char*  *acharset_registry )
  {
    *acharset_encoding = face->charset_encoding;
    *acharset_registry = face->charset_registry;

    return 0;
  }


  static const FT_Service_BDFRec  bdf_service_bdf =
  {
    (FT_BDF_GetCharsetIdFunc)bdf_get_charset_id,
    (FT_BDF_GetPropertyFunc) bdf_get_bdf_property
  };


 /*
  *
  *  SERVICES LIST
  *
  */

  static const FT_ServiceDescRec  bdf_services[] =
  {
    { FT_SERVICE_ID_BDF,       &bdf_service_bdf },
    { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_BDF },
    { NULL, NULL }
  };


  FT_CALLBACK_DEF( FT_Module_Interface )
  bdf_driver_requester( FT_Module    module,
                        const char*  name )
  {
    FT_UNUSED( module );

    return ft_service_list_lookup( bdf_services, name );
  }



  FT_CALLBACK_TABLE_DEF
  const FT_Driver_ClassRec  bdf_driver_class =
  {
    {
      FT_MODULE_FONT_DRIVER         |
      FT_MODULE_DRIVER_NO_OUTLINES,
      sizeof ( FT_DriverRec ),

      "bdf",
      0x10000L,
      0x20000L,

      0,

      (FT_Module_Constructor)0,
      (FT_Module_Destructor) 0,
      (FT_Module_Requester)  bdf_driver_requester
    },

    sizeof ( BDF_FaceRec ),
    sizeof ( FT_SizeRec ),
    sizeof ( FT_GlyphSlotRec ),

    BDF_Face_Init,
    BDF_Face_Done,
    0,                          /* FT_Size_InitFunc */
    0,                          /* FT_Size_DoneFunc */
    0,                          /* FT_Slot_InitFunc */
    0,                          /* FT_Slot_DoneFunc */

#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
    ft_stub_set_char_sizes,
    ft_stub_set_pixel_sizes,
#endif
    BDF_Glyph_Load,

    0,                          /* FT_Face_GetKerningFunc   */
    0,                          /* FT_Face_AttachFunc       */
    0,                          /* FT_Face_GetAdvancesFunc  */

    BDF_Size_Request,
    BDF_Size_Select
  };


/* END */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线视频综合导航| 一区二区免费看| 天天综合日日夜夜精品| 成人小视频在线观看| 欧美成人一区二区三区| 日本免费在线视频不卡一不卡二| 奇米影视在线99精品| 欧美日韩一区中文字幕| 亚洲国产精品视频| 欧美羞羞免费网站| 亚洲成人黄色影院| 欧美日韩中文另类| 首页亚洲欧美制服丝腿| 欧美精品自拍偷拍| 日韩成人av影视| 欧洲国内综合视频| 亚洲大尺度视频在线观看| 欧美综合视频在线观看| 国产精品久久久久久久裸模| 97se亚洲国产综合在线| 亚洲同性gay激情无套| k8久久久一区二区三区| 亚洲另类中文字| 欧美影院一区二区三区| 亚洲国产精品一区二区久久恐怖片 | 日韩成人一级大片| 欧美一区二区三区在线视频| 蜜臀av性久久久久av蜜臀妖精| 91精品国产色综合久久久蜜香臀| 亚洲成a人片在线不卡一二三区 | 美女脱光内衣内裤视频久久网站| 日韩精品中文字幕一区二区三区 | 欧美一区二区视频在线观看| 理论电影国产精品| 欧美zozozo| 成人18视频在线播放| 亚洲一二三区不卡| 国产精品美女久久久久久久久久久| 欧美在线播放高清精品| 国产精品69毛片高清亚洲| 亚洲一区二区三区小说| 欧美激情艳妇裸体舞| 欧美夫妻性生活| 99久久精品免费看国产免费软件| 欧美aa在线视频| 亚洲成人免费在线| 亚洲欧美成aⅴ人在线观看| 精品电影一区二区三区| 6080亚洲精品一区二区| 91啪九色porn原创视频在线观看| 国产一区二区三区久久悠悠色av| 亚洲国产色一区| 亚洲天天做日日做天天谢日日欢 | 在线成人高清不卡| 91蜜桃婷婷狠狠久久综合9色| 国产一区美女在线| 久久狠狠亚洲综合| 日本中文一区二区三区| 亚洲一区二区偷拍精品| 亚洲三级理论片| 久久久影院官网| 精品美女被调教视频大全网站| 欧美久久久久中文字幕| 欧美午夜电影网| 欧美午夜影院一区| 欧美丝袜自拍制服另类| 欧美性做爰猛烈叫床潮| 91成人网在线| 欧美色男人天堂| 欧美日韩综合不卡| 欧美日韩一区二区在线视频| 色偷偷久久人人79超碰人人澡| 粉嫩av亚洲一区二区图片| 国产盗摄一区二区三区| 国产一区欧美一区| 大陆成人av片| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 在线不卡a资源高清| 欧美精品日日鲁夜夜添| 欧美精品久久天天躁| 欧美另类z0zxhd电影| 欧美高清一级片在线| 日韩精品中文字幕一区 | 国产成人综合自拍| 粉嫩av一区二区三区| 波多野结衣欧美| 97久久人人超碰| 欧美午夜不卡视频| 欧美电影免费观看高清完整版在线 | 欧美一级一区二区| 欧美电影免费观看完整版| 久久综合久久99| 中文字幕成人网| 一区二区免费看| 麻豆国产精品一区二区三区 | 婷婷成人激情在线网| 免费欧美日韩国产三级电影| 久久不见久久见免费视频1| 国产伦精品一区二区三区免费| 粉嫩一区二区三区在线看| 色先锋aa成人| 日韩女优电影在线观看| 欧美国产日本韩| 夜夜嗨av一区二区三区中文字幕| 亚洲国产一区二区在线播放| 蜜臀a∨国产成人精品| 国产精品99久久不卡二区| 91福利资源站| 欧美精品一区二区三区蜜臀| 国产精品久线在线观看| 丝袜美腿成人在线| 国产精品一区二区久久不卡| 色综合天天综合网天天看片| 91精品国产一区二区三区| 国产欧美一区二区精品性色超碰| 亚洲男人电影天堂| 蜜臀av一级做a爰片久久| 99久久精品免费看国产免费软件| 91精品婷婷国产综合久久性色| 久久精品一区八戒影视| 一二三区精品视频| 粉嫩高潮美女一区二区三区| 欧美日韩成人一区二区| 中文字幕欧美国产| 日本欧美大码aⅴ在线播放| 成人免费毛片嘿嘿连载视频| 欧美丰满少妇xxxbbb| 亚洲欧洲成人自拍| 国内精品久久久久影院色| 在线观看av一区二区| 欧美国产日韩a欧美在线观看| 五月婷婷激情综合网| caoporen国产精品视频| 日韩欧美你懂的| 一区二区三区欧美| 懂色av一区二区在线播放| 欧美一区二区三区播放老司机| 亚洲日韩欧美一区二区在线| 国内精品自线一区二区三区视频| 欧美日韩在线不卡| 国产精品久久影院| 国产大片一区二区| 欧美电影免费观看高清完整版在线| 一区二区三区四区五区视频在线观看| 国产一区999| 欧美成人精品3d动漫h| 亚洲v日本v欧美v久久精品| 99久久婷婷国产精品综合| 国产三级久久久| 国产资源精品在线观看| 777xxx欧美| 天天综合色天天综合色h| 在线观看成人免费视频| 亚洲日本成人在线观看| 成人美女视频在线看| 久久精品人人做人人爽人人| 精品在线播放午夜| 91精品国产入口在线| 午夜国产精品一区| 精品视频免费看| 午夜私人影院久久久久| 在线观看免费亚洲| 亚洲成人av资源| 在线免费观看日本一区| 亚洲综合在线观看视频| 91精品福利视频| 一区二区成人在线观看| 在线亚洲欧美专区二区| 午夜欧美一区二区三区在线播放| 欧美亚洲图片小说| 亚洲.国产.中文慕字在线| 欧美艳星brazzers| 日本亚洲免费观看| 精品欧美黑人一区二区三区| 精品综合免费视频观看| 久久婷婷成人综合色| 国产精品资源在线看| 中文字幕不卡在线| 色8久久精品久久久久久蜜| 亚洲综合一区在线| 欧美一级片在线看| 韩国女主播一区| 国产精品福利一区二区| 色狠狠色狠狠综合| 亚洲成国产人片在线观看| 欧美成人乱码一区二区三区| 国产剧情av麻豆香蕉精品| 国产精品国产自产拍在线| 99视频热这里只有精品免费| 亚洲夂夂婷婷色拍ww47| 日韩午夜激情免费电影| 国产精品99久久久久久宅男| 国产精品久久久久影院色老大| 91麻豆国产香蕉久久精品| 亚洲午夜国产一区99re久久| 日韩欧美的一区二区| 成人午夜在线免费| 亚洲午夜影视影院在线观看| 精品国产乱码久久久久久1区2区| 丁香婷婷综合激情五月色|