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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ftcbasic.c

?? 智能設(shè)備中PDF閱讀器的源碼!用于windows mobile2003或者WM5以上
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/***************************************************************************/
/*                                                                         */
/*  ftcbasic.c                                                             */
/*                                                                         */
/*    The FreeType basic cache interface (body).                           */
/*                                                                         */
/*  Copyright 2003, 2004, 2005, 2006 by                                    */
/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
/*                                                                         */
/*  This file is part of the FreeType project, and may only be used,       */
/*  modified, and distributed under the terms of the FreeType project      */
/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
/*  this file you indicate that you have read the license and              */
/*  understand and accept it fully.                                        */
/*                                                                         */
/***************************************************************************/


#include <ft2build.h>
#include FT_CACHE_H
#include "ftcglyph.h"
#include "ftcimage.h"
#include "ftcsbits.h"
#include FT_INTERNAL_MEMORY_H

#include "ftccback.h"
#include "ftcerror.h"


#ifdef FT_CONFIG_OPTION_OLD_INTERNALS

  /*
   *  These structures correspond to the FTC_Font and FTC_ImageDesc types
   *  that were defined in version 2.1.7.
   */
  typedef struct  FTC_OldFontRec_
  {
    FTC_FaceID  face_id;
    FT_UShort   pix_width;
    FT_UShort   pix_height;

  } FTC_OldFontRec, *FTC_OldFont;


  typedef struct  FTC_OldImageDescRec_
  {
    FTC_OldFontRec  font;
    FT_UInt32       flags;

  } FTC_OldImageDescRec, *FTC_OldImageDesc;


  /*
   *  Notice that FTC_OldImageDescRec and FTC_ImageTypeRec are nearly
   *  identical, bit-wise.  The only difference is that the `width' and
   *  `height' fields are expressed as 16-bit integers in the old structure,
   *  and as normal `int' in the new one.
   *
   *  We are going to perform a weird hack to detect which structure is
   *  being passed to the image and sbit caches.  If the new structure's
   *  `width' is larger than 0x10000, we assume that we are really receiving
   *  an FTC_OldImageDesc.
   */

#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */


  /*
   *  Basic Families
   *
   */
  typedef struct  FTC_BasicAttrRec_
  {
    FTC_ScalerRec  scaler;
    FT_UInt        load_flags;

  } FTC_BasicAttrRec, *FTC_BasicAttrs;

#define FTC_BASIC_ATTR_COMPARE( a, b )                                 \
          FT_BOOL( FTC_SCALER_COMPARE( &(a)->scaler, &(b)->scaler ) && \
                   (a)->load_flags == (b)->load_flags               )

#define FTC_BASIC_ATTR_HASH( a )                                   \
          ( FTC_SCALER_HASH( &(a)->scaler ) + 31*(a)->load_flags )


  typedef struct  FTC_BasicQueryRec_
  {
    FTC_GQueryRec     gquery;
    FTC_BasicAttrRec  attrs;

  } FTC_BasicQueryRec, *FTC_BasicQuery;


  typedef struct  FTC_BasicFamilyRec_
  {
    FTC_FamilyRec     family;
    FTC_BasicAttrRec  attrs;

  } FTC_BasicFamilyRec, *FTC_BasicFamily;


  FT_CALLBACK_DEF( FT_Bool )
  ftc_basic_family_compare( FTC_MruNode  ftcfamily,
                            FT_Pointer   ftcquery )
  {
    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
    FTC_BasicQuery   query  = (FTC_BasicQuery)ftcquery;


    return FTC_BASIC_ATTR_COMPARE( &family->attrs, &query->attrs );
  }


  FT_CALLBACK_DEF( FT_Error )
  ftc_basic_family_init( FTC_MruNode  ftcfamily,
                         FT_Pointer   ftcquery,
                         FT_Pointer   ftccache )
  {
    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
    FTC_BasicQuery   query  = (FTC_BasicQuery)ftcquery;
    FTC_Cache        cache  = (FTC_Cache)ftccache;


    FTC_Family_Init( FTC_FAMILY( family ), cache );
    family->attrs = query->attrs;
    return 0;
  }


  FT_CALLBACK_DEF( FT_UInt )
  ftc_basic_family_get_count( FTC_Family   ftcfamily,
                              FTC_Manager  manager )
  {
    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
    FT_Error         error;
    FT_Face          face;
    FT_UInt          result = 0;


    error = FTC_Manager_LookupFace( manager, family->attrs.scaler.face_id,
                                    &face );
    if ( !error )
      result = face->num_glyphs;

    return result;
  }


  FT_CALLBACK_DEF( FT_Error )
  ftc_basic_family_load_bitmap( FTC_Family   ftcfamily,
                                FT_UInt      gindex,
                                FTC_Manager  manager,
                                FT_Face     *aface )
  {
    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
    FT_Error         error;
    FT_Size          size;


    error = FTC_Manager_LookupSize( manager, &family->attrs.scaler, &size );
    if ( !error )
    {
      FT_Face  face = size->face;


      error = FT_Load_Glyph( face, gindex,
                             family->attrs.load_flags | FT_LOAD_RENDER );
      if ( !error )
        *aface = face;
    }

    return error;
  }


  FT_CALLBACK_DEF( FT_Error )
  ftc_basic_family_load_glyph( FTC_Family  ftcfamily,
                               FT_UInt     gindex,
                               FTC_Cache   cache,
                               FT_Glyph   *aglyph )
  {
    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
    FT_Error         error;
    FTC_Scaler       scaler = &family->attrs.scaler;
    FT_Face          face;
    FT_Size          size;


    /* we will now load the glyph image */
    error = FTC_Manager_LookupSize( cache->manager,
                                    scaler,
                                    &size );
    if ( !error )
    {
      face = size->face;

      error = FT_Load_Glyph( face, gindex, family->attrs.load_flags );
      if ( !error )
      {
        if ( face->glyph->format == FT_GLYPH_FORMAT_BITMAP  ||
             face->glyph->format == FT_GLYPH_FORMAT_OUTLINE )
        {
          /* ok, copy it */
          FT_Glyph  glyph;


          error = FT_Get_Glyph( face->glyph, &glyph );
          if ( !error )
          {
            *aglyph = glyph;
            goto Exit;
          }
        }
        else
          error = FTC_Err_Invalid_Argument;
      }
    }

  Exit:
    return error;
  }


  FT_CALLBACK_DEF( FT_Bool )
  ftc_basic_gnode_compare_faceid( FTC_Node    ftcgnode,
                                  FT_Pointer  ftcface_id,
                                  FTC_Cache   cache )
  {
    FTC_GNode        gnode   = (FTC_GNode)ftcgnode;
    FTC_FaceID       face_id = (FTC_FaceID)ftcface_id;
    FTC_BasicFamily  family  = (FTC_BasicFamily)gnode->family;
    FT_Bool          result;


    result = FT_BOOL( family->attrs.scaler.face_id == face_id );
    if ( result )
    {
      /* we must call this function to avoid this node from appearing
       * in later lookups with the same face_id!
       */
      FTC_GNode_UnselectFamily( gnode, cache );
    }
    return result;
  }


 /*
  *
  * basic image cache
  *
  */

  FT_CALLBACK_TABLE_DEF
  const FTC_IFamilyClassRec  ftc_basic_image_family_class =
  {
    {
      sizeof ( FTC_BasicFamilyRec ),
      ftc_basic_family_compare,
      ftc_basic_family_init,
      0,                        /* FTC_MruNode_ResetFunc */
      0                         /* FTC_MruNode_DoneFunc  */
    },
    ftc_basic_family_load_glyph
  };


  FT_CALLBACK_TABLE_DEF
  const FTC_GCacheClassRec  ftc_basic_image_cache_class =
  {
    {
      ftc_inode_new,
      ftc_inode_weight,
      ftc_gnode_compare,
      ftc_basic_gnode_compare_faceid,
      ftc_inode_free,

      sizeof ( FTC_GCacheRec ),
      ftc_gcache_init,
      ftc_gcache_done
    },
    (FTC_MruListClass)&ftc_basic_image_family_class
  };


  /* documentation is in ftcache.h */

  FT_EXPORT_DEF( FT_Error )
  FTC_ImageCache_New( FTC_Manager      manager,
                      FTC_ImageCache  *acache )
  {
    return FTC_GCache_New( manager, &ftc_basic_image_cache_class,
                           (FTC_GCache*)acache );
  }


  /* documentation is in ftcache.h */

  FT_EXPORT_DEF( FT_Error )
  FTC_ImageCache_Lookup( FTC_ImageCache  cache,
                         FTC_ImageType   type,
                         FT_UInt         gindex,
                         FT_Glyph       *aglyph,
                         FTC_Node       *anode )
  {
    FTC_BasicQueryRec  query;
    FTC_INode          node = 0;  /* make compiler happy */
    FT_Error           error;
    FT_UInt32          hash;


    /* some argument checks are delayed to FTC_Cache_Lookup */
    if ( !aglyph )
    {
      error = FTC_Err_Invalid_Argument;
      goto Exit;
    }

    *aglyph = NULL;
    if ( anode )
      *anode  = NULL;

#ifdef FT_CONFIG_OPTION_OLD_INTERNALS

    /*
     *  This one is a major hack used to detect whether we are passed a
     *  regular FTC_ImageType handle, or a legacy FTC_OldImageDesc one.
     */
    if ( type->width >= 0x10000 )
    {
      FTC_OldImageDesc  desc = (FTC_OldImageDesc)type;


      query.attrs.scaler.face_id = desc->font.face_id;
      query.attrs.scaler.width   = desc->font.pix_width;
      query.attrs.scaler.height  = desc->font.pix_height;
      query.attrs.load_flags     = desc->flags;
    }
    else

#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */

    {
      query.attrs.scaler.face_id = type->face_id;
      query.attrs.scaler.width   = type->width;
      query.attrs.scaler.height  = type->height;
      query.attrs.load_flags     = type->flags;
    }

    query.attrs.scaler.pixel = 1;
    query.attrs.scaler.x_res = 0;  /* make compilers happy */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产v综合v亚洲欧| 久久精工是国产品牌吗| 精品国产乱码久久久久久蜜臀| 国产一区二区三区四区在线观看| 中文字幕一区二区三区乱码在线| 一本一道综合狠狠老| 激情综合色综合久久综合| 国产精品白丝在线| 久久久久久久综合狠狠综合| 在线欧美日韩国产| 麻豆视频一区二区| 亚洲欧美日韩在线不卡| 久久久亚洲精品一区二区三区| 欧美一区二区三区视频免费播放 | 亚洲国产精品激情在线观看| 日韩一级完整毛片| 欧美在线免费观看视频| 色综合久久九月婷婷色综合| 成人黄色777网| 不卡一二三区首页| 国产精品亚洲午夜一区二区三区| 五月天国产精品| 日本aⅴ免费视频一区二区三区| 亚洲精品你懂的| 亚洲欧洲av色图| 亚洲色欲色欲www| 久久精品一区八戒影视| 亚洲国产岛国毛片在线| 国产精品视频九色porn| 国产精品久久久久久久久快鸭| 欧美成人乱码一区二区三区| 欧美精品黑人性xxxx| 欧美一区二区在线观看| 69久久99精品久久久久婷婷| 91麻豆精品国产91久久久久久久久 | 久久久久国产一区二区三区四区 | 久久午夜免费电影| 国产精品美女久久久久aⅴ | 91精品国产黑色紧身裤美女| 91精品蜜臀在线一区尤物| 7777精品久久久大香线蕉| 久久久久综合网| 亚洲欧洲日韩女同| 午夜激情综合网| 免费成人深夜小野草| 韩国视频一区二区| 色噜噜久久综合| 日韩欧美成人一区二区| 国产精品的网站| 蜜臀av国产精品久久久久| 成人性色生活片| 欧美挠脚心视频网站| 中文字幕巨乱亚洲| 亚洲妇熟xx妇色黄| 99re热视频这里只精品| 精品国产一区二区三区久久影院| 国产精品久久久久影院老司| 亚洲国产日韩综合久久精品| 国产成人h网站| 欧美另类z0zxhd电影| 国产精品久99| 蜜桃av噜噜一区二区三区小说| 色综合久久久久综合体桃花网| 欧美一级免费大片| 一区二区免费在线播放| 成人精品视频网站| 久久综合九色综合97婷婷女人| 亚洲与欧洲av电影| 欧美主播一区二区三区美女| 国产精品久久久久久妇女6080| 美女一区二区在线观看| 欧美三级乱人伦电影| 一区二区不卡在线视频 午夜欧美不卡在| 成人蜜臀av电影| 久久综合久色欧美综合狠狠| 奇米影视一区二区三区| 制服丝袜av成人在线看| 奇米888四色在线精品| 91精品在线一区二区| 日韩av电影天堂| 日韩欧美国产综合| 日本午夜精品一区二区三区电影| 欧美日韩午夜在线| 日日夜夜精品视频天天综合网| 91精品久久久久久蜜臀| 理论电影国产精品| 亚洲国产成人在线| 色综合久久天天综合网| 天堂va蜜桃一区二区三区 | 欧美一级国产精品| 成人黄色小视频| 亚洲视频1区2区| 日韩欧美成人午夜| 99久久综合国产精品| 亚洲一区二区高清| 日韩欧美一级二级| 岛国一区二区三区| 亚洲aaa精品| 中文无字幕一区二区三区| 欧美主播一区二区三区美女| 韩国女主播一区| 一区二区三区影院| 亚洲精品一区二区三区蜜桃下载| youjizz久久| 看片的网站亚洲| 亚洲视频免费在线观看| 日韩视频一区二区三区| 波多野结衣视频一区| 婷婷亚洲久悠悠色悠在线播放| 中文字幕在线免费不卡| 九九九精品视频| 中文字幕欧美激情一区| 欧美日本一道本在线视频| 国产尤物一区二区| 日韩精品每日更新| 亚洲最新在线观看| 国产精品不卡在线观看| 久久久久久久性| 精品久久免费看| 91精品国产综合久久久久久久| 91色.com| 91丝袜美腿高跟国产极品老师 | 日本欧美一区二区三区乱码 | 日韩国产欧美在线视频| 精品国产乱码久久久久久影片| 成人黄页毛片网站| 国产精品影视网| 久久精品免费看| 午夜一区二区三区视频| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 中文字幕第一区第二区| 日本一区二区免费在线观看视频| 亚洲精品一区在线观看| 日韩欧美中文字幕精品| 久久亚洲欧美国产精品乐播 | 一区二区三区日本| 亚洲国产综合色| 亚洲午夜激情网页| 亚洲综合小说图片| 日韩电影一二三区| 久久精品国产亚洲aⅴ| 国产福利一区二区三区视频| 99re成人精品视频| 日韩欧美电影一区| 中文字幕在线不卡国产视频| 精品无人区卡一卡二卡三乱码免费卡 | 亚洲视频香蕉人妖| 亚洲一区影音先锋| 国产suv一区二区三区88区| 欧美性猛交一区二区三区精品| 欧美精品一卡两卡| 国产色产综合色产在线视频| 午夜电影网一区| 99久久精品国产麻豆演员表| 欧美中文字幕一区二区三区亚洲 | 日日夜夜免费精品视频| 成人激情开心网| 精品国产91洋老外米糕| 午夜国产精品一区| 国产在线观看免费一区| 欧美日韩一区二区三区视频| 久久久久免费观看| 久久精品国产色蜜蜜麻豆| 色综合天天综合| 国产欧美中文在线| 精品在线视频一区| 日韩一区二区三区免费观看| 一区二区中文视频| 欧美色综合网站| 亚洲综合区在线| 欧美视频一区二区三区四区 | 精品一区二区三区蜜桃| 日韩女优制服丝袜电影| 日韩黄色免费电影| 欧洲日韩一区二区三区| 国产精品免费网站在线观看| 99久久伊人网影院| 亚洲精品视频在线观看免费| 成人av免费观看| 亚洲欧美日韩一区二区| 欧美天堂亚洲电影院在线播放| 亚洲一区二区三区在线| 欧美午夜一区二区三区| 成人欧美一区二区三区视频网页| 国产精品77777竹菊影视小说| 日韩欧美自拍偷拍| 国产成人在线免费| 中文字幕制服丝袜成人av | 国产一区中文字幕| 欧美va亚洲va| 国产福利精品一区二区| 国产精品乱码久久久久久 | 国模冰冰炮一区二区| 欧美电影免费观看高清完整版在| 国产一区三区三区| 亚洲精选一二三| 精品国产乱码久久久久久夜甘婷婷 | 亚洲国产美女搞黄色| 日韩欧美国产午夜精品| 不卡电影免费在线播放一区|