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

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

?? ttgload.c

?? a very goog book
?? C
?? 第 1 頁 / 共 4 頁
字號:
  Exit:    return error;  }  static void  compute_glyph_metrics( TT_Loader   loader,                         FT_UInt     glyph_index )  {    FT_BBox       bbox;    TT_Face       face = (TT_Face)loader->face;    FT_Fixed      y_scale;    TT_GlyphSlot  glyph = loader->glyph;    TT_Size       size = (TT_Size)loader->size;    y_scale = 0x10000L;    if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )      y_scale = size->root.metrics.y_scale;    if ( glyph->format != ft_glyph_format_composite )    {      glyph->outline.flags &= ~ft_outline_single_pass;      /* copy outline to our glyph slot */      FT_GlyphLoader_CopyPoints( glyph->internal->loader, loader->gloader );      glyph->outline = glyph->internal->loader->base.outline;      /* translate array so that (0,0) is the glyph's origin */      FT_Outline_Translate( &glyph->outline, -loader->pp1.x, 0 );      FT_Outline_Get_CBox( &glyph->outline, &bbox );      if ( IS_HINTED( loader->load_flags ) )      {        /* grid-fit the bounding box */        bbox.xMin &= -64;        bbox.yMin &= -64;        bbox.xMax  = ( bbox.xMax + 63 ) & -64;        bbox.yMax  = ( bbox.yMax + 63 ) & -64;      }    }    else      bbox = loader->bbox;    /* get the device-independent horizontal advance.  It is scaled later */    /* by the base layer.                                                 */    {      FT_Pos  advance = loader->linear;      /* the flag FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH was introduced to */      /* correctly support DynaLab fonts, which have an incorrect       */      /* `advance_Width_Max' field!  It is used, to my knowledge,       */      /* exclusively in the X-TrueType font server.                     */      /*                                                                */      if ( face->postscript.isFixedPitch                                     &&           ( loader->load_flags & FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ) == 0 )        advance = face->horizontal.advance_Width_Max;      /* we need to return the advance in font units in linearHoriAdvance, */      /* it will be scaled later by the base layer.                        */      glyph->linearHoriAdvance = advance;    }    glyph->metrics.horiBearingX = bbox.xMin;    glyph->metrics.horiBearingY = bbox.yMax;    glyph->metrics.horiAdvance  = loader->pp2.x - loader->pp1.x;    /* don't forget to hint the advance when we need to */    if ( IS_HINTED( loader->load_flags ) )      glyph->metrics.horiAdvance = ( glyph->metrics.horiAdvance + 32 ) & -64;    /* Now take care of vertical metrics.  In the case where there is    */    /* no vertical information within the font (relatively common), make */    /* up some metrics by `hand'...                                      */    {      FT_Short   top_bearing;    /* vertical top side bearing (EM units) */      FT_UShort  advance_height; /* vertical advance height   (EM units) */      FT_Pos     left;     /* scaled vertical left side bearing */      FT_Pos     top;      /* scaled vertical top side bearing  */      FT_Pos     advance;  /* scaled vertical advance height    */      /* Get the unscaled `tsb' and `ah' */      if ( face->vertical_info                   &&           face->vertical.number_Of_VMetrics > 0 )      {        /* Don't assume that both the vertical header and vertical */        /* metrics are present in the same font :-)                */        TT_Get_Metrics( (TT_HoriHeader*)&face->vertical,                        glyph_index,                        &top_bearing,                        &advance_height );      }      else      {        /* Make up the distances from the horizontal header.   */        /* 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.      */        /*                                                     */        /* NOTE2: The sTypoDescender is negative, which is why */        /*        we compute the baseline-to-baseline distance */        /*        here with:                                   */        /*             ascender - descender + linegap          */        /*                                                     */        if ( face->os2.version != 0xFFFFU )        {          top_bearing    = (FT_Short)( face->os2.sTypoLineGap / 2 );          advance_height = (FT_UShort)( face->os2.sTypoAscender -                                        face->os2.sTypoDescender +                                        face->os2.sTypoLineGap );        }        else        {          top_bearing    = (FT_Short)( face->horizontal.Line_Gap / 2 );          advance_height = (FT_UShort)( face->horizontal.Ascender  +                                        face->horizontal.Descender +                                        face->horizontal.Line_Gap );        }      }      /* We must adjust the top_bearing value from the bounding box given */      /* in the glyph header to te bounding box calculated with           */      /* FT_Get_Outline_CBox().                                           */      /* scale the metrics */      if ( !( loader->load_flags & FT_LOAD_NO_SCALE ) )      {        top     = FT_MulFix( top_bearing + loader->bbox.yMax, y_scale )                    - bbox.yMax;        advance = FT_MulFix( advance_height, y_scale );      }      else      {        top     = top_bearing + loader->bbox.yMax - bbox.yMax;        advance = advance_height;      }      /* set the advance height in design units.  It is scaled later by */      /* the base layer.                                                */      glyph->linearVertAdvance = advance_height;      /* XXX: for now, we have no better algorithm for the lsb, but it */      /*      should work fine.                                        */      /*                                                               */      left = ( bbox.xMin - bbox.xMax ) / 2;      /* grid-fit them if necessary */      if ( IS_HINTED( loader->load_flags ) )      {        left   &= -64;        top     = ( top + 63     ) & -64;        advance = ( advance + 32 ) & -64;      }      glyph->metrics.vertBearingX = left;      glyph->metrics.vertBearingY = top;      glyph->metrics.vertAdvance  = advance;    }    /* adjust advance width to the value contained in the hdmx table */    if ( !face->postscript.isFixedPitch && size &&         IS_HINTED( loader->load_flags )        )    {      FT_Byte*  widths = Get_Advance_Widths( face,                                             size->root.metrics.x_ppem );      if ( widths )        glyph->metrics.horiAdvance = widths[glyph_index] << 6;    }    /* set glyph dimensions */    glyph->metrics.width  = bbox.xMax - bbox.xMin;    glyph->metrics.height = bbox.yMax - bbox.yMin;  }  /*************************************************************************/  /*                                                                       */  /* <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_UShort     glyph_index,                 FT_UInt       load_flags )  {    SFNT_Service  sfnt;    TT_Face       face;    FT_Stream     stream;    FT_Error      error;    TT_LoaderRec  loader;    face   = (TT_Face)glyph->face;    sfnt   = (SFNT_Service)face->sfnt;    stream = face->root.stream;    error  = 0;    if ( !size || ( load_flags & FT_LOAD_NO_SCALE )   ||                  ( load_flags & FT_LOAD_NO_RECURSE ) )    {      size        = NULL;      load_flags |= FT_LOAD_NO_SCALE   |                    FT_LOAD_NO_HINTING |                    FT_LOAD_NO_BITMAP;    }    glyph->num_subglyphs = 0;#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                                    &&         size->strike_index != 0xFFFFU           &&         sfnt->load_sbits                        &&         ( load_flags & FT_LOAD_NO_BITMAP ) == 0 )    {      TT_SBit_MetricsRec  metrics;      error = sfnt->load_sbit_image( face,                                     size->strike_index,                                     glyph_index,                                     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 */    /* return immediately if we only want the embedded bitmaps */    if ( load_flags & FT_LOAD_SBITS_ONLY )      return FT_Err_Invalid_Argument;    /* seek to the beginning of the glyph table.  For Type 42 fonts      */    /* the table might be accessed from a Postscript stream or something */    /* else...                                                           */    error = face->goto_table( face, TTAG_glyf, stream, 0 );    if ( error )    {      FT_ERROR(( "TT_Load_Glyph: could not access glyph table\n" ));      goto Exit;    }    FT_MEM_SET( &loader, 0, sizeof ( loader ) );    /* update the glyph zone bounds */    {      FT_GlyphLoader  gloader = FT_FACE_DRIVER(face)->glyph_loader;      loader.gloader = gloader;      FT_GlyphLoader_Rewind( gloader );      tt_prepare_zone( &loader.zone, &gloader->base, 0, 0 );      tt_prepare_zone( &loader.base, &gloader->base, 0, 0 );    }#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER    if ( size )    {      /* query new execution context */      loader.exec = size->debug ? size->context : TT_New_Context( face );      if ( !loader.exec )        return TT_Err_Could_Not_Find_Context;      TT_Load_Context( loader.exec, face, size );      loader.instructions = loader.exec->glyphIns;      /* load default graphics state - if needed */      if ( size->GS.instruct_control & 2 )        loader.exec->GS = tt_default_graphics_state;    }#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */    /* clear all outline flags, except the `owner' one */    glyph->outline.flags = 0;    /* let's initialize the rest of our loader now */    loader.load_flags    = load_flags;    loader.face   = (FT_Face)face;    loader.size   = (FT_Size)size;    loader.glyph  = (FT_GlyphSlot)glyph;    loader.stream = stream;    loader.glyf_offset  = FT_STREAM_POS();#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER    /* if the cvt program has disabled hinting, the argument */    /* is ignored.                                           */    if ( size && ( size->GS.instruct_control & 1 ) )      loader.load_flags |= FT_LOAD_NO_HINTING;#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */    /* Main loading loop */    glyph->format        = ft_glyph_format_outline;    glyph->num_subglyphs = 0;    error = load_truetype_glyph( &loader, glyph_index );    if ( !error )      compute_glyph_metrics( &loader, glyph_index );#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER    if ( !size || !size->debug )      TT_Done_Context( loader.exec );#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */    /* 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 ( size && size->root.metrics.y_ppem < 24 )      glyph->outline.flags |= ft_outline_high_precision;  Exit:    return error;  }/* END */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区福利在线| 国产精品99久久久| 欧美午夜精品一区二区三区| 亚洲日本va在线观看| av亚洲精华国产精华| 亚洲乱码中文字幕综合| 欧美体内she精视频| 日韩黄色在线观看| 26uuu国产电影一区二区| 国产精品资源站在线| 国产精品看片你懂得| 欧美亚日韩国产aⅴ精品中极品| 亚洲成人av资源| 精品少妇一区二区三区在线播放| 国产成人免费在线| 亚洲视频在线观看三级| 欧美日本视频在线| 精品在线亚洲视频| 成人欧美一区二区三区1314| 欧美亚洲国产一卡| 狠狠狠色丁香婷婷综合久久五月| 国产精品视频一二三| 在线看不卡av| 精彩视频一区二区| 亚洲欧美经典视频| 精品国产一区二区三区久久影院| 国产91露脸合集magnet| 亚洲一区欧美一区| 久久久777精品电影网影网 | 国产美女精品在线| 亚洲欧美日韩国产手机在线| 91精品国产高清一区二区三区蜜臀| 国产精品99久久久久久久女警 | 亚洲午夜免费电影| 久久亚洲捆绑美女| 欧美日韩中文一区| 国产精品12区| 日韩av在线播放中文字幕| 中日韩免费视频中文字幕| 欧美日韩大陆一区二区| 成人综合婷婷国产精品久久免费| 日欧美一区二区| 中文字幕亚洲一区二区av在线 | 国产91在线观看| 青青草原综合久久大伊人精品优势| 国产精品久久久久久亚洲毛片 | 亚洲一二三专区| 中文字幕电影一区| 精品少妇一区二区三区日产乱码 | 色先锋久久av资源部| 国产做a爰片久久毛片| 亚洲午夜一二三区视频| 国产精品福利一区| 国产三级一区二区三区| 欧美女孩性生活视频| 色综合天天狠狠| 成人午夜视频福利| 国产麻豆精品视频| 麻豆精品视频在线| 五月天一区二区| 亚洲主播在线播放| 亚洲欧美一区二区三区孕妇| 国产婷婷色一区二区三区 | 久久久精品黄色| 欧美电影免费观看高清完整版在线 | 1区2区3区精品视频| 久久久美女艺术照精彩视频福利播放| 欧美人妇做爰xxxⅹ性高电影| 99久久国产综合色|国产精品| 国产成人精品三级| 国产精品99久久久| 国产精品一级黄| 国产成人精品在线看| 国产激情91久久精品导航| 麻豆91免费看| 老司机午夜精品| 韩日精品视频一区| 国产一区二区三区久久悠悠色av| 美腿丝袜亚洲综合| 国内精品视频一区二区三区八戒| 久久99精品久久久久久动态图 | 欧美一区二区三区视频免费 | 亚洲精品在线免费播放| 精品国产亚洲一区二区三区在线观看| 在线91免费看| 日韩女同互慰一区二区| 欧美videos中文字幕| 日韩精品一区二区在线观看| 26uuu亚洲| 国产日韩精品一区二区三区| 国产精品欧美综合在线| 亚洲人成在线观看一区二区| 一区二区三区四区精品在线视频| 亚洲一区二区在线播放相泽| 天堂精品中文字幕在线| 蜜桃传媒麻豆第一区在线观看| 国产一区亚洲一区| 成人av免费观看| 欧美日韩亚洲综合| 日韩欧美色综合| 欧美国产日韩在线观看| 综合电影一区二区三区| 亚洲成人午夜影院| 狠狠色丁香婷婷综合久久片| 成人av电影在线| 欧美日韩免费一区二区三区视频| 日韩视频免费观看高清完整版 | 亚洲成人手机在线| 激情久久五月天| av成人免费在线| 欧美女孩性生活视频| 国产日韩欧美综合一区| 亚洲午夜久久久久| 久国产精品韩国三级视频| av电影在线观看不卡| 欧美日本国产视频| 国产亚洲精品bt天堂精选| 亚洲一区二区在线观看视频| 精品一区二区三区久久久| 日本黄色一区二区| 精品少妇一区二区三区日产乱码 | 国产不卡在线播放| 色婷婷综合久久久中文字幕| 精品久久久久久久人人人人传媒 | 亚洲欧美日韩国产手机在线| 美女网站一区二区| 91在线视频免费91| 欧美mv日韩mv国产网站app| 一区二区欧美精品| 国产精品亚洲午夜一区二区三区| 欧美日韩成人一区| 国产精品国产三级国产三级人妇| 美国精品在线观看| 色婷婷久久综合| 久久精品欧美日韩精品| 日韩高清不卡在线| 波多野结衣亚洲| 久久久久久久综合色一本| 午夜欧美电影在线观看| 成人黄色软件下载| 2023国产精品| 免费成人在线播放| 欧美美女bb生活片| 亚洲日本电影在线| 成人免费毛片片v| 久久久久国产精品麻豆ai换脸 | 国产精品福利在线播放| 精品亚洲欧美一区| 69堂国产成人免费视频| 亚洲精品国产a| 91偷拍与自偷拍精品| 国产精品婷婷午夜在线观看| 国产一区二区三区四| 欧美本精品男人aⅴ天堂| 天堂成人免费av电影一区| 欧美日韩一级黄| 亚洲不卡一区二区三区| 欧美日韩中文另类| 亚洲影视在线播放| 91国在线观看| 亚洲综合一区在线| 色综合久久久久久久| 一区二区在线观看视频| 91小视频在线免费看| 国产精品区一区二区三区| 成人免费高清在线观看| 亚洲国产精品99久久久久久久久| 国产成人在线观看免费网站| 国产视频视频一区| 成人免费不卡视频| 中文字幕在线不卡一区二区三区| 成人动漫视频在线| 国产精品免费久久| 91在线精品秘密一区二区| 一区二区三区四区中文字幕| 欧美色综合天天久久综合精品| 亚洲福利视频三区| 91精品国产综合久久久久久漫画 | 久久国产婷婷国产香蕉| 欧美大胆人体bbbb| 国产呦萝稀缺另类资源| 国产精品色呦呦| 97久久精品人人澡人人爽| 亚洲综合在线电影| 欧美日本韩国一区二区三区视频| 日本欧美加勒比视频| 久久品道一品道久久精品| 国产aⅴ综合色| 亚洲欧美另类久久久精品| 欧美日韩高清一区| 国产一区二区在线影院| 中文字幕一区二区三区四区不卡| 欧美亚州韩日在线看免费版国语版 | 欧美一区二区在线免费播放| 激情久久五月天| 亚洲少妇最新在线视频| 欧美日韩在线播放三区四区| 老鸭窝一区二区久久精品| 国产精品福利一区| 在线观看91精品国产麻豆|