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

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

?? ttgload.c

?? 智能設備中PDF閱讀器的源碼!用于windows mobile2003或者WM5以上
?? C
?? 第 1 頁 / 共 5 頁
字號:


      /* Get the unscaled top bearing and advance height. */
      if ( face->vertical_info &&
           face->vertical.number_Of_VMetrics > 0 )
      {
        top = (FT_Short)FT_DivFix( loader->pp3.y - bbox.yMax,
                                   y_scale );

        if ( loader->pp3.y <= loader->pp4.y )
          advance = 0;
        else
          advance = (FT_UShort)FT_DivFix( loader->pp3.y - loader->pp4.y,
                                          y_scale );
      }
      else
      {
        FT_Pos  height;


        /* XXX Compute top side bearing and advance height in  */
        /*     Get_VMetrics instead of here.                   */

        /* NOTE: The OS/2 values are the only `portable' ones, */
        /*       which is why we use them, if there is an OS/2 */
        /*       table in the font.  Otherwise, we use the     */
        /*       values defined in the horizontal header.      */

        height = (FT_Short)FT_DivFix( bbox.yMax - bbox.yMin,
                                      y_scale );
        if ( face->os2.version != 0xFFFFU )
          advance = (FT_Pos)( face->os2.sTypoAscender -
                              face->os2.sTypoDescender );
        else
          advance = (FT_Pos)( face->horizontal.Ascender -
                              face->horizontal.Descender );

        top = ( advance - height ) / 2;
      }

#ifdef FT_CONFIG_OPTION_INCREMENTAL
      {
        FT_Incremental_InterfaceRec*  incr;
        FT_Incremental_MetricsRec     metrics;
        FT_Error                      error;


        incr = face->root.internal->incremental_interface;

        /* If this is an incrementally loaded font see if there are */
        /* overriding metrics for this glyph.                       */
        if ( incr && incr->funcs->get_glyph_metrics )
        {
          metrics.bearing_x = 0;
          metrics.bearing_y = top;
          metrics.advance   = advance;

          error = incr->funcs->get_glyph_metrics( incr->object,
                                                  glyph_index,
                                                  TRUE,
                                                  &metrics );
          if ( error )
            return error;

          top     = metrics.bearing_y;
          advance = metrics.advance;
        }
      }

      /* GWW: Do vertical metrics get loaded incrementally too? */

#endif /* FT_CONFIG_OPTION_INCREMENTAL */

      glyph->linearVertAdvance = advance;

      /* scale the metrics */
      if ( !( loader->load_flags & FT_LOAD_NO_SCALE ) )
      {
        top     = FT_MulFix( top, y_scale );
        advance = FT_MulFix( advance, y_scale );
      }

      /* XXX: for now, we have no better algorithm for the lsb, but it */
      /*      should work fine.                                        */
      /*                                                               */
      glyph->metrics.vertBearingX = ( bbox.xMin - bbox.xMax ) / 2;
      glyph->metrics.vertBearingY = top;
      glyph->metrics.vertAdvance  = advance;
    }

    /* adjust advance width to the value contained in the hdmx table */
    if ( !face->postscript.isFixedPitch &&
         IS_HINTED( loader->load_flags )        )
    {
      FT_Byte*  widthp;


      widthp = tt_face_get_device_metrics( face,
                                           size->root.metrics.x_ppem,
                                           glyph_index );

      if ( widthp )
        glyph->metrics.horiAdvance = *widthp << 6;
    }

    /* set glyph dimensions */
    glyph->metrics.width  = bbox.xMax - bbox.xMin;
    glyph->metrics.height = bbox.yMax - bbox.yMin;

    return 0;
  }


#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS

  static FT_Error
  load_sbit_image( TT_Size       size,
                   TT_GlyphSlot  glyph,
                   FT_UInt       glyph_index,
                   FT_Int32      load_flags )
  {
    TT_Face             face;
    SFNT_Service        sfnt;
    FT_Stream           stream;
    FT_Error            error;
    TT_SBit_MetricsRec  metrics;


    face   = (TT_Face)glyph->face;
    sfnt   = (SFNT_Service)face->sfnt;
    stream = face->root.stream;

    error = sfnt->load_sbit_image( face,
                                   size->strike_index,
                                   glyph_index,
                                   (FT_Int)load_flags,
                                   stream,
                                   &glyph->bitmap,
                                   &metrics );
    if ( !error )
    {
      glyph->outline.n_points   = 0;
      glyph->outline.n_contours = 0;

      glyph->metrics.width  = (FT_Pos)metrics.width  << 6;
      glyph->metrics.height = (FT_Pos)metrics.height << 6;

      glyph->metrics.horiBearingX = (FT_Pos)metrics.horiBearingX << 6;
      glyph->metrics.horiBearingY = (FT_Pos)metrics.horiBearingY << 6;
      glyph->metrics.horiAdvance  = (FT_Pos)metrics.horiAdvance  << 6;

      glyph->metrics.vertBearingX = (FT_Pos)metrics.vertBearingX << 6;
      glyph->metrics.vertBearingY = (FT_Pos)metrics.vertBearingY << 6;
      glyph->metrics.vertAdvance  = (FT_Pos)metrics.vertAdvance  << 6;

      glyph->format = FT_GLYPH_FORMAT_BITMAP;
      if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
      {
        glyph->bitmap_left = metrics.vertBearingX;
        glyph->bitmap_top  = metrics.vertBearingY;
      }
      else
      {
        glyph->bitmap_left = metrics.horiBearingX;
        glyph->bitmap_top  = metrics.horiBearingY;
      }
    }

    return error;
  }

#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */


  static FT_Error
  tt_loader_init( TT_Loader     loader,
                  TT_Size       size,
                  TT_GlyphSlot  glyph,
                  FT_Int32      load_flags )
  {
    TT_Face    face;
    FT_Stream  stream;


    face   = (TT_Face)glyph->face;
    stream = face->root.stream;

    FT_MEM_ZERO( loader, sizeof ( TT_LoaderRec ) );

#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER

    /* load execution context */
    {
      TT_ExecContext  exec;


      /* query new execution context */
      exec = size->debug ? size->context
                         : ( (TT_Driver)FT_FACE_DRIVER( face ) )->context;
      if ( !exec )
        return TT_Err_Could_Not_Find_Context;

      TT_Load_Context( exec, face, size );

      /* see if the cvt program has disabled hinting */
      if ( exec->GS.instruct_control & 1 )
        load_flags |= FT_LOAD_NO_HINTING;

      /* load default graphics state - if needed */
      if ( exec->GS.instruct_control & 2 )
        exec->GS = tt_default_graphics_state;

      exec->pedantic_hinting = FT_BOOL( load_flags & FT_LOAD_PEDANTIC );
      exec->grayscale =
        FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) != FT_LOAD_TARGET_MONO );

      loader->exec = exec;
      loader->instructions = exec->glyphIns;
    }

#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */

    /* seek to the beginning of the glyph table.  For Type 42 fonts      */
    /* the table might be accessed from a Postscript stream or something */
    /* else...                                                           */

#ifdef FT_CONFIG_OPTION_INCREMENTAL

    if ( face->root.internal->incremental_interface )
      loader->glyf_offset = 0;
    else

#endif

    {
      FT_Error  error = face->goto_table( face, TTAG_glyf, stream, 0 );


      if ( error )
      {
        FT_ERROR(( "TT_Load_Glyph: could not access glyph table\n" ));
        return error;
      }
      loader->glyf_offset = FT_STREAM_POS();
    }

    /* get face's glyph loader */
    {
      FT_GlyphLoader  gloader = glyph->internal->loader;


      FT_GlyphLoader_Rewind( gloader );
      loader->gloader = gloader;
    }

    loader->load_flags    = load_flags;

    loader->face   = (FT_Face)face;
    loader->size   = (FT_Size)size;
    loader->glyph  = (FT_GlyphSlot)glyph;
    loader->stream = stream;

    return TT_Err_Ok;
  }


  /*************************************************************************/
  /*                                                                       */
  /* <Function>                                                            */
  /*    TT_Load_Glyph                                                      */
  /*                                                                       */
  /* <Description>                                                         */
  /*    A function used to load a single glyph within a given glyph slot,  */
  /*    for a given size.                                                  */
  /*                                                                       */
  /* <Input>                                                               */
  /*    glyph       :: A handle to a target slot object where the glyph    */
  /*                   will be loaded.                                     */
  /*                                                                       */
  /*    size        :: A handle to the source face size at which the glyph */
  /*                   must be scaled/loaded.                              */
  /*                                                                       */
  /*    glyph_index :: The index of the glyph in the font file.            */
  /*                                                                       */
  /*    load_flags  :: A flag indicating what to load for this glyph.  The */
  /*                   FT_LOAD_XXX constants can be used to control the    */
  /*                   glyph loading process (e.g., whether the outline    */
  /*                   should be scaled, whether to load bitmaps or not,   */
  /*                   whether to hint the outline, etc).                  */
  /*                                                                       */
  /* <Return>                                                              */
  /*    FreeType error code.  0 means success.                             */
  /*                                                                       */
  FT_LOCAL_DEF( FT_Error )
  TT_Load_Glyph( TT_Size       size,
                 TT_GlyphSlot  glyph,
                 FT_UInt       glyph_index,
                 FT_Int32      load_flags )
  {
    TT_Face       face;
    FT_Stream     stream;
    FT_Error      error;
    TT_LoaderRec  loader;


    face   = (TT_Face)glyph->face;
    stream = face->root.stream;
    error  = TT_Err_Ok;

#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS

    /* try to load embedded bitmap if any              */
    /*                                                 */
    /* XXX: The convention should be emphasized in     */
    /*      the documents because it can be confusing. */
    if ( size->strike_index != 0xFFFFFFFFUL      &&
         ( load_flags & FT_LOAD_NO_BITMAP ) == 0 )
    {
      error = load_sbit_image( size, glyph, glyph_index, load_flags );
      if ( !error )
        return TT_Err_Ok;
    }

#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */

    /* if FT_LOAD_NO_SCALE is not set, `ttmetrics' must be valid */
    if ( !( load_flags & FT_LOAD_NO_SCALE ) && !size->ttmetrics.valid )
      return TT_Err_Invalid_Size_Handle;

    if ( load_flags & FT_LOAD_SBITS_ONLY )
      return TT_Err_Invalid_Argument;

    error = tt_loader_init( &loader, size, glyph, load_flags );
    if ( error )
      return error;

    glyph->format        = FT_GLYPH_FORMAT_OUTLINE;
    glyph->num_subglyphs = 0;
    glyph->outline.flags = 0;

    /* Main loading loop */
    error = load_truetype_glyph( &loader, glyph_index, 0 );
    if ( !error )
    {
      if ( glyph->format == FT_GLYPH_FORMAT_COMPOSITE )
      {
        glyph->num_subglyphs = loader.gloader->base.num_subglyphs;
        glyph->subglyphs     = loader.gloader->base.subglyphs;
      }
      else
      {
        glyph->outline        = loader.gloader->base.outline;
        glyph->outline.flags &= ~FT_OUTLINE_SINGLE_PASS;

        /* In case bit 1 of the `flags' field in the `head' table isn't */
        /* set, translate array so that (0,0) is the glyph's origin.    */
        if ( ( face->header.Flags & 2 ) == 0 && loader.pp1.x )
          FT_Outline_Translate( &glyph->outline, -loader.pp1.x, 0 );
      }

      compute_glyph_metrics( &loader, glyph_index );
    }

    /* Set the `high precision' bit flag.                           */
    /* This is _critical_ to get correct output for monochrome      */
    /* TrueType glyphs at all sizes using the bytecode interpreter. */
    /*                                                              */
    if ( !( load_flags & FT_LOAD_NO_SCALE ) &&
         size->root.metrics.y_ppem < 24     )
      glyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION;

    return error;
  }


/* END */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品午夜视频| 日韩欧美在线综合网| 亚洲国产精品麻豆| 日韩美一区二区三区| 99久久99久久精品国产片果冻| 9人人澡人人爽人人精品| 午夜电影一区二区三区| 91精彩视频在线观看| 亚洲综合激情小说| 日韩电影网1区2区| 久久亚洲春色中文字幕久久久| www.欧美日韩国产在线| 久久国产欧美日韩精品| 亚洲成人免费在线观看| 最新国产の精品合集bt伙计| 欧美电影免费观看高清完整版在线观看 | wwwwww.欧美系列| 欧美三级视频在线观看| 99国产精品久久| 国产精品99久久久久久似苏梦涵 | 亚洲制服丝袜av| 国产精品网站一区| 欧美精品一区二区三区四区 | 亚洲综合网站在线观看| 日韩欧美一二三区| 色欧美日韩亚洲| 国产成人免费视频 | 韩国精品主播一区二区在线观看 | 亚洲日本va午夜在线电影| 26uuu成人网一区二区三区| 国产精品欧美极品| 精品免费日韩av| 欧美一区二区三区喷汁尤物| 欧美色中文字幕| 在线视频欧美精品| 色美美综合视频| 色综合久久久久久久久久久| 91年精品国产| 在线一区二区三区四区五区| 色诱视频网站一区| 成人免费视频app| 成人精品免费看| 成人中文字幕在线| 国产夜色精品一区二区av| 欧美性色黄大片| 欧美午夜一区二区三区免费大片| 一本久久精品一区二区| 色成年激情久久综合| 日本丶国产丶欧美色综合| 欧美主播一区二区三区| 欧美色区777第一页| 欧美喷水一区二区| 欧美精品久久一区二区三区 | 日本一区二区视频在线| 欧美高清在线一区二区| 国产精品嫩草影院av蜜臀| 国产精品久久久久永久免费观看 | 久久免费电影网| 国产精品蜜臀av| 一区二区三区在线观看国产| 亚洲一区二区三区四区五区黄| 亚洲一级二级在线| 奇米综合一区二区三区精品视频| 国产一二三精品| 99久久婷婷国产| 正在播放亚洲一区| 久久精品日产第一区二区三区高清版| 成人黄动漫网站免费app| 精品一区二区在线看| 国产高清不卡二三区| 国产精品免费av| 一区二区三区视频在线看| 亚洲成a人v欧美综合天堂下载| 日韩不卡一二三区| 国产不卡视频在线播放| 91视频在线观看免费| 欧美日韩成人激情| 国产婷婷一区二区| 午夜国产不卡在线观看视频| 国内成人精品2018免费看| 东方欧美亚洲色图在线| 欧美日韩一级黄| 国产调教视频一区| 亚洲国产精品一区二区尤物区| 国产在线精品一区在线观看麻豆| jizzjizzjizz欧美| 欧美一区二区啪啪| 国产精品网站一区| 美女视频网站久久| 色呦呦一区二区三区| 欧美精品一区二区三区蜜臀| 亚洲乱码国产乱码精品精98午夜 | av动漫一区二区| 3d成人动漫网站| 国产精品麻豆一区二区| 日韩不卡手机在线v区| av在线不卡电影| 日韩欧美一级在线播放| 亚洲视频综合在线| 国产成人夜色高潮福利影视| 欧美一区二区在线播放| 成人欧美一区二区三区| 精品一区二区久久久| 欧美日韩中文一区| 欧美国产日韩在线观看| 久久精品国产亚洲一区二区三区| 91久久人澡人人添人人爽欧美| 国产欧美视频一区二区三区| 日日夜夜免费精品| 91久久精品网| 1000部国产精品成人观看| 国产盗摄女厕一区二区三区 | 6080亚洲精品一区二区| 亚洲欧洲精品一区二区精品久久久 | 麻豆国产精品视频| 欧美麻豆精品久久久久久| 亚洲免费观看高清完整版在线观看熊| 国产一区二区三区四区在线观看| 制服丝袜中文字幕一区| 一区二区三区在线看| 成a人片国产精品| 国产欧美日韩另类一区| 国产一区二区三区在线观看免费| 91.xcao| 午夜精品福利在线| 欧美三片在线视频观看| 一区二区三区四区在线播放| 99re热这里只有精品免费视频| 日本一区二区视频在线| 国产成人超碰人人澡人人澡| 久久久久久久av麻豆果冻| 国产乱码精品一区二区三区av | 91丨九色porny丨蝌蚪| 国产精品久久影院| 不卡电影一区二区三区| 国产精品超碰97尤物18| 99久久精品国产网站| 中文字幕一区二区三区四区不卡| 国产1区2区3区精品美女| 久久久国际精品| 成人午夜在线视频| 亚洲婷婷综合色高清在线| 91麻豆国产福利在线观看| 日韩美女视频19| 在线观看三级视频欧美| 亚洲va韩国va欧美va| 91精品国产乱| 国内精品视频666| 国产女人aaa级久久久级| eeuss国产一区二区三区| 亚洲人成精品久久久久久| 日本精品视频一区二区三区| 亚洲成人www| 日韩视频在线你懂得| 国产一区二区三区四区五区美女 | 亚洲国产日韩a在线播放性色| 欧美无砖专区一中文字| 日本在线不卡视频| 精品免费国产一区二区三区四区| 国产成人免费在线观看不卡| 最新日韩在线视频| 欧美日韩一区二区三区四区| 美女www一区二区| 欧美极品少妇xxxxⅹ高跟鞋| 97aⅴ精品视频一二三区| 亚洲一区二区三区四区的 | 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品一区二区x88av| 中文字幕一区二区三区四区| 欧美日韩一区二区三区在线看| 九九九久久久精品| 亚洲色图制服丝袜| 91精品国产免费| 不卡在线视频中文字幕| 日韩电影一区二区三区四区| 国产精品乱码一区二三区小蝌蚪| 欧美在线free| 韩国av一区二区三区在线观看| 亚洲免费看黄网站| 精品久久人人做人人爰| 91蜜桃免费观看视频| 久久黄色级2电影| 亚洲一区二区欧美日韩| 亚洲精品在线一区二区| 在线视频一区二区免费| 国内久久婷婷综合| 亚洲午夜视频在线| 中文字幕精品在线不卡| 9191国产精品| 91天堂素人约啪| 国模冰冰炮一区二区| 一区二区三区在线免费视频| 久久精品一区二区三区不卡 | 欧美日韩国产首页在线观看| 国产精品一区二区久激情瑜伽 | 91香蕉视频污在线| 韩国欧美国产1区| 奇米四色…亚洲| 亚洲一区二区三区四区在线| 国产精品视频麻豆|