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

📄 ttobjs.c

📁 下载来的一个看图软件的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
    /* Compute root ascender, descender, text height, and max_advance */    metrics->ascender    = ( FT_MulFix( face->root.ascender,                                        metrics->y_scale ) + 32 ) & -64;    metrics->descender   = ( FT_MulFix( face->root.descender,                                        metrics->y_scale ) + 32 ) & -64;    metrics->height      = ( FT_MulFix( face->root.height,                                        metrics->y_scale ) + 32 ) & -64;    metrics->max_advance = ( FT_MulFix( face->root.max_advance_width,                                        metrics->x_scale ) + 32 ) & -64;#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS    /* set to `invalid' by default */    size->strike_index = 0xFFFFU;#endif#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER    {      TT_ExecContext  exec;      FT_UInt         i, j;      /* Scale the cvt values to the new ppem.          */      /* We use by default the y ppem to scale the CVT. */      for ( i = 0; i < size->cvt_size; i++ )        size->cvt[i] = FT_MulFix( face->cvt[i], size->ttmetrics.scale );      /* All twilight points are originally zero */      for ( j = 0; j < (FT_UInt)size->twilight.n_points; j++ )      {        size->twilight.org[j].x = 0;        size->twilight.org[j].y = 0;        size->twilight.cur[j].x = 0;        size->twilight.cur[j].y = 0;      }      /* clear storage area */      for ( i = 0; i < (FT_UInt)size->storage_size; i++ )        size->storage[i] = 0;      size->GS = tt_default_graphics_state;      /* get execution context and run prep program */      if ( size->debug )        exec = size->context;      else        exec = TT_New_Context( face );      /* debugging instances have their own context */      if ( !exec )        return TT_Err_Could_Not_Find_Context;      TT_Load_Context( exec, face, size );      TT_Set_CodeRange( exec,                        tt_coderange_cvt,                        face->cvt_program,                        face->cvt_program_size );      TT_Clear_CodeRange( exec, tt_coderange_glyph );      exec->instruction_trap = FALSE;      exec->top     = 0;      exec->callTop = 0;      if ( face->cvt_program_size > 0 )      {        error = TT_Goto_CodeRange( exec, tt_coderange_cvt, 0 );        if ( error )          goto End;        if ( !size->debug )          error = face->interpreter( exec );      }      else        error = TT_Err_Ok;      size->GS = exec->GS;      /* save default graphics state */    End:      TT_Save_Context( exec, size );      if ( !size->debug )        TT_Done_Context( exec );      /* debugging instances keep their context */    }#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */    if ( !error )      size->ttmetrics.valid = TRUE;    return error;  }#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    Reset_SBit_Size                                                    */  /*                                                                       */  /* <Description>                                                         */  /*    Resets a TrueType sbit size when resolutions and character         */  /*    dimensions have been changed.                                      */  /*                                                                       */  /* <Input>                                                               */  /*    size :: A handle to the target size object.                        */  /*                                                                       */  static FT_Error  Reset_SBit_Size( TT_Size  size )  {    TT_Face           face;    FT_Error          error = TT_Err_Ok;    FT_ULong          strike_index;    FT_Size_Metrics*  metrics;    FT_Size_Metrics*  sbit_metrics;    SFNT_Service      sfnt;    metrics = &size->metrics;    if ( size->strike_index != 0xFFFFU )      return TT_Err_Ok;    face = (TT_Face)size->root.face;    sfnt = (SFNT_Service)face->sfnt;    sbit_metrics = &size->strike_metrics;    error = sfnt->set_sbit_strike( face,                                   metrics->x_ppem, metrics->y_ppem,                                   &strike_index );    if ( !error )    {      TT_SBit_Strike  strike = face->sbit_strikes + strike_index;      sbit_metrics->x_ppem = metrics->x_ppem;      sbit_metrics->y_ppem = metrics->y_ppem;#if 0      /*       * sbit_metrics->?_scale       * are not used now.       */      sbit_metrics->x_scale = 1 << 16;      sbit_metrics->y_scale = 1 << 16;#endif      sbit_metrics->ascender  = strike->hori.ascender << 6;      sbit_metrics->descender = strike->hori.descender << 6;      /* XXX: Is this correct? */      sbit_metrics->height = sbit_metrics->ascender - sbit_metrics->descender;      /* XXX: Is this correct? */      sbit_metrics->max_advance = ( strike->hori.min_origin_SB  +                                    strike->hori.max_width      +                                    strike->hori.min_advance_SB ) << 6;      size->strike_index = (FT_UInt)strike_index;    }    else    {      size->strike_index = 0xFFFFU;      sbit_metrics->x_ppem      = 0;      sbit_metrics->y_ppem      = 0;      sbit_metrics->ascender    = 0;      sbit_metrics->descender   = 0;      sbit_metrics->height      = 0;      sbit_metrics->max_advance = 0;    }    return error;  }#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    tt_size_reset                                                      */  /*                                                                       */  /* <Description>                                                         */  /*    Resets a TrueType size when resolutions and character dimensions   */  /*    have been changed.                                                 */  /*                                                                       */  /* <Input>                                                               */  /*    size :: A handle to the target size object.                        */  /*                                                                       */  FT_LOCAL_DEF( FT_Error )  tt_size_reset( TT_Size  size )  {    FT_Face   face;    FT_Error  error = TT_Err_Ok;    face = size->root.face;    if ( face->face_flags & FT_FACE_FLAG_SCALABLE )    {      if ( !size->ttmetrics.valid )        error = Reset_Outline_Size( size );      if ( error )        return error;    }#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS    if ( face->face_flags & FT_FACE_FLAG_FIXED_SIZES )    {      if ( size->strike_index == 0xFFFFU )        error = Reset_SBit_Size( size );      if ( !error && !( face->face_flags & FT_FACE_FLAG_SCALABLE ) )        size->root.metrics = size->strike_metrics;    }#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */    if ( face->face_flags & FT_FACE_FLAG_SCALABLE )      return TT_Err_Ok;    else      return error;  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    tt_driver_init                                                     */  /*                                                                       */  /* <Description>                                                         */  /*    Initializes a given TrueType driver object.                        */  /*                                                                       */  /* <Input>                                                               */  /*    driver :: A handle to the target driver object.                    */  /*                                                                       */  /* <Return>                                                              */  /*    FreeType error code.  0 means success.                             */  /*                                                                       */  FT_LOCAL_DEF( FT_Error )  tt_driver_init( TT_Driver  driver )  {    FT_Error  error;    /* set `extra' in glyph loader */    error = FT_GlyphLoader_CreateExtra( FT_DRIVER( driver )->glyph_loader );    return error;  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    tt_driver_done                                                     */  /*                                                                       */  /* <Description>                                                         */  /*    Finalizes a given TrueType driver.                                 */  /*                                                                       */  /* <Input>                                                               */  /*    driver :: A handle to the target TrueType driver.                  */  /*                                                                       */  FT_LOCAL_DEF( void )  tt_driver_done( TT_Driver  driver )  {#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER    /* destroy the execution context */    if ( driver->context )    {      TT_Destroy_Context( driver->context, driver->root.root.memory );      driver->context = NULL;    }#else    FT_UNUSED( driver );#endif  }/* END */

⌨️ 快捷键说明

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