⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ttinterp.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 5 页
字号:
    /*  MDRP[06]  */  PACK( 1, 0 ),    /*  MDRP[07]  */  PACK( 1, 0 ),    /*  MDRP[08]  */  PACK( 1, 0 ),    /*  MDRP[09]  */  PACK( 1, 0 ),    /*  MDRP[10]  */  PACK( 1, 0 ),    /*  MDRP[11]  */  PACK( 1, 0 ),    /*  MDRP[12]  */  PACK( 1, 0 ),    /*  MDRP[13]  */  PACK( 1, 0 ),    /*  MDRP[14]  */  PACK( 1, 0 ),    /*  MDRP[15]  */  PACK( 1, 0 ),    /*  MDRP[16]  */  PACK( 1, 0 ),    /*  MDRP[17]  */  PACK( 1, 0 ),    /*  MDRP[18]  */  PACK( 1, 0 ),    /*  MDRP[19]  */  PACK( 1, 0 ),    /*  MDRP[20]  */  PACK( 1, 0 ),    /*  MDRP[21]  */  PACK( 1, 0 ),    /*  MDRP[22]  */  PACK( 1, 0 ),    /*  MDRP[23]  */  PACK( 1, 0 ),    /*  MDRP[24]  */  PACK( 1, 0 ),    /*  MDRP[25]  */  PACK( 1, 0 ),    /*  MDRP[26]  */  PACK( 1, 0 ),    /*  MDRP[27]  */  PACK( 1, 0 ),    /*  MDRP[28]  */  PACK( 1, 0 ),    /*  MDRP[29]  */  PACK( 1, 0 ),    /*  MDRP[30]  */  PACK( 1, 0 ),    /*  MDRP[31]  */  PACK( 1, 0 ),    /*  MIRP[00]  */  PACK( 2, 0 ),    /*  MIRP[01]  */  PACK( 2, 0 ),    /*  MIRP[02]  */  PACK( 2, 0 ),    /*  MIRP[03]  */  PACK( 2, 0 ),    /*  MIRP[04]  */  PACK( 2, 0 ),    /*  MIRP[05]  */  PACK( 2, 0 ),    /*  MIRP[06]  */  PACK( 2, 0 ),    /*  MIRP[07]  */  PACK( 2, 0 ),    /*  MIRP[08]  */  PACK( 2, 0 ),    /*  MIRP[09]  */  PACK( 2, 0 ),    /*  MIRP[10]  */  PACK( 2, 0 ),    /*  MIRP[11]  */  PACK( 2, 0 ),    /*  MIRP[12]  */  PACK( 2, 0 ),    /*  MIRP[13]  */  PACK( 2, 0 ),    /*  MIRP[14]  */  PACK( 2, 0 ),    /*  MIRP[15]  */  PACK( 2, 0 ),    /*  MIRP[16]  */  PACK( 2, 0 ),    /*  MIRP[17]  */  PACK( 2, 0 ),    /*  MIRP[18]  */  PACK( 2, 0 ),    /*  MIRP[19]  */  PACK( 2, 0 ),    /*  MIRP[20]  */  PACK( 2, 0 ),    /*  MIRP[21]  */  PACK( 2, 0 ),    /*  MIRP[22]  */  PACK( 2, 0 ),    /*  MIRP[23]  */  PACK( 2, 0 ),    /*  MIRP[24]  */  PACK( 2, 0 ),    /*  MIRP[25]  */  PACK( 2, 0 ),    /*  MIRP[26]  */  PACK( 2, 0 ),    /*  MIRP[27]  */  PACK( 2, 0 ),    /*  MIRP[28]  */  PACK( 2, 0 ),    /*  MIRP[29]  */  PACK( 2, 0 ),    /*  MIRP[30]  */  PACK( 2, 0 ),    /*  MIRP[31]  */  PACK( 2, 0 )  };  static  const FT_Char  opcode_length[256] =  {    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,   -1,-2, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,    2, 3, 4, 5,  6, 7, 8, 9,  3, 5, 7, 9, 11,13,15,17,    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,    1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1  };  static  const FT_Vector  Null_Vector = {0,0};#undef PACK#undef  NULL_Vector#define NULL_Vector  (FT_Vector*)&Null_Vector#if 1  static FT_Int32  TT_MulFix14( FT_Int32  a,               FT_Int    b )  {    FT_Int32   sign;    FT_UInt32  ah, al, mid, lo, hi;    sign = a ^ b;    if ( a < 0 )      a = -a;    if ( b < 0 )      b = -b;    ah = (FT_UInt32)( ( a >> 16 ) & 0xFFFFU );    al = (FT_UInt32)( a & 0xFFFFU );    lo    = al * b;    mid   = ah * b;    hi    = mid >> 16;    mid   = ( mid << 16 ) + ( 1 << 13 ); /* rounding */    lo   += mid;    if ( lo < mid )      hi += 1;    mid = ( lo >> 14 ) | ( hi << 18 );    return sign >= 0 ? (FT_Int32)mid : -(FT_Int32)mid;  }#else  /* compute (a*b)/2^14 with maximal accuracy and rounding */  static FT_Int32  TT_MulFix14( FT_Int32  a,               FT_Int    b )  {    FT_Int32   m, s, hi;    FT_UInt32  l, lo;    /* compute ax*bx as 64-bit value */    l  = (FT_UInt32)( ( a & 0xFFFFU ) * b );    m  = ( a >> 16 ) * b;    lo = l + (FT_UInt32)( m << 16 );    hi = ( m >> 16 ) + ( (FT_Int32)l >> 31 ) + ( lo < l );    /* divide the result by 2^14 with rounding */    s   = hi >> 31;    l   = lo + (FT_UInt32)s;    hi += s + ( l < lo );    lo  = l;    l   = lo + 0x2000U;    hi += l < lo;    return ( hi << 18 ) | ( l >> 14 );  }#endif  /* compute (ax*bx+ay*by)/2^14 with maximal accuracy and rounding */  static FT_Int32  TT_DotFix14( FT_Int32  ax,               FT_Int32  ay,               FT_Int    bx,               FT_Int    by )  {    FT_Int32   m, s, hi1, hi2, hi;    FT_UInt32  l, lo1, lo2, lo;    /* compute ax*bx as 64-bit value */    l = (FT_UInt32)( ( ax & 0xFFFFU ) * bx );    m = ( ax >> 16 ) * bx;    lo1 = l + (FT_UInt32)( m << 16 );    hi1 = ( m >> 16 ) + ( (FT_Int32)l >> 31 ) + ( lo1 < l );    /* compute ay*by as 64-bit value */    l = (FT_UInt32)( ( ay & 0xFFFFU ) * by );    m = ( ay >> 16 ) * by;    lo2 = l + (FT_UInt32)( m << 16 );    hi2 = ( m >> 16 ) + ( (FT_Int32)l >> 31 ) + ( lo2 < l );    /* add them */    lo = lo1 + lo2;    hi = hi1 + hi2 + ( lo < lo1 );    /* divide the result by 2^14 with rounding */    s   = hi >> 31;    l   = lo + (FT_UInt32)s;    hi += s + ( l < lo );    lo  = l;    l   = lo + 0x2000U;    hi += ( l < lo );    return ( hi << 18 ) | ( l >> 14 );  }  /* return length of given vector */#if 0  static FT_Int32  TT_VecLen( FT_Int32  x,             FT_Int32  y )  {    FT_Int32   m, hi1, hi2, hi;    FT_UInt32  l, lo1, lo2, lo;    /* compute x*x as 64-bit value */    lo = (FT_UInt32)( x & 0xFFFFU );    hi = x >> 16;    l  = lo * lo;    m  = hi * lo;    hi = hi * hi;    lo1 = l + (FT_UInt32)( m << 17 );    hi1 = hi + ( m >> 15 ) + ( lo1 < l );    /* compute y*y as 64-bit value */    lo = (FT_UInt32)( y & 0xFFFFU );    hi = y >> 16;    l  = lo * lo;    m  = hi * lo;    hi = hi * hi;    lo2 = l + (FT_UInt32)( m << 17 );    hi2 = hi + ( m >> 15 ) + ( lo2 < l );    /* add them to get 'x*x+y*y' as 64-bit value */    lo = lo1 + lo2;    hi = hi1 + hi2 + ( lo < lo1 );    /* compute the square root of this value */    {      FT_UInt32  root, rem, test_div;      FT_Int     count;      root = 0;      {        rem   = 0;        count = 32;        do        {          rem      = ( rem << 2 ) | ( (FT_UInt32)hi >> 30 );          hi       = (  hi << 2 ) | (            lo >> 30 );          lo     <<= 2;          root   <<= 1;          test_div = ( root << 1 ) + 1;          if ( rem >= test_div )          {            rem  -= test_div;            root += 1;          }        } while ( --count );      }      return (FT_Int32)root;    }  }#else  /* this version uses FT_Vector_Length which computes the same value */  /* much, much faster..                                              */  /*                                                                  */  static FT_F26Dot6  TT_VecLen( FT_F26Dot6  X,             FT_F26Dot6  Y )  {    FT_Vector  v;    v.x = X;    v.y = Y;    return FT_Vector_Length( &v );  }#endif  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    Current_Ratio                                                      */  /*                                                                       */  /* <Description>                                                         */  /*    Returns the current aspect ratio scaling factor depending on the   */  /*    projection vector's state and device resolutions.                  */  /*                                                                       */  /* <Return>                                                              */  /*    The aspect ratio in 16.16 format, always <= 1.0 .                  */  /*                                                                       */  static FT_Long  Current_Ratio( EXEC_OP )  {    if ( !CUR.tt_metrics.ratio )    {#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING      if ( CUR.face->unpatented_hinting )      {        if ( CUR.GS.both_x_axis )          CUR.tt_metrics.ratio = CUR.tt_metrics.x_ratio;        else          CUR.tt_metrics.ratio = CUR.tt_metrics.y_ratio;      }      else#endif      {        if ( CUR.GS.projVector.y == 0 )          CUR.tt_metrics.ratio = CUR.tt_metrics.x_ratio;        else if ( CUR.GS.projVector.x == 0 )          CUR.tt_metrics.ratio = CUR.tt_metrics.y_ratio;        else        {          FT_Long  x, y;          x = TT_MULDIV( CUR.GS.projVector.x,                         CUR.tt_metrics.x_ratio, 0x4000 );          y = TT_MULDIV( CUR.GS.projVector.y,                         CUR.tt_metrics.y_ratio, 0x4000 );          CUR.tt_metrics.ratio = TT_VecLen( x, y );        }      }    }    return CUR.tt_metrics.ratio;  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -