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

📄 ttobjs.c

📁 a very goog book
💻 C
📖 第 1 页 / 共 2 页
字号:
      TT_Done_Context( exec );#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */    size->ttmetrics.valid = FALSE;    return error;#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER  Fail_Exec:    if ( !size->debug )      TT_Done_Context( exec );  Fail_Memory:    TT_Size_Done( size );    return error;#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    TT_Size_Done                                                       */  /*                                                                       */  /* <Description>                                                         */  /*    The TrueType size object finalizer.                                */  /*                                                                       */  /* <Input>                                                               */  /*    size :: A handle to the target size object.                        */  /*                                                                       */  FT_LOCAL_DEF( void )  TT_Size_Done( TT_Size  size )  {#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER    FT_Memory  memory = size->root.face->memory;    if ( size->debug )    {      /* the debug context must be deleted by the debugger itself */      size->context = NULL;      size->debug   = FALSE;    }    FT_FREE( size->cvt );    size->cvt_size = 0;    /* free storage area */    FT_FREE( size->storage );    size->storage_size = 0;    /* twilight zone */    TT_Done_GlyphZone( &size->twilight );    FT_FREE( size->function_defs );    FT_FREE( size->instruction_defs );    size->num_function_defs    = 0;    size->max_function_defs    = 0;    size->num_instruction_defs = 0;    size->max_instruction_defs = 0;    size->max_func = 0;    size->max_ins  = 0;#endif    size->ttmetrics.valid = FALSE;  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    Reset_Outline_Size                                                 */  /*                                                                       */  /* <Description>                                                         */  /*    Resets a TrueType outline size when resolutions and character      */  /*    dimensions have been changed.                                      */  /*                                                                       */  /* <Input>                                                               */  /*    size :: A handle to the target size object.                        */  /*                                                                       */  static FT_Error  Reset_Outline_Size( TT_Size  size )  {    TT_Face           face;    FT_Error          error = TT_Err_Ok;    FT_Size_Metrics*  metrics;    if ( size->ttmetrics.valid )      return TT_Err_Ok;    face = (TT_Face)size->root.face;    metrics = &size->root.metrics;    if ( metrics->x_ppem < 1 || metrics->y_ppem < 1 )      return TT_Err_Invalid_PPem;    /* compute new transformation */    if ( metrics->x_ppem >= metrics->y_ppem )    {      size->ttmetrics.scale   = metrics->x_scale;      size->ttmetrics.ppem    = metrics->x_ppem;      size->ttmetrics.x_ratio = 0x10000L;      size->ttmetrics.y_ratio = FT_MulDiv( metrics->y_ppem,                                           0x10000L,                                           metrics->x_ppem );    }    else    {      size->ttmetrics.scale   = metrics->y_scale;      size->ttmetrics.ppem    = metrics->y_ppem;      size->ttmetrics.x_ratio = FT_MulDiv( metrics->x_ppem,                                           0x10000L,                                           metrics->y_ppem );      size->ttmetrics.y_ratio = 0x10000L;    }    /* Compute root ascender, descender, test 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->root.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 = 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 + -