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

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

?? afhints.c

?? QT 開發環境里面一個很重要的文件
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************************************//*                                                                         *//*  afhints.c                                                              *//*                                                                         *//*    Auto-fitter hinting routines (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 "afhints.h"#include "aferrors.h"  FT_LOCAL_DEF( FT_Error )  af_axis_hints_new_segment( AF_AxisHints  axis,                             FT_Memory     memory,                             AF_Segment   *asegment )  {    FT_Error    error   = AF_Err_Ok;    AF_Segment  segment = NULL;    if ( axis->num_segments >= axis->max_segments )    {      FT_Int  old_max = axis->max_segments;      FT_Int  new_max = old_max;      FT_Int  big_max = FT_INT_MAX / sizeof ( *segment );      if ( old_max >= big_max )      {        error = AF_Err_Out_Of_Memory;        goto Exit;      }      new_max += ( new_max >> 2 ) + 4;      if ( new_max < old_max || new_max > big_max )        new_max = big_max;      if ( FT_RENEW_ARRAY( axis->segments, old_max, new_max ) )        goto Exit;      axis->max_segments = new_max;    }    segment = axis->segments + axis->num_segments++;    FT_ZERO( segment );  Exit:    *asegment = segment;    return error;  }  FT_LOCAL( FT_Error )  af_axis_hints_new_edge( AF_AxisHints  axis,                          FT_Int        fpos,                          FT_Memory     memory,                          AF_Edge      *aedge )  {    FT_Error  error = AF_Err_Ok;    AF_Edge   edge  = NULL;    AF_Edge   edges;    if ( axis->num_edges >= axis->max_edges )    {      FT_Int  old_max = axis->max_edges;      FT_Int  new_max = old_max;      FT_Int  big_max = FT_INT_MAX / sizeof ( *edge );      if ( old_max >= big_max )      {        error = AF_Err_Out_Of_Memory;        goto Exit;      }      new_max += ( new_max >> 2 ) + 4;      if ( new_max < old_max || new_max > big_max )        new_max = big_max;      if ( FT_RENEW_ARRAY( axis->edges, old_max, new_max ) )        goto Exit;      axis->max_edges = new_max;    }    edges = axis->edges;    edge  = edges + axis->num_edges;    while ( edge > edges && edge[-1].fpos > fpos )    {      edge[0] = edge[-1];      edge--;    }    axis->num_edges++;    FT_ZERO( edge );    edge->fpos = (FT_Short)fpos;  Exit:    *aedge = edge;    return error;  }#ifdef AF_DEBUG#include <stdio.h>  static const char*  af_dir_str( AF_Direction  dir )  {    const char*  result;    switch ( dir )    {    case AF_DIR_UP:      result = "up";      break;    case AF_DIR_DOWN:      result = "down";      break;    case AF_DIR_LEFT:      result = "left";      break;    case AF_DIR_RIGHT:      result = "right";      break;    default:      result = "none";    }    return result;  }#define AF_INDEX_NUM( ptr, base )  ( (ptr) ? ( (ptr) - (base) ) : -1 )  void  af_glyph_hints_dump_points( AF_GlyphHints  hints )  {    AF_Point  points = hints->points;    AF_Point  limit  = points + hints->num_points;    AF_Point  point;    printf( "Table of points:\n" );    printf(   "  [ index |  xorg |  yorg |  xscale |  yscale "              "|  xfit  |  yfit  |  flags ]\n" );    for ( point = points; point < limit; point++ )    {      printf( "  [ %5d | %5d | %5d | %-5.2f | %-5.2f "              "| %-5.2f | %-5.2f | %c%c%c%c%c%c ]\n",              point - points,              point->fx,              point->fy,              point->ox/64.0,              point->oy/64.0,              point->x/64.0,              point->y/64.0,              ( point->flags & AF_FLAG_WEAK_INTERPOLATION ) ? 'w' : ' ',              ( point->flags & AF_FLAG_INFLECTION )         ? 'i' : ' ',              ( point->flags & AF_FLAG_EXTREMA_X )          ? '<' : ' ',              ( point->flags & AF_FLAG_EXTREMA_Y )          ? 'v' : ' ',              ( point->flags & AF_FLAG_ROUND_X )            ? '(' : ' ',              ( point->flags & AF_FLAG_ROUND_Y )            ? 'u' : ' ');    }    printf( "\n" );  }  /* A function to dump the array of linked segments. */  void  af_glyph_hints_dump_segments( AF_GlyphHints  hints )  {    AF_Point  points = hints->points;    FT_Int    dimension;    for ( dimension = 1; dimension >= 0; dimension-- )    {      AF_AxisHints  axis     = &hints->axis[dimension];      AF_Segment    segments = axis->segments;      AF_Segment    limit    = segments + axis->num_segments;      AF_Segment    seg;      printf ( "Table of %s segments:\n",               dimension == AF_DIMENSION_HORZ ? "vertical" : "horizontal" );      printf ( "  [ index |  pos |  dir  | link | serif |"               " numl | first | start ]\n" );      for ( seg = segments; seg < limit; seg++ )      {        printf ( "  [ %5d | %4d | %5s | %4d | %5d | %4d | %5d | %5d ]\n",                 seg - segments,                 (int)seg->pos,                 af_dir_str( seg->dir ),                 AF_INDEX_NUM( seg->link, segments ),                 AF_INDEX_NUM( seg->serif, segments ),                 (int)seg->num_linked,                 seg->first - points,                 seg->last - points );      }      printf( "\n" );    }  }  void  af_glyph_hints_dump_edges( AF_GlyphHints  hints )  {    FT_Int  dimension;    for ( dimension = 1; dimension >= 0; dimension-- )    {      AF_AxisHints  axis  = &hints->axis[dimension];      AF_Edge       edges = axis->edges;      AF_Edge       limit = edges + axis->num_edges;      AF_Edge       edge;      /*       *  note: AF_DIMENSION_HORZ corresponds to _vertical_ edges       *        since they have constant a X coordinate.       */      printf ( "Table of %s edges:\n",               dimension == AF_DIMENSION_HORZ ? "vertical" : "horizontal" );      printf ( "  [ index |  pos |  dir  | link |"               " serif | blue | opos  |  pos  ]\n" );      for ( edge = edges; edge < limit; edge++ )      {        printf ( "  [ %5d | %4d | %5s | %4d |"                 " %5d |   %c  | %5.2f | %5.2f ]\n",                 edge - edges,                 (int)edge->fpos,                 af_dir_str( edge->dir ),                 AF_INDEX_NUM( edge->link, edges ),                 AF_INDEX_NUM( edge->serif, edges ),                 edge->blue_edge ? 'y' : 'n',                 edge->opos / 64.0,                 edge->pos / 64.0 );      }      printf( "\n" );    }  }#endif /* AF_DEBUG */  /* compute the direction value of a given vector */  FT_LOCAL_DEF( AF_Direction )  af_direction_compute( FT_Pos  dx,                        FT_Pos  dy )  {#if 1    AF_Direction  dir = AF_DIR_NONE;    /* atan(1/12) == 4.7 degrees */    if ( dx < 0 )    {      if ( dy < 0 )      {        if ( -dx * 12 < -dy )          dir = AF_DIR_DOWN;        else if ( -dy * 12 < -dx )          dir = AF_DIR_LEFT;      }      else /* dy >= 0 */      {        if ( -dx * 12 < dy )          dir = AF_DIR_UP;        else if ( dy * 12 < -dx )          dir = AF_DIR_LEFT;      }    }    else /* dx >= 0 */    {      if ( dy < 0 )      {        if ( dx * 12 < -dy )          dir = AF_DIR_DOWN;        else if ( -dy * 12 < dx )          dir = AF_DIR_RIGHT;      }      else  /* dy >= 0 */      {        if ( dx * 12 < dy )          dir = AF_DIR_UP;        else if ( dy * 12 < dx )          dir = AF_DIR_RIGHT;      }    }    return dir;#else /* 0 */    AF_Direction  dir;    FT_Pos        ax = FT_ABS( dx );    FT_Pos        ay = FT_ABS( dy );    dir = AF_DIR_NONE;    /* atan(1/12) == 4.7 degrees */    /* test for vertical direction */    if ( ax * 12 < ay )    {      dir = dy > 0 ? AF_DIR_UP : AF_DIR_DOWN;    }    /* test for horizontal direction */    else if ( ay * 12 < ax )    {      dir = dx > 0 ? AF_DIR_RIGHT : AF_DIR_LEFT;    }    return dir;#endif /* 0 */  }  /* compute all inflex points in a given glyph */  static void  af_glyph_hints_compute_inflections( AF_GlyphHints  hints )  {    AF_Point*  contour       = hints->contours;    AF_Point*  contour_limit = contour + hints->num_contours;    /* do each contour separately */    for ( ; contour < contour_limit; contour++ )    {      AF_Point  point = contour[0];      AF_Point  first = point;      AF_Point  start = point;      AF_Point  end   = point;      AF_Point  before;      AF_Point  after;      AF_Angle  angle_in, angle_seg, angle_out;      AF_Angle  diff_in, diff_out;      FT_Int    finished = 0;      /* compute first segment in contour */      first = point;      start = end = first;      do      {        end = end->next;        if ( end == first )          goto Skip;      } while ( end->fx == first->fx && end->fy == first->fy );      angle_seg = af_angle_atan( end->fx - start->fx,                                 end->fy - start->fy );      /* extend the segment start whenever possible */      before = start;      do      {        do        {          start  = before;          before = before->prev;          if ( before == first )            goto Skip;        } while ( before->fx == start->fx && before->fy == start->fy );        angle_in = af_angle_atan( start->fx - before->fx,                                  start->fy - before->fy );      } while ( angle_in == angle_seg );      first = start;      AF_ANGLE_DIFF( diff_in, angle_in, angle_seg );      /* now, process all segments in the contour */      do      {        /* first, extend current segment's end whenever possible */        after = end;        do        {          do          {            end   = after;            after = after->next;            if ( after == first )              finished = 1;          } while ( end->fx == after->fx && end->fy == after->fy );          angle_out = af_angle_atan( after->fx - end->fx,                                     after->fy - end->fy );        } while ( angle_out == angle_seg );        AF_ANGLE_DIFF( diff_out, angle_seg, angle_out );        if ( ( diff_in ^ diff_out ) < 0 )        {          /* diff_in and diff_out have different signs, we have */          /* inflection points here...                          */          do          {            start->flags |= AF_FLAG_INFLECTION;            start = start->next;          } while ( start != end );          start->flags |= AF_FLAG_INFLECTION;        }        start     = end;        end       = after;        angle_seg = angle_out;        diff_in   = diff_out;      } while ( !finished );    Skip:      ;    }  }  FT_LOCAL_DEF( void )  af_glyph_hints_init( AF_GlyphHints  hints,                       FT_Memory      memory )  {    FT_ZERO( hints );    hints->memory = memory;  }  FT_LOCAL_DEF( void )  af_glyph_hints_done( AF_GlyphHints  hints )  {    if ( hints && hints->memory )    {      FT_Memory  memory = hints->memory;      int        dim;      /*       *  note that we don't need to free the segment and edge       *  buffers, since they are really within the hints->points array       */      for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )      {        AF_AxisHints  axis = &hints->axis[dim];        axis->num_segments = 0;        axis->max_segments = 0;        FT_FREE( axis->segments );        axis->num_edges    = 0;        axis->max_edges    = 0;        FT_FREE( axis->edges );      }      FT_FREE( hints->contours );      hints->max_contours = 0;      hints->num_contours = 0;      FT_FREE( hints->points );      hints->num_points = 0;      hints->max_points = 0;      hints->memory = NULL;    }  }  FT_LOCAL_DEF( void )  af_glyph_hints_rescale( AF_GlyphHints     hints,                          AF_ScriptMetrics  metrics )  {    hints->metrics      = metrics;    hints->scaler_flags = metrics->scaler.flags;  }  FT_LOCAL_DEF( FT_Error )  af_glyph_hints_reload( AF_GlyphHints  hints,                         FT_Outline*    outline )  {    FT_Error   error   = AF_Err_Ok;    AF_Point   points;    FT_UInt    old_max, new_max;    FT_Fixed   x_scale = hints->x_scale;    FT_Fixed   y_scale = hints->y_scale;    FT_Pos     x_delta = hints->x_delta;    FT_Pos     y_delta = hints->y_delta;    FT_Memory  memory  = hints->memory;    hints->num_points   = 0;    hints->num_contours = 0;    hints->axis[0].num_segments = 0;    hints->axis[0].num_edges    = 0;    hints->axis[1].num_segments = 0;    hints->axis[1].num_edges    = 0;    /* first of all, reallocate the contours array when necessary */    new_max = (FT_UInt)outline->n_contours;    old_max = hints->max_contours;    if ( new_max > old_max )    {      new_max = ( new_max + 3 ) & ~3;      if ( FT_RENEW_ARRAY( hints->contours, old_max, new_max ) )        goto Exit;      hints->max_contours = new_max;    }    /*     *  then reallocate the points arrays if necessary --     *  note that we reserve two additional point positions, used to     *  hint metrics appropriately     */    new_max = (FT_UInt)( outline->n_points + 2 );    old_max = hints->max_points;    if ( new_max > old_max )    {      new_max = ( new_max + 2 + 7 ) & ~7;      if ( FT_RENEW_ARRAY( hints->points, old_max, new_max ) )        goto Exit;      hints->max_points = new_max;    }    hints->num_points   = outline->n_points;    hints->num_contours = outline->n_contours;    /* We can't rely on the value of `FT_Outline.flags' to know the fill   */    /* direction used for a glyph, given that some fonts are broken (e.g., */    /* the Arphic ones).  We thus recompute it each time we need to.       */    /*                                                                     */    hints->axis[AF_DIMENSION_HORZ].major_dir = AF_DIR_UP;    hints->axis[AF_DIMENSION_VERT].major_dir = AF_DIR_LEFT;    if ( FT_Outline_Get_Orientation( outline ) == FT_ORIENTATION_POSTSCRIPT )    {      hints->axis[AF_DIMENSION_HORZ].major_dir = AF_DIR_DOWN;      hints->axis[AF_DIMENSION_VERT].major_dir = AF_DIR_RIGHT;    }    hints->x_scale = x_scale;    hints->y_scale = y_scale;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
裸体歌舞表演一区二区| 日韩视频免费观看高清完整版在线观看| 中文字幕精品—区二区四季| 色综合久久久久久久久| 一区二区在线观看免费| 色综合久久88色综合天天免费| 亚洲成人在线网站| 欧美一区二区成人6969| 成人午夜在线免费| 午夜精品久久久久久久99樱桃| 久久久精品蜜桃| 欧美亚洲一区二区在线观看| 国产麻豆成人精品| 亚洲成人福利片| 国产精品麻豆欧美日韩ww| 欧美日韩在线亚洲一区蜜芽| 国产精品一区一区三区| 亚洲自拍欧美精品| 精品国产制服丝袜高跟| 色88888久久久久久影院野外| 久久精品99久久久| 亚洲综合免费观看高清完整版| 久久精品无码一区二区三区| 国产无一区二区| 麻豆91免费观看| 国产精品久久久久久久久搜平片 | 日韩综合小视频| 精品欧美一区二区三区精品久久| 91免费版在线| 国产精品一二三区| 美洲天堂一区二卡三卡四卡视频| 亚洲久草在线视频| 国产亚洲一本大道中文在线| 制服.丝袜.亚洲.中文.综合| 95精品视频在线| 精品一区二区三区视频 | 亚洲婷婷在线视频| 久久欧美一区二区| 日韩欧美一区二区久久婷婷| 欧美日韩亚洲另类| 国产成人在线色| 天堂av在线一区| 亚洲国产精品自拍| 亚洲欧美日韩一区二区三区在线观看| 国产欧美一区在线| 欧美视频你懂的| 国内不卡的二区三区中文字幕| 日本亚洲免费观看| 毛片av一区二区| 亚洲精选在线视频| 综合亚洲深深色噜噜狠狠网站| 国产人成亚洲第一网站在线播放| 91麻豆精品久久久久蜜臀| 美女视频黄a大片欧美| 欧美国产日产图区| 久久精品人人做| 久久久久久久久久久黄色| 欧美zozo另类异族| 欧美草草影院在线视频| 欧美成人福利视频| 久久综合色婷婷| 91精品国产黑色紧身裤美女| 欧美在线一二三| 欧美日韩国产色站一区二区三区| 欧美日韩久久不卡| 欧美一二三四区在线| 日韩欧美一级二级| 久久婷婷久久一区二区三区| 欧美精品一区二区三区久久久 | 国内久久精品视频| 国产一区二区福利| 精品一区二区影视| 麻豆91在线播放免费| 国产精品资源在线观看| 国产成人精品一区二| av动漫一区二区| 99视频一区二区| 在线亚洲精品福利网址导航| 欧美日本一区二区在线观看| 日韩欧美国产麻豆| 国产欧美精品区一区二区三区| 中文字幕亚洲一区二区av在线| 国产精品女同一区二区三区| 国产精品丝袜一区| 亚洲综合在线五月| 人妖欧美一区二区| 免费在线看成人av| 国产亚洲一区二区三区四区 | 欧美天天综合网| 欧美一区二区三区免费观看视频 | 欧美一区二区三区人| 精品免费国产一区二区三区四区| 国产午夜精品理论片a级大结局| 中文字幕亚洲区| 亚洲444eee在线观看| 精品亚洲国产成人av制服丝袜| 粉嫩欧美一区二区三区高清影视| 91麻豆免费看片| 日韩一区二区在线观看视频播放| 国产三级精品三级| 一区二区三区四区不卡视频| 美国三级日本三级久久99| 成人一区二区三区中文字幕| 欧美三区在线观看| 国产蜜臀97一区二区三区| 亚洲一本大道在线| 国产精品99久久久久久似苏梦涵| 欧美午夜不卡在线观看免费| 91精品国产综合久久久蜜臀粉嫩 | 国产精品网站导航| 亚洲午夜在线观看视频在线| 免费成人在线网站| 丁香婷婷深情五月亚洲| 国产成人精品免费看| 91麻豆国产福利精品| 337p亚洲精品色噜噜| 久久综合丝袜日本网| 亚洲精品成人a在线观看| 日本怡春院一区二区| 日本韩国欧美国产| 中文字幕欧美激情一区| 奇米777欧美一区二区| 一道本成人在线| 久久久99精品免费观看不卡| 午夜av一区二区三区| 99r精品视频| 国产欧美一区二区精品久导航| 日本色综合中文字幕| 高清成人在线观看| 欧美日韩性生活| 亚洲欧美激情视频在线观看一区二区三区 | 麻豆成人在线观看| 成人妖精视频yjsp地址| 69p69国产精品| 亚洲大尺度视频在线观看| 男女激情视频一区| 亚洲人成影院在线观看| 丰满白嫩尤物一区二区| 欧美一区二区三区系列电影| 亚洲激情男女视频| 国产69精品久久99不卡| 欧美日韩一级片在线观看| 亚洲精品中文字幕乱码三区| 国产乱国产乱300精品| 91精品在线麻豆| 日韩国产高清在线| 91精品久久久久久久91蜜桃| 亚洲综合色成人| 成人污视频在线观看| 久久尤物电影视频在线观看| 久久se精品一区二区| 日韩欧美国产三级电影视频| 蜜臂av日日欢夜夜爽一区| 欧美电影免费观看高清完整版| 美日韩一区二区| 精品91自产拍在线观看一区| 免费看欧美美女黄的网站| 91精品福利在线一区二区三区| 日日骚欧美日韩| 日韩视频一区二区三区在线播放| 男女视频一区二区| 精品国产乱码久久久久久闺蜜| 经典三级视频一区| 国产欧美日韩另类视频免费观看| 国产河南妇女毛片精品久久久| 国产欧美va欧美不卡在线| 国产69精品久久99不卡| 国产精品久久久久久久久久免费看| jlzzjlzz欧美大全| 亚洲国产精品麻豆| 日韩三级电影网址| 国产乱码精品一区二区三区av | 亚洲乱码国产乱码精品精小说| 91蜜桃视频在线| 亚州成人在线电影| 91精品国产色综合久久不卡电影 | 欧美体内she精高潮| 免费高清在线视频一区·| 精品粉嫩超白一线天av| 成人性生交大片免费看中文| 综合网在线视频| 666欧美在线视频| 国产激情精品久久久第一区二区 | 91浏览器打开| 亚洲女人小视频在线观看| 欧美人狂配大交3d怪物一区| 国内精品久久久久影院色| 亚洲丝袜制服诱惑| 欧美妇女性影城| 一区二区三区小说| 精品乱码亚洲一区二区不卡| 在线影院国内精品| 成人动漫一区二区在线| 玖玖九九国产精品| 一区二区三区影院| 国产精品二三区| 久久亚洲精品小早川怜子| 欧美日韩精品欧美日韩精品一综合| 国产成人一级电影| 免费成人av资源网|