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

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

?? ahhint.c

?? a very goog book
?? C
?? 第 1 頁 / 共 3 頁
字號:
/***************************************************************************//*                                                                         *//*  ahhint.c                                                               *//*                                                                         *//*    Glyph hinter (body).                                                 *//*                                                                         *//*  Copyright 2000-2001, 2002 Catharon Productions Inc.                    *//*  Author: David Turner                                                   *//*                                                                         *//*  This file is part of the Catharon Typography Project and shall only    *//*  be used, modified, and distributed under the terms of the Catharon     *//*  Open Source License that should come with this file under the name     *//*  `CatharonLicense.txt'.  By continuing to use, modify, or distribute    *//*  this file you indicate that you have read the license and              *//*  understand and accept it fully.                                        *//*                                                                         *//*  Note that this license is compatible with the FreeType license.        *//*                                                                         *//***************************************************************************/#include <ft2build.h>#include "ahhint.h"#include "ahglyph.h"#include "ahangles.h"#include "aherrors.h"#include FT_OUTLINE_H#define FACE_GLOBALS( face )  ((AH_Face_Globals*)(face)->autohint.data)#define AH_USE_IUP  /*************************************************************************/  /*************************************************************************/  /****                                                                 ****/  /****   Hinting routines                                              ****/  /****                                                                 ****/  /*************************************************************************/  /*************************************************************************/  /* snap a given width in scaled coordinates to one of the */  /* current standard widths                                */  static FT_Pos  ah_snap_width( FT_Pos*  widths,                 FT_Int   count,                 FT_Pos   width )  {    int     n;    FT_Pos  best      = 64 + 32 + 2;    FT_Pos  reference = width;    for ( n = 0; n < count; n++ )    {      FT_Pos  w;      FT_Pos  dist;      w = widths[n];      dist = width - w;      if ( dist < 0 )        dist = -dist;      if ( dist < best )      {        best      = dist;        reference = w;      }    }    if ( width >= reference )    {      width -= 0x21;      if ( width < reference )        width = reference;    }    else    {      width += 0x21;      if ( width > reference )        width = reference;    }    return width;  }  /* align one stem edge relative to the previous stem edge */  static void  ah_align_linked_edge( AH_Hinter*  hinter,                        AH_Edge*    base_edge,                        AH_Edge*    stem_edge,                        int         vertical )  {    FT_Pos       dist    = stem_edge->opos - base_edge->opos;    AH_Globals*  globals = &hinter->globals->scaled;    FT_Pos       sign    = 1;    if ( dist < 0 )    {      dist = -dist;      sign = -1;    }    if ( vertical )    {      dist = ah_snap_width( globals->heights, globals->num_heights, dist );      /* in the case of vertical hinting, always round */      /* the stem heights to integer pixels            */      if ( dist >= 64 )        dist = ( dist + 16 ) & -64;      else        dist = 64;    }    else    {      dist = ah_snap_width( globals->widths,  globals->num_widths, dist );      if ( hinter->flags & ah_hinter_monochrome )      {        /* monochrome horizontal hinting: snap widths to integer pixels */        /* with a different threshold                                   */        if ( dist < 64 )          dist = 64;        else          dist = ( dist + 32 ) & -64;      }      else      {        /* for horizontal anti-aliased hinting, we adopt a more subtle */        /* approach: we strengthen small stems, round stems whose size */        /* is between 1 and 2 pixels to an integer, otherwise nothing  */        if ( dist < 48 )          dist = ( dist + 64 ) >> 1;        else if ( dist < 128 )          dist = ( dist + 42 ) & -64;        else          /* XXX: round otherwise, prevent color fringes in LCD mode */          dist = ( dist + 32 ) & -64;      }    }    stem_edge->pos = base_edge->pos + sign * dist;  }  static void  ah_align_serif_edge( AH_Hinter*  hinter,                       AH_Edge*    base,                       AH_Edge*    serif,                       int         vertical )  {    FT_Pos  dist;    FT_Pos  sign = 1;    FT_UNUSED( hinter );    dist = serif->opos - base->opos;    if ( dist < 0 )    {      dist = -dist;      sign = -1;    }    /* do not strengthen serifs */    if ( base->flags & ah_edge_done )    {      if ( dist >= 64 )        dist = (dist+8) & -64;      else if ( dist <= 32 && !vertical )        dist = ( dist + 33 ) >> 1;      else        dist = 0;    }    serif->pos = base->pos + sign * dist;  }  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /****                                                                 ****/  /****       E D G E   H I N T I N G                                   ****/  /****                                                                 ****/  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /* Another alternative edge hinting algorithm */  static void  ah_hint_edges_3( AH_Hinter*  hinter )  {    AH_Edge*     edges;    AH_Edge*     edge_limit;    AH_Outline*  outline = hinter->glyph;    FT_Int       dimension;    edges      = outline->horz_edges;    edge_limit = edges + outline->num_hedges;    for ( dimension = 1; dimension >= 0; dimension-- )    {      AH_Edge*  edge;      AH_Edge*  anchor = 0;      int       has_serifs = 0;      if ( ah_debug_disable_vert && !dimension )        goto Next_Dimension;      if ( ah_debug_disable_horz && dimension )        goto Next_Dimension;      /* we begin by aligning all stems relative to the blue zone */      /* if needed -- that's only for horizontal edges            */      if ( dimension )      {        for ( edge = edges; edge < edge_limit; edge++ )        {          FT_Pos*  blue;          AH_Edge  *edge1, *edge2;          if ( edge->flags & ah_edge_done )            continue;          blue  = edge->blue_edge;          edge1 = 0;          edge2 = edge->link;          if ( blue )          {            edge1 = edge;          }          else if (edge2 && edge2->blue_edge)          {            blue  = edge2->blue_edge;            edge1 = edge2;            edge2 = edge;          }          if ( !edge1 )            continue;          edge1->pos    = blue[0];          edge1->flags |= ah_edge_done;          if ( edge2 && !edge2->blue_edge )          {            ah_align_linked_edge( hinter, edge1, edge2, dimension );            edge2->flags |= ah_edge_done;          }          if ( !anchor )            anchor = edge;        }      }      /* now, we will align all stem edges, trying to maintain the */      /* relative order of stems in the glyph..                    */      for ( edge = edges; edge < edge_limit; edge++ )      {        AH_Edge  *edge2;        if ( edge->flags & ah_edge_done )          continue;        /* skip all non-stem edges */        edge2 = edge->link;        if ( !edge2 )        {          has_serifs++;          continue;        }        /* now, align the stem */        /* this should not happen, but it's better to be safe.. */        if ( edge2->blue_edge || edge2 < edge )        {#if 0          printf( "strange blue alignement, edge %d to %d\n",                  edge - edges, edge2 - edges );#endif          ah_align_linked_edge( hinter, edge2, edge, dimension );          edge->flags |= ah_edge_done;          continue;        }        {          FT_Bool  min = 0;          FT_Pos   delta;          if ( !anchor )          {            edge->pos = ( edge->opos + 32 ) & -64;            anchor    = edge;          }          else            edge->pos = anchor->pos +                        ( ( edge->opos - anchor->opos + 32 ) & -64 );          edge->flags |= ah_edge_done;          if ( edge > edges && edge->pos < edge[-1].pos )          {            edge->pos = edge[-1].pos;            min       = 1;          }          ah_align_linked_edge( hinter, edge, edge2, dimension );          delta = 0;          if ( edge2 + 1 < edge_limit        &&               edge2[1].flags & ah_edge_done )            delta = edge2[1].pos - edge2->pos;          if ( delta < 0 )          {            edge2->pos += delta;            if ( !min )              edge->pos += delta;          }          edge2->flags |= ah_edge_done;        }      }      if ( !has_serifs )        goto Next_Dimension;      /* now, hint the remaining edges (serifs and single) in order */      /* to complete our processing                                 */      for ( edge = edges; edge < edge_limit; edge++ )      {        if ( edge->flags & ah_edge_done )          continue;        if ( edge->serif )        {          ah_align_serif_edge( hinter, edge->serif, edge, dimension );        }        else if ( !anchor )        {          edge->pos = ( edge->opos + 32 ) & -64;          anchor    = edge;        }        else          edge->pos = anchor->pos +                      ( ( edge->opos-anchor->opos + 32 ) & -64 );        edge->flags |= ah_edge_done;        if ( edge > edges && edge->pos < edge[-1].pos )          edge->pos = edge[-1].pos;        if ( edge + 1 < edge_limit        &&             edge[1].flags & ah_edge_done &&             edge->pos > edge[1].pos      )          edge->pos = edge[1].pos;      }    Next_Dimension:      edges      = outline->vert_edges;      edge_limit = edges + outline->num_vedges;    }  }  FT_LOCAL_DEF( void )  ah_hinter_hint_edges( AH_Hinter*  hinter,                        FT_Bool     no_horz_edges,                        FT_Bool     no_vert_edges )  {#if 0    ah_debug_disable_horz = no_horz_edges;    ah_debug_disable_vert = no_vert_edges;#else    FT_UNUSED( no_horz_edges );    FT_UNUSED( no_vert_edges );#endif    /* AH_Interpolate_Blue_Edges( hinter ); -- doesn't seem to help      */    /* reduce the problem of the disappearing eye in the `e' of Times... */    /* also, creates some artifacts near the blue zones?                 */    {      ah_hint_edges_3( hinter );#if 0      /* outline optimizer removed temporarily */      if ( hinter->flags & ah_hinter_optimize )      {        AH_Optimizer  opt;        if ( !AH_Optimizer_Init( &opt, hinter->glyph, hinter->memory ) )        {          AH_Optimizer_Compute( &opt );          AH_Optimizer_Done( &opt );        }      }#endif    }  }  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /****                                                                 ****/  /****       P O I N T   H I N T I N G                                 ****/  /****                                                                 ****/  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  static void  ah_hinter_align_edge_points( AH_Hinter*  hinter )  {    AH_Outline*  outline = hinter->glyph;    AH_Edge*     edges;    AH_Edge*     edge_limit;    FT_Int       dimension;    edges      = outline->horz_edges;    edge_limit = edges + outline->num_hedges;    for ( dimension = 1; dimension >= 0; dimension-- )    {      AH_Edge*   edge;      edge = edges;      for ( ; edge < edge_limit; edge++ )      {        /* move the points of each segment     */        /* in each edge to the edge's position */        AH_Segment*  seg = edge->first;        do        {          AH_Point*  point = seg->first;          for (;;)          {            if ( dimension )            {              point->y      = edge->pos;              point->flags |= ah_flag_touch_y;            }            else            {              point->x      = edge->pos;              point->flags |= ah_flag_touch_x;            }            if ( point == seg->last )              break;            point = point->next;          }          seg = seg->edge_next;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区在线观看免费视频| 在线视频你懂得一区二区三区| 欧美精品v日韩精品v韩国精品v| 自拍偷拍亚洲综合| 韩国精品主播一区二区在线观看 | 岛国精品一区二区| 久久久天堂av| 岛国精品在线播放| 国产精品久久毛片| 欧美日韩高清不卡| 日韩综合小视频| 精品福利在线导航| 国产成人啪免费观看软件 | 日韩精品一区二区三区中文不卡| 经典三级视频一区| 亚洲欧美一区二区视频| 欧美日本韩国一区| 国产成人激情av| 亚洲一区二区视频在线观看| 欧美一二三四区在线| eeuss鲁一区二区三区| 午夜精品一区二区三区三上悠亚| 久久午夜色播影院免费高清| 91啪在线观看| 国产在线不卡一区| 亚洲综合久久久久| 欧美韩国日本综合| 日韩欧美国产一区在线观看| 欧美在线一区二区| 99这里都是精品| 韩国av一区二区| 日韩国产在线一| 亚洲与欧洲av电影| 亚洲欧美福利一区二区| 国产三区在线成人av| 精品久久一区二区| 欧美日韩国产小视频在线观看| 国产一本一道久久香蕉| 日韩影视精彩在线| 亚洲电影在线免费观看| 亚洲欧美日韩在线播放| 日本一区二区三区国色天香 | 亚洲一区二区三区在线看| 国产精品欧美精品| 国产女人aaa级久久久级 | 91色乱码一区二区三区| 国产精品一区三区| 青青青爽久久午夜综合久久午夜| 亚洲乱码中文字幕| 欧美国产成人精品| 欧美激情一区二区三区不卡 | 日韩电影在线免费看| 亚洲va欧美va人人爽| 一区二区在线观看av| 一区二区三区产品免费精品久久75| 国产精品三级在线观看| 国产欧美一区二区在线观看| 中文字幕久久午夜不卡| 亚洲人成影院在线观看| 中文字幕一区二区三区在线播放 | 国产成人在线观看| 丁香另类激情小说| 不卡大黄网站免费看| 欧美综合亚洲图片综合区| 欧美一区二区三区在线视频| 精品国产1区二区| 亚洲一区日韩精品中文字幕| 亚洲激情男女视频| 免费在线观看一区二区三区| 久久99精品国产麻豆婷婷洗澡| 激情成人综合网| 91一区一区三区| 7777精品伊人久久久大香线蕉| 日韩精品一区在线| 一区二区三区日韩| 久久精品久久精品| 色综合天天狠狠| 久久综合狠狠综合| 午夜国产精品一区| 国产成人在线免费观看| 日韩精品一区二区在线观看| 亚洲人精品午夜| 国产91丝袜在线播放九色| 欧美日韩aaaaaa| 一二三四区精品视频| 东方欧美亚洲色图在线| 精品少妇一区二区三区在线播放| 亚洲精品国产精品乱码不99| 国产乱子伦视频一区二区三区| 91精品国产色综合久久不卡电影| 国产精品青草综合久久久久99| 国产一区999| 精品国产一二三区| 欧美aaaaa成人免费观看视频| 日本韩国欧美一区二区三区| 国产精品理论在线观看| 国产成a人无v码亚洲福利| 久久久精品人体av艺术| 国产精品伊人色| 国产精品免费看片| 99久久伊人网影院| 中文字幕欧美一| 91久久精品一区二区| 亚洲三级在线观看| 精品视频一区二区不卡| 首页亚洲欧美制服丝腿| 欧美大片日本大片免费观看| 久久99精品久久久久久| 国产精品三级电影| 99国产精品一区| 亚洲福利视频三区| 精品精品欲导航| 97久久超碰国产精品| 国产调教视频一区| 亚洲国产精品国自产拍av| 国产精品自拍网站| 亚洲国产精品久久人人爱| 欧美成人猛片aaaaaaa| 99在线精品免费| 毛片av一区二区| 亚洲一区在线观看视频| 久久影院午夜论| 91精品婷婷国产综合久久| 国产高清久久久久| 蜜臀久久久99精品久久久久久| 亚洲国产精品精华液2区45| 日韩一区二区视频在线观看| 91在线你懂得| 国产99精品视频| 国产高清在线精品| 麻豆精品国产传媒mv男同| 亚洲午夜视频在线| 亚洲视频一区在线| 中文字幕亚洲一区二区av在线 | 高潮精品一区videoshd| 麻豆91在线播放免费| 日日摸夜夜添夜夜添亚洲女人| 国产精品国产三级国产普通话三级 | 一区二区三区精品| 亚洲人精品一区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 精品国产制服丝袜高跟| 日韩一区二区精品| 日韩免费看网站| 久久亚洲影视婷婷| 久久久噜噜噜久久人人看| 日韩欧美专区在线| 欧美成人精品1314www| 日韩精品在线一区二区| 久久久综合激的五月天| www成人在线观看| 国产精品卡一卡二| 亚洲精品成人精品456| 午夜精品福利一区二区三区蜜桃| 亚洲国产另类av| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品一二三在| 91久久线看在观草草青青| 欧美日韩精品电影| 欧美一级二级三级乱码| 国产喂奶挤奶一区二区三区| 中文字幕一区二区三区蜜月| 亚洲第一福利一区| 国产制服丝袜一区| 91在线porny国产在线看| 88在线观看91蜜桃国自产| 久久伊人中文字幕| 亚洲18影院在线观看| 国产精品一区二区在线播放 | 亚洲一区二区在线免费观看视频 | 亚洲一区二区视频在线| 久久精品国产亚洲a| 欧美日韩中文另类| 中文字幕一区日韩精品欧美| 久久草av在线| 欧美体内she精视频| 国产精品伦理一区二区| 寂寞少妇一区二区三区| 91精品国产91久久综合桃花| 中文字幕日韩一区二区| 国产成人av一区二区三区在线| 欧美日韩精品久久久| 亚洲一区欧美一区| 色婷婷久久久综合中文字幕| 国产精品免费人成网站| 国产精品一区在线| 久久久精品综合| 国产不卡视频一区| 国产日韩欧美精品一区| 美女在线视频一区| 精品国产一区二区三区久久影院| 日韩中文字幕1| 精品国产乱码久久久久久夜甘婷婷| 性感美女极品91精品| 欧美三级电影网| 天天综合色天天综合色h| 欧美精品777| 久久99久久久久| 国产精品嫩草影院av蜜臀| 不卡高清视频专区|