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

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

?? ftglyph.c

?? 智能設(shè)備中PDF閱讀器的源碼!用于windows mobile2003或者WM5以上
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************************************/
/*                                                                         */
/*  ftglyph.c                                                              */
/*                                                                         */
/*    FreeType convenience functions to handle glyphs (body).              */
/*                                                                         */
/*  Copyright 1996-2001, 2002, 2003, 2004, 2005 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.                                        */
/*                                                                         */
/***************************************************************************/

  /*************************************************************************/
  /*                                                                       */
  /*  This file contains the definition of several convenience functions   */
  /*  that can be used by client applications to easily retrieve glyph     */
  /*  bitmaps and outlines from a given face.                              */
  /*                                                                       */
  /*  These functions should be optional if you are writing a font server  */
  /*  or text layout engine on top of FreeType.  However, they are pretty  */
  /*  handy for many other simple uses of the library.                     */
  /*                                                                       */
  /*************************************************************************/


#include <ft2build.h>
#include FT_GLYPH_H
#include FT_OUTLINE_H
#include FT_BITMAP_H
#include FT_INTERNAL_OBJECTS_H


  /*************************************************************************/
  /*                                                                       */
  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */
  /* messages during execution.                                            */
  /*                                                                       */
#undef  FT_COMPONENT
#define FT_COMPONENT  trace_glyph


  /*************************************************************************/
  /*************************************************************************/
  /****                                                                 ****/
  /****   Convenience functions                                         ****/
  /****                                                                 ****/
  /*************************************************************************/
  /*************************************************************************/


  /* documentation is in ftglyph.h */

  FT_EXPORT_DEF( void )
  FT_Matrix_Multiply( const FT_Matrix*  a,
                      FT_Matrix        *b )
  {
    FT_Fixed  xx, xy, yx, yy;


    if ( !a || !b )
      return;

    xx = FT_MulFix( a->xx, b->xx ) + FT_MulFix( a->xy, b->yx );
    xy = FT_MulFix( a->xx, b->xy ) + FT_MulFix( a->xy, b->yy );
    yx = FT_MulFix( a->yx, b->xx ) + FT_MulFix( a->yy, b->yx );
    yy = FT_MulFix( a->yx, b->xy ) + FT_MulFix( a->yy, b->yy );

    b->xx = xx;  b->xy = xy;
    b->yx = yx;  b->yy = yy;
  }


  /* documentation is in ftglyph.h */

  FT_EXPORT_DEF( FT_Error )
  FT_Matrix_Invert( FT_Matrix*  matrix )
  {
    FT_Pos  delta, xx, yy;


    if ( !matrix )
      return FT_Err_Invalid_Argument;

    /* compute discriminant */
    delta = FT_MulFix( matrix->xx, matrix->yy ) -
            FT_MulFix( matrix->xy, matrix->yx );

    if ( !delta )
      return FT_Err_Invalid_Argument;  /* matrix can't be inverted */

    matrix->xy = - FT_DivFix( matrix->xy, delta );
    matrix->yx = - FT_DivFix( matrix->yx, delta );

    xx = matrix->xx;
    yy = matrix->yy;

    matrix->xx = FT_DivFix( yy, delta );
    matrix->yy = FT_DivFix( xx, delta );

    return FT_Err_Ok;
  }


  /*************************************************************************/
  /*************************************************************************/
  /****                                                                 ****/
  /****   FT_BitmapGlyph support                                        ****/
  /****                                                                 ****/
  /*************************************************************************/
  /*************************************************************************/

  FT_CALLBACK_DEF( FT_Error )
  ft_bitmap_glyph_init( FT_Glyph      bitmap_glyph,
                        FT_GlyphSlot  slot )
  {
    FT_BitmapGlyph  glyph   = (FT_BitmapGlyph)bitmap_glyph;
    FT_Error        error   = FT_Err_Ok;
    FT_Library      library = FT_GLYPH( glyph )->library;


    if ( slot->format != FT_GLYPH_FORMAT_BITMAP )
    {
      error = FT_Err_Invalid_Glyph_Format;
      goto Exit;
    }

    glyph->left = slot->bitmap_left;
    glyph->top  = slot->bitmap_top;

    /* do lazy copying whenever possible */
    if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
    {
      glyph->bitmap = slot->bitmap;
      slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
    }
    else
    {
      FT_Bitmap_New( &glyph->bitmap );
      error = FT_Bitmap_Copy( library, &slot->bitmap, &glyph->bitmap );
    }

  Exit:
    return error;
  }


  FT_CALLBACK_DEF( FT_Error )
  ft_bitmap_glyph_copy( FT_Glyph  bitmap_source,
                        FT_Glyph  bitmap_target )
  {
    FT_Library      library = bitmap_source->library;
    FT_BitmapGlyph  source  = (FT_BitmapGlyph)bitmap_source;
    FT_BitmapGlyph  target  = (FT_BitmapGlyph)bitmap_target;


    target->left = source->left;
    target->top  = source->top;

    return FT_Bitmap_Copy( library, &source->bitmap, &target->bitmap );
  }


  FT_CALLBACK_DEF( void )
  ft_bitmap_glyph_done( FT_Glyph  bitmap_glyph )
  {
    FT_BitmapGlyph  glyph   = (FT_BitmapGlyph)bitmap_glyph;
    FT_Library      library = FT_GLYPH( glyph )->library;


    FT_Bitmap_Done( library, &glyph->bitmap );
  }


  FT_CALLBACK_DEF( void )
  ft_bitmap_glyph_bbox( FT_Glyph  bitmap_glyph,
                        FT_BBox*  cbox )
  {
    FT_BitmapGlyph  glyph = (FT_BitmapGlyph)bitmap_glyph;


    cbox->xMin = glyph->left << 6;
    cbox->xMax = cbox->xMin + ( glyph->bitmap.width << 6 );
    cbox->yMax = glyph->top << 6;
    cbox->yMin = cbox->yMax - ( glyph->bitmap.rows << 6 );
  }


  FT_CALLBACK_TABLE_DEF
  const FT_Glyph_Class  ft_bitmap_glyph_class =
  {
    sizeof ( FT_BitmapGlyphRec ),
    FT_GLYPH_FORMAT_BITMAP,

    ft_bitmap_glyph_init,
    ft_bitmap_glyph_done,
    ft_bitmap_glyph_copy,
    0,                          /* FT_Glyph_TransformFunc */
    ft_bitmap_glyph_bbox,
    0                           /* FT_Glyph_PrepareFunc   */
  };


  /*************************************************************************/
  /*************************************************************************/
  /****                                                                 ****/
  /****   FT_OutlineGlyph support                                       ****/
  /****                                                                 ****/
  /*************************************************************************/
  /*************************************************************************/


  FT_CALLBACK_DEF( FT_Error )
  ft_outline_glyph_init( FT_Glyph      outline_glyph,
                         FT_GlyphSlot  slot )
  {
    FT_OutlineGlyph  glyph   = (FT_OutlineGlyph)outline_glyph;
    FT_Error         error   = FT_Err_Ok;
    FT_Library       library = FT_GLYPH( glyph )->library;
    FT_Outline*      source  = &slot->outline;
    FT_Outline*      target  = &glyph->outline;


    /* check format in glyph slot */
    if ( slot->format != FT_GLYPH_FORMAT_OUTLINE )
    {
      error = FT_Err_Invalid_Glyph_Format;
      goto Exit;
    }

    /* allocate new outline */
    error = FT_Outline_New( library, source->n_points, source->n_contours,
                            &glyph->outline );
    if ( error )
      goto Exit;

    FT_Outline_Copy( source, target );

  Exit:
    return error;
  }


  FT_CALLBACK_DEF( void )
  ft_outline_glyph_done( FT_Glyph  outline_glyph )
  {
    FT_OutlineGlyph  glyph = (FT_OutlineGlyph)outline_glyph;


    FT_Outline_Done( FT_GLYPH( glyph )->library, &glyph->outline );
  }


  FT_CALLBACK_DEF( FT_Error )
  ft_outline_glyph_copy( FT_Glyph  outline_source,
                         FT_Glyph  outline_target )
  {
    FT_OutlineGlyph  source  = (FT_OutlineGlyph)outline_source;
    FT_OutlineGlyph  target  = (FT_OutlineGlyph)outline_target;
    FT_Error         error;
    FT_Library       library = FT_GLYPH( source )->library;


    error = FT_Outline_New( library, source->outline.n_points,
                            source->outline.n_contours, &target->outline );
    if ( !error )
      FT_Outline_Copy( &source->outline, &target->outline );

    return error;
  }


  FT_CALLBACK_DEF( void )
  ft_outline_glyph_transform( FT_Glyph          outline_glyph,
                              const FT_Matrix*  matrix,
                              const FT_Vector*  delta )
  {
    FT_OutlineGlyph  glyph = (FT_OutlineGlyph)outline_glyph;


    if ( matrix )
      FT_Outline_Transform( &glyph->outline, matrix );

    if ( delta )
      FT_Outline_Translate( &glyph->outline, delta->x, delta->y );
  }


  FT_CALLBACK_DEF( void )
  ft_outline_glyph_bbox( FT_Glyph  outline_glyph,
                         FT_BBox*  bbox )
  {
    FT_OutlineGlyph  glyph = (FT_OutlineGlyph)outline_glyph;


    FT_Outline_Get_CBox( &glyph->outline, bbox );
  }


  FT_CALLBACK_DEF( FT_Error )
  ft_outline_glyph_prepare( FT_Glyph      outline_glyph,
                            FT_GlyphSlot  slot )
  {
    FT_OutlineGlyph  glyph = (FT_OutlineGlyph)outline_glyph;


    slot->format         = FT_GLYPH_FORMAT_OUTLINE;
    slot->outline        = glyph->outline;
    slot->outline.flags &= ~FT_OUTLINE_OWNER;

    return FT_Err_Ok;
  }


  FT_CALLBACK_TABLE_DEF
  const FT_Glyph_Class  ft_outline_glyph_class =
  {
    sizeof ( FT_OutlineGlyphRec ),
    FT_GLYPH_FORMAT_OUTLINE,

    ft_outline_glyph_init,
    ft_outline_glyph_done,
    ft_outline_glyph_copy,
    ft_outline_glyph_transform,
    ft_outline_glyph_bbox,
    ft_outline_glyph_prepare
  };


  /*************************************************************************/
  /*************************************************************************/
  /****                                                                 ****/
  /****   FT_Glyph class and API                                        ****/
  /****                                                                 ****/
  /*************************************************************************/
  /*************************************************************************/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲韩国精品一区| 国产精品久久久久永久免费观看| 亚洲国产三级在线| 欧美亚洲综合另类| 天天综合网天天综合色| 日韩午夜av电影| 91麻豆精品国产91久久久久久久久| 一个色在线综合| 欧美一区在线视频| 国产剧情av麻豆香蕉精品| 国产精品久久久久久久裸模| 色婷婷一区二区| 五月激情综合网| 久久精品亚洲乱码伦伦中文| 99国产精品国产精品毛片| 亚洲成人精品一区| 精品国产乱码91久久久久久网站| 国产成人鲁色资源国产91色综 | 国产精品久久久久婷婷二区次| 99re成人精品视频| 日韩中文字幕亚洲一区二区va在线| 日韩无一区二区| 99精品热视频| 蜜臀av一区二区在线观看| 国产欧美精品一区aⅴ影院 | 成人动漫一区二区在线| 亚洲色图第一区| 欧美成人精品3d动漫h| 成人午夜av影视| 亚洲成人午夜电影| 国产日产欧美一区| 欧美偷拍一区二区| 国产夫妻精品视频| 亚洲va中文字幕| 欧美国产视频在线| 欧美精品色一区二区三区| 国产成人免费av在线| 亚洲成精国产精品女| 中文字幕精品一区二区三区精品| 欧美精品在欧美一区二区少妇| 福利电影一区二区三区| 午夜精品久久久久久久99水蜜桃| 欧美韩日一区二区三区| 日韩精品中文字幕在线一区| 色悠悠久久综合| 国产91高潮流白浆在线麻豆| 美国av一区二区| 性欧美疯狂xxxxbbbb| 亚洲品质自拍视频| 中文字幕国产一区二区| 精品理论电影在线观看| 欧美日韩国产系列| 色哟哟日韩精品| 成人福利视频网站| 寂寞少妇一区二区三区| 奇米精品一区二区三区四区| 一区二区国产盗摄色噜噜| 国产精品欧美极品| 久久久久久久久久电影| 日韩午夜av电影| 欧美一区二区三区在线视频| 欧美三级午夜理伦三级中视频| 波多野结衣亚洲一区| 成人一区二区三区在线观看| 国产一区二区在线影院| 久久精品国产亚洲a| 免费一级欧美片在线观看| 午夜精品一区在线观看| 亚洲在线免费播放| av一本久道久久综合久久鬼色| 国产尤物一区二区在线| 精品综合免费视频观看| 男女男精品视频网| 免费在线观看视频一区| 久久精工是国产品牌吗| 久久精品国产精品亚洲精品| 人人爽香蕉精品| 蜜臀精品久久久久久蜜臀| 久久99蜜桃精品| 狠狠v欧美v日韩v亚洲ⅴ| 精品午夜久久福利影院| 国产又黄又大久久| 国产成人精品午夜视频免费| 处破女av一区二区| 99riav一区二区三区| 色婷婷亚洲婷婷| 在线观看日产精品| 欧美一区二区三区免费在线看 | 亚洲精品国久久99热| 亚洲激情成人在线| 午夜精品一区二区三区三上悠亚| 五月天中文字幕一区二区| 日本亚洲欧美天堂免费| 国产一区在线精品| 成人激情黄色小说| 在线观看91视频| 日韩限制级电影在线观看| 久久日韩精品一区二区五区| 国产精品你懂的| 亚洲图片欧美一区| 国产乱人伦偷精品视频免下载| 不卡在线观看av| 欧美视频一区在线| 精品精品国产高清一毛片一天堂| 国产午夜精品久久久久久免费视| 亚洲欧美电影一区二区| 日本在线不卡视频| 不卡视频免费播放| 欧美日韩国产一级| 国产女人18毛片水真多成人如厕 | 国产欧美va欧美不卡在线| 中文字幕在线不卡一区| 亚洲超碰精品一区二区| 激情偷乱视频一区二区三区| 97久久久精品综合88久久| 日韩视频123| 1024国产精品| 蜜桃久久久久久| 91首页免费视频| 精品久久国产字幕高潮| 一区二区三区在线免费观看| 美腿丝袜亚洲一区| av电影在线不卡| 日韩欧美国产系列| 亚洲欧美二区三区| 国产大陆a不卡| 91麻豆精品久久久久蜜臀 | 久久久精品tv| 亚洲成av人片观看| eeuss影院一区二区三区| 日韩一级免费观看| av在线不卡免费看| 精品不卡在线视频| 午夜在线成人av| av在线一区二区| 国产亚洲精品7777| 裸体在线国模精品偷拍| 欧美三级一区二区| 亚洲男人都懂的| 成人激情开心网| 国产亚洲一区二区三区四区| 奇米精品一区二区三区在线观看 | 亚洲丰满少妇videoshd| 成人午夜av影视| 久久亚洲捆绑美女| 麻豆传媒一区二区三区| 欧美色手机在线观看| 亚洲精品一二三| 成人aa视频在线观看| 久久精品人人做人人爽97| 美女视频黄 久久| 在线91免费看| 亚洲高清不卡在线观看| 91国偷自产一区二区三区观看| 中文字幕国产一区| 大陆成人av片| 国产精品麻豆99久久久久久| 国产精品综合av一区二区国产馆| 精品三级在线观看| 麻豆免费精品视频| 91精品国产一区二区三区香蕉| 亚洲一区二区五区| 欧美做爰猛烈大尺度电影无法无天| 亚洲免费av高清| 色欧美日韩亚洲| 亚洲一区二区三区视频在线播放| 91国偷自产一区二区开放时间| 伊人性伊人情综合网| 日本伦理一区二区| 亚洲综合久久久| 欧美久久久久久久久| 日韩av成人高清| 欧美精品一区二| 国产九色精品成人porny| 国产精品人人做人人爽人人添| 成人av在线网| 洋洋成人永久网站入口| 欧美日韩一区二区不卡| 日本不卡视频一二三区| 欧美电影精品一区二区| 国产乱色国产精品免费视频| 国产精品久久毛片| 色欧美片视频在线观看| 亚洲一区二区综合| 日韩精品最新网址| 丰满亚洲少妇av| 亚洲精品欧美二区三区中文字幕| 欧美三级韩国三级日本一级| 日韩不卡免费视频| 国产欧美一区二区精品性色超碰| 床上的激情91.| 亚洲一级二级在线| 日韩精品一区二区三区swag| 成人免费高清视频| 亚洲一区二区在线免费看| 欧美不卡视频一区| 99久久99久久精品免费观看| 亚洲一区二区三区四区在线免费观看 | 欧美疯狂性受xxxxx喷水图片| 久久er精品视频|