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

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

?? ftgrays.c

?? 智能設備中PDF閱讀器的源碼!用于windows mobile2003或者WM5以上
?? C
?? 第 1 頁 / 共 4 頁
字號:
      {
        for ( j = i - gap; ; j -= gap )
        {
          PCell  k = j + gap;


          if ( LESS_THAN( j, k ) )
            break;

          SWAP_CELLS( j, k, temp );

          if ( j < cells + gap )
            break;
        }
      }
    }
  }

#endif /* SHELL_SORT */


#ifdef QUICK_SORT

  /* This is a non-recursive quicksort that directly process our cells     */
  /* array.  It should be faster than calling the stdlib qsort(), and we   */
  /* can even tailor our insertion threshold...                            */

#define QSORT_THRESHOLD  9  /* below this size, a sub-array will be sorted */
                            /* through a normal insertion sort             */

  static void
  gray_quick_sort( PCell  cells,
                   int    count )
  {
    PCell   stack[40];  /* should be enough ;-) */
    PCell*  top;        /* top of stack */
    PCell   base, limit;
    TCell   temp;


    limit = cells + count;
    base  = cells;
    top   = stack;

    for (;;)
    {
      int    len = (int)( limit - base );
      PCell  i, j, pivot;


      if ( len > QSORT_THRESHOLD )
      {
        /* we use base + len/2 as the pivot */
        pivot = base + len / 2;
        SWAP_CELLS( base, pivot, temp );

        i = base + 1;
        j = limit - 1;

        /* now ensure that *i <= *base <= *j */
        if ( LESS_THAN( j, i ) )
          SWAP_CELLS( i, j, temp );

        if ( LESS_THAN( base, i ) )
          SWAP_CELLS( base, i, temp );

        if ( LESS_THAN( j, base ) )
          SWAP_CELLS( base, j, temp );

        for (;;)
        {
          do i++; while ( LESS_THAN( i, base ) );
          do j--; while ( LESS_THAN( base, j ) );

          if ( i > j )
            break;

          SWAP_CELLS( i, j, temp );
        }

        SWAP_CELLS( base, j, temp );

        /* now, push the largest sub-array */
        if ( j - base > limit - i )
        {
          top[0] = base;
          top[1] = j;
          base   = i;
        }
        else
        {
          top[0] = i;
          top[1] = limit;
          limit  = j;
        }
        top += 2;
      }
      else
      {
        /* the sub-array is small, perform insertion sort */
        j = base;
        i = j + 1;

        for ( ; i < limit; j = i, i++ )
        {
          for ( ; LESS_THAN( j + 1, j ); j-- )
          {
            SWAP_CELLS( j + 1, j, temp );
            if ( j == base )
              break;
          }
        }
        if ( top > stack )
        {
          top  -= 2;
          base  = top[0];
          limit = top[1];
        }
        else
          break;
      }
    }
  }

#endif /* QUICK_SORT */


#ifdef DEBUG_GRAYS
#ifdef DEBUG_SORT

  static int
  gray_check_sort( PCell  cells,
                   int    count )
  {
    PCell  p, q;


    for ( p = cells + count - 2; p >= cells; p-- )
    {
      q = p + 1;
      if ( !LESS_THAN( p, q ) )
        return 0;
    }
    return 1;
  }

#endif /* DEBUG_SORT */
#endif /* DEBUG_GRAYS */


  static int
  gray_move_to( const FT_Vector*  to,
                FT_Raster         raster )
  {
    TPos  x, y;


    /* record current cell, if any */
    gray_record_cell( (PRaster)raster );

    /* start to a new position */
    x = UPSCALE( to->x );
    y = UPSCALE( to->y );

    gray_start_cell( (PRaster)raster, TRUNC( x ), TRUNC( y ) );

    ((PRaster)raster)->x = x;
    ((PRaster)raster)->y = y;
    return 0;
  }


  static int
  gray_line_to( const FT_Vector*  to,
                FT_Raster         raster )
  {
    gray_render_line( (PRaster)raster,
                      UPSCALE( to->x ), UPSCALE( to->y ) );
    return 0;
  }


  static int
  gray_conic_to( const FT_Vector*  control,
                 const FT_Vector*  to,
                 FT_Raster         raster )
  {
    gray_render_conic( (PRaster)raster, control, to );
    return 0;
  }


  static int
  gray_cubic_to( const FT_Vector*  control1,
                 const FT_Vector*  control2,
                 const FT_Vector*  to,
                 FT_Raster         raster )
  {
    gray_render_cubic( (PRaster)raster, control1, control2, to );
    return 0;
  }


  static void
  gray_render_span( int             y,
                    int             count,
                    const FT_Span*  spans,
                    PRaster         raster )
  {
    unsigned char*  p;
    FT_Bitmap*      map = &raster->target;


    /* first of all, compute the scanline offset */
    p = (unsigned char*)map->buffer - y * map->pitch;
    if ( map->pitch >= 0 )
      p += ( map->rows - 1 ) * map->pitch;

    for ( ; count > 0; count--, spans++ )
    {
      unsigned char  coverage = spans->coverage;


#ifdef GRAYS_USE_GAMMA
      coverage = raster->gamma[coverage];
#endif

      if ( coverage )
#if 1
        FT_MEM_SET( p + spans->x, (unsigned char)coverage, spans->len );
#else /* 1 */
      {
        q     = p + spans->x;
        limit = q + spans->len;
        for ( ; q < limit; q++ )
          q[0] = (unsigned char)coverage;
      }
#endif /* 1 */
    }
  }


#ifdef DEBUG_GRAYS

#include <stdio.h>

  static void
  gray_dump_cells( RAS_ARG )
  {
    PCell  cell, limit;
    int    y = -1;


    cell  = ras.cells;
    limit = cell + ras.num_cells;

    for ( ; cell < limit; cell++ )
    {
      if ( cell->y != y )
      {
        fprintf( stderr, "\n%2d: ", cell->y );
        y = cell->y;
      }
      fprintf( stderr, "[%d %d %d]",
               cell->x, cell->area, cell->cover );
    }
    fprintf(stderr, "\n" );
  }

#endif /* DEBUG_GRAYS */


  static void
  gray_hline( RAS_ARG_ TCoord  x,
                       TCoord  y,
                       TPos    area,
                       int     acount )
  {
    FT_Span*   span;
    int        count;
    int        coverage;


    /* compute the coverage line's coverage, depending on the    */
    /* outline fill rule                                         */
    /*                                                           */
    /* the coverage percentage is area/(PIXEL_BITS*PIXEL_BITS*2) */
    /*                                                           */
    coverage = (int)( area >> ( PIXEL_BITS * 2 + 1 - 8 ) );
                                                    /* use range 0..256 */
    if ( coverage < 0 )
      coverage = -coverage;

    if ( ras.outline.flags & FT_OUTLINE_EVEN_ODD_FILL )
    {
      coverage &= 511;

      if ( coverage > 256 )
        coverage = 512 - coverage;
      else if ( coverage == 256 )
        coverage = 255;
    }
    else
    {
      /* normal non-zero winding rule */
      if ( coverage >= 256 )
        coverage = 255;
    }

    y += (TCoord)ras.min_ey;
    x += (TCoord)ras.min_ex;

    if ( coverage )
    {
      /* see if we can add this span to the current list */
      count = ras.num_gray_spans;
      span  = ras.gray_spans + count - 1;
      if ( count > 0                          &&
           ras.span_y == y                    &&
           (int)span->x + span->len == (int)x &&
           span->coverage == coverage )
      {
        span->len = (unsigned short)( span->len + acount );
        return;
      }

      if ( ras.span_y != y || count >= FT_MAX_GRAY_SPANS )
      {
        if ( ras.render_span && count > 0 )
          ras.render_span( ras.span_y, count, ras.gray_spans,
                           ras.render_span_data );
        /* ras.render_span( span->y, ras.gray_spans, count ); */

#ifdef DEBUG_GRAYS

        if ( ras.span_y >= 0 )
        {
          int  n;


          fprintf( stderr, "y=%3d ", ras.span_y );
          span = ras.gray_spans;
          for ( n = 0; n < count; n++, span++ )
            fprintf( stderr, "[%d..%d]:%02x ",
                     span->x, span->x + span->len - 1, span->coverage );
          fprintf( stderr, "\n" );
        }

#endif /* DEBUG_GRAYS */

        ras.num_gray_spans = 0;
        ras.span_y         = y;

        count = 0;
        span  = ras.gray_spans;
      }
      else
        span++;

      /* add a gray span to the current list */
      span->x        = (short)x;
      span->len      = (unsigned short)acount;
      span->coverage = (unsigned char)coverage;
      ras.num_gray_spans++;
    }
  }


  static void
  gray_sweep( RAS_ARG_ const FT_Bitmap*  target )
  {
    TCoord  x, y, cover;
    TArea   area;
    PCell   start, cur, limit;

    FT_UNUSED( target );


    if ( ras.num_cells == 0 )
      return;

    cur   = ras.cells;
    limit = cur + ras.num_cells;

    cover              = 0;
    ras.span_y         = -1;
    ras.num_gray_spans = 0;

    for (;;)
    {
      start  = cur;
      y      = start->y;
      x      = start->x;

      area   = start->area;
      cover += start->cover;

      /* accumulate all start cells */
      for (;;)
      {
        ++cur;
        if ( cur >= limit || cur->y != start->y || cur->x != start->x )
          break;

        area  += cur->area;
        cover += cur->cover;
      }

      /* if the start cell has a non-null area, we must draw an */
      /* individual gray pixel there                            */
      if ( area && x >= 0 )
      {
        gray_hline( RAS_VAR_ x, y, cover * ( ONE_PIXEL * 2 ) - area, 1 );
        x++;
      }

      if ( x < 0 )
        x = 0;

      if ( cur < limit && start->y == cur->y )
      {
        /* draw a gray span between the start cell and the current one */
        if ( cur->x > x )
          gray_hline( RAS_VAR_ x, y,
                      cover * ( ONE_PIXEL * 2 ), cur->x - x );
      }
      else
      {
        /* draw a gray span until the end of the clipping region */
        if ( cover && x < ras.max_ex - ras.min_ex )
          gray_hline( RAS_VAR_ x, y,
                      cover * ( ONE_PIXEL * 2 ),
                      (int)( ras.max_ex - x - ras.min_ex ) );
        cover = 0;
      }

      if ( cur >= limit )
        break;
    }

    if ( ras.render_span && ras.num_gray_spans > 0 )
      ras.render_span( ras.span_y, ras.num_gray_spans,
                       ras.gray_spans, ras.render_span_data );

#ifdef DEBUG_GRAYS

    {
      int       n;
      FT_Span*  span;


      fprintf( stderr, "y=%3d ", ras.span_y );
      span = ras.gray_spans;
      for ( n = 0; n < ras.num_gray_spans; n++, span++ )
        fprintf( stderr, "[%d..%d]:%02x ",
                 span->x, span->x + span->len - 1, span->coverage );
      fprintf( stderr, "\n" );
    }

#endif /* DEBUG_GRAYS */

  }


#ifdef _STANDALONE_

  /*************************************************************************/
  /*                                                                       */
  /*  The following function should only compile in stand_alone mode,      */
  /*  i.e., when building this component without the rest of FreeType.     */
  /*                                                                       */
  /*************************************************************************/

  /*************************************************************************/
  /*                                                                       */
  /* <Function>                                                            */
  /*    FT_Outline_Decompose                                               */
  /*                                                                       */
  /* <Description>                                                         */
  /*    Walks over an outline's structure to decompose it into individual  */
  /*    segments and Bezier arcs.  This function is also able to emit      */
  /*    `move to' and `close to' operations to indicate the start and end  */
  /*    of new contours in the outline.                                    */
  /*                                                                       */
  /* <Input>                                                               */
  /*    outline        :: A pointer to the source target.                  */
  /*                                                                       */
  /*    func_interface :: A table of `emitters', i.e,. function pointers   */
  /*                      called during decomposition to indicate path     */
  /*                      operations.                                      */
  /*                                                                       */
  /*    user           :: A typeless pointer which is passed to each       */
  /*                      emitter during the decomposition.  It can be     */
  /*                      used to store the state during the               */
  /*                      decomposition.                                   */
  /*                                                                       */
  /* <Return>                                                              */
  /*    Error code.  0 means sucess.                                       */
  /*                                                                       */
  static
  int  FT_Outline_Decompose( const FT_Outline*        outline,
                             const FT_Outline_Funcs*  func_interface,
                             void*                    user )
  {
#undef SCALED
#if 0
#define SCALED( x )  ( ( (x) << shift ) - delta )
#else
#define SCALED( x )  (x)
#endif

    FT_Vector   v_last;
    FT_Vector   v_control;
    FT_Vector   v_start;

    FT_Vector*  point;
    FT_Vector*  limit;
    char*       tags;

    int   n;         /* index of contour in outline     */
    int   first;     /* index of first point in contour */
    int   error;
    char  tag;       /* current point's state           */

#if 0
    int   shift = func_interface->shift;
    TPos  delta = func_interface->delta;
#endif


    first = 0;

    for ( n = 0; n < outline->n_contours; n++ )
    {
      int  last;  /* index of last point in contour */


      last  = outline->contours[n];
      limit = outline->points + last;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成在人线免费| 美女视频一区二区三区| 亚洲一区二三区| 精品中文字幕一区二区| 成人综合婷婷国产精品久久蜜臀| 欧美亚洲动漫制服丝袜| 中文字幕成人在线观看| 六月丁香婷婷色狠狠久久| 欧美亚洲国产一区二区三区va| 欧美激情一区在线观看| 精品亚洲成av人在线观看| 欧美日韩五月天| 亚洲欧洲综合另类| 成人丝袜高跟foot| 国产三级精品视频| 麻豆91免费观看| 7777精品伊人久久久大香线蕉最新版| 日韩一区欧美一区| 成人黄色在线视频| 国产校园另类小说区| 久久福利资源站| 欧美一区二区三区人| 亚洲国产精品自拍| 欧美美女一区二区在线观看| 亚洲一区欧美一区| 精品视频色一区| 亚洲一二三级电影| 欧美三级在线看| 亚洲综合图片区| 一本一道久久a久久精品 | 国产自产视频一区二区三区| 欧美日本韩国一区| 日韩福利电影在线观看| 欧美福利一区二区| 久久精品免费观看| 久久久久99精品国产片| 大美女一区二区三区| 国产精品青草综合久久久久99| 国产成人精品三级麻豆| 国产欧美一区二区三区网站 | 国产三级精品视频| 国产成人自拍网| 国产精品久久久久久久久免费樱桃 | 国产精品久久久久7777按摩| 粉嫩aⅴ一区二区三区四区五区| 欧美极品美女视频| 99久久精品免费看国产| 一区二区三区自拍| 欧美日韩国产首页在线观看| 美女网站视频久久| 国产三级精品在线| 在线欧美小视频| 日韩vs国产vs欧美| 国产亚洲精品中文字幕| 91亚洲精品久久久蜜桃| 亚洲超碰97人人做人人爱| 精品国产免费人成在线观看| 成人污视频在线观看| 亚洲成人午夜影院| www久久精品| 91小视频在线观看| 六月丁香婷婷色狠狠久久| 国产精品久久久久天堂| 欧美日韩在线亚洲一区蜜芽| 久久精品国产免费看久久精品| 国产精品嫩草99a| 欧美精品电影在线播放| 国产91丝袜在线观看| 亚洲一区二区三区视频在线| 精品国产三级电影在线观看| 成人国产精品视频| 美女脱光内衣内裤视频久久影院| 国产精品久久久久永久免费观看| 91精品久久久久久久99蜜桃| 成人av电影免费在线播放| 日韩成人精品在线| 亚洲欧洲精品一区二区三区 | 日韩国产欧美在线视频| 国产精品三级av| 日韩欧美久久久| 日本道精品一区二区三区| 寂寞少妇一区二区三区| 亚洲小少妇裸体bbw| 亚洲国产成人私人影院tom| 日韩欧美区一区二| 欧美麻豆精品久久久久久| 懂色中文一区二区在线播放| 亚洲va在线va天堂| 亚洲丝袜另类动漫二区| 国产女同互慰高潮91漫画| 日韩欧美成人激情| 欧美午夜精品免费| 97久久久精品综合88久久| 国产一区二区美女诱惑| 奇米在线7777在线精品| 亚洲成人在线免费| 亚洲激情图片小说视频| 中文字幕 久热精品 视频在线| 日韩视频在线永久播放| 欧美日本一区二区| 91官网在线观看| 91亚洲精品乱码久久久久久蜜桃| 高清国产一区二区三区| 国产一区二区视频在线播放| 日韩av一级片| 日韩制服丝袜先锋影音| 日韩中文字幕av电影| 爽好久久久欧美精品| 亚洲国产中文字幕在线视频综合| 伊人性伊人情综合网| 中文字幕亚洲精品在线观看| 中文字幕第一区第二区| 国产精品女主播在线观看| 国产精品欧美久久久久无广告| 国产亚洲综合色| 中文欧美字幕免费| 亚洲欧洲在线观看av| 亚洲精品五月天| 亚洲精品成人a在线观看| 亚洲成人免费观看| 日韩福利电影在线观看| 蜜桃视频在线观看一区二区| 精品一区二区在线看| 国产精品一区二区黑丝| 高清久久久久久| 色久优优欧美色久优优| 欧美丝袜第三区| 日韩精品专区在线| 国产午夜精品理论片a级大结局| 国产精品久久夜| 樱花草国产18久久久久| 秋霞影院一区二区| 国产黄色成人av| 91久久精品日日躁夜夜躁欧美| 欧美丝袜丝交足nylons图片| 欧美大片一区二区| 国产精品视频一二三区 | 蜜臀av性久久久久蜜臀av麻豆| 麻豆精品一区二区| 成人av在线看| 欧美自拍丝袜亚洲| 精品国产免费视频| 亚洲欧美日韩中文字幕一区二区三区| 一区二区成人在线| 麻豆国产精品一区二区三区 | 视频一区二区不卡| 国产美女精品人人做人人爽 | 成人精品一区二区三区四区 | 成人免费不卡视频| 欧美日韩1234| 国产精品丝袜一区| 日本午夜一本久久久综合| 东方欧美亚洲色图在线| 欧美网站大全在线观看| 337p日本欧洲亚洲大胆精品 | 色婷婷av久久久久久久| 日韩美一区二区三区| 中文字幕亚洲一区二区va在线| 天堂精品中文字幕在线| 国产aⅴ综合色| 欧美日韩精品二区第二页| 日本一区二区三区视频视频| 亚洲第一福利视频在线| 国产盗摄视频一区二区三区| 欧美欧美午夜aⅴ在线观看| 国产精品污网站| 免费欧美在线视频| 色婷婷香蕉在线一区二区| 2021中文字幕一区亚洲| 亚洲高清视频在线| 99国内精品久久| 久久久国产精品午夜一区ai换脸| 五月综合激情婷婷六月色窝| 成人午夜看片网址| 精品成人一区二区三区| 亚洲第一二三四区| 色视频欧美一区二区三区| 日本一区二区三区国色天香 | 亚洲成人你懂的| 91免费在线看| 日本一区二区成人| 国产呦精品一区二区三区网站| 欧美精品tushy高清| 亚洲免费观看在线视频| 白白色 亚洲乱淫| 国产欧美一区在线| 国产美女在线观看一区| 精品久久人人做人人爱| 美日韩一级片在线观看| 欧美一区二区三区在线观看视频| 夜夜嗨av一区二区三区| 日本电影亚洲天堂一区| 有坂深雪av一区二区精品| 色综合天天天天做夜夜夜夜做| 国产精品视频你懂的| 成年人网站91| 亚洲欧洲中文日韩久久av乱码| av电影在线观看不卡| 国产精品不卡在线观看| 99久久国产免费看|