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

📄 ttobjs.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 3 页
字号:
  /* <Function>                                                            */  /*    tt_face_done                                                       */  /*                                                                       */  /* <Description>                                                         */  /*    Finalize a given face object.                                      */  /*                                                                       */  /* <Input>                                                               */  /*    face :: A pointer to the face object to destroy.                   */  /*                                                                       */  FT_LOCAL_DEF( void )  tt_face_done( FT_Face  ttface )           /* TT_Face */  {    TT_Face       face   = (TT_Face)ttface;    FT_Memory     memory = face->root.memory;    FT_Stream     stream = face->root.stream;    SFNT_Service  sfnt   = (SFNT_Service)face->sfnt;    /* for `extended TrueType formats' (i.e. compressed versions) */    if ( face->extra.finalizer )      face->extra.finalizer( face->extra.data );    if ( sfnt )      sfnt->done_face( face );    /* freeing the locations table */    tt_face_done_loca( face );    tt_face_free_hdmx( face );    /* freeing the CVT */    FT_FREE( face->cvt );    face->cvt_size = 0;    /* freeing the programs */    FT_FRAME_RELEASE( face->font_program );    FT_FRAME_RELEASE( face->cvt_program );    face->font_program_size = 0;    face->cvt_program_size  = 0;#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT    tt_done_blend( memory, face->blend );    face->blend = NULL;#endif  }  /*************************************************************************/  /*                                                                       */  /*                           SIZE  FUNCTIONS                             */  /*                                                                       */  /*************************************************************************/#ifdef TT_USE_BYTECODE_INTERPRETER  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    tt_size_run_fpgm                                                   */  /*                                                                       */  /* <Description>                                                         */  /*    Run the font program.                                              */  /*                                                                       */  /* <Input>                                                               */  /*    size :: A handle to the size object.                               */  /*                                                                       */  /* <Return>                                                              */  /*    FreeType error code.  0 means success.                             */  /*                                                                       */  FT_LOCAL_DEF( FT_Error )  tt_size_run_fpgm( TT_Size  size )  {    TT_Face         face = (TT_Face)size->root.face;    TT_ExecContext  exec;    FT_Error        error;    /* debugging instances have their own context */    if ( size->debug )      exec = size->context;    else      exec = ( (TT_Driver)FT_FACE_DRIVER( face ) )->context;    if ( !exec )      return TT_Err_Could_Not_Find_Context;    TT_Load_Context( exec, face, size );    exec->callTop   = 0;    exec->top       = 0;    exec->period    = 64;    exec->phase     = 0;    exec->threshold = 0;    exec->instruction_trap = FALSE;    exec->F_dot_P = 0x10000L;    {      FT_Size_Metrics*  metrics    = &exec->metrics;      TT_Size_Metrics*  tt_metrics = &exec->tt_metrics;      metrics->x_ppem   = 0;      metrics->y_ppem   = 0;      metrics->x_scale  = 0;      metrics->y_scale  = 0;      tt_metrics->ppem  = 0;      tt_metrics->scale = 0;      tt_metrics->ratio = 0x10000L;    }    /* allow font program execution */    TT_Set_CodeRange( exec,                      tt_coderange_font,                      face->font_program,                      face->font_program_size );    /* disable CVT and glyph programs coderange */    TT_Clear_CodeRange( exec, tt_coderange_cvt );    TT_Clear_CodeRange( exec, tt_coderange_glyph );    if ( face->font_program_size > 0 )    {      error = TT_Goto_CodeRange( exec, tt_coderange_font, 0 );      if ( !error )        error = face->interpreter( exec );    }    else      error = TT_Err_Ok;    if ( !error )      TT_Save_Context( exec, size );    return error;  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    tt_size_run_prep                                                   */  /*                                                                       */  /* <Description>                                                         */  /*    Run the control value program.                                     */  /*                                                                       */  /* <Input>                                                               */  /*    size :: A handle to the size object.                               */  /*                                                                       */  /* <Return>                                                              */  /*    FreeType error code.  0 means success.                             */  /*                                                                       */  FT_LOCAL_DEF( FT_Error )  tt_size_run_prep( TT_Size  size )  {    TT_Face         face = (TT_Face)size->root.face;    TT_ExecContext  exec;    FT_Error        error;    /* debugging instances have their own context */    if ( size->debug )      exec = size->context;    else      exec = ( (TT_Driver)FT_FACE_DRIVER( face ) )->context;    if ( !exec )      return TT_Err_Could_Not_Find_Context;    TT_Load_Context( exec, face, size );    exec->callTop = 0;    exec->top     = 0;    exec->instruction_trap = FALSE;    TT_Set_CodeRange( exec,                      tt_coderange_cvt,                      face->cvt_program,                      face->cvt_program_size );    TT_Clear_CodeRange( exec, tt_coderange_glyph );    if ( face->cvt_program_size > 0 )    {      error = TT_Goto_CodeRange( exec, tt_coderange_cvt, 0 );      if ( !error && !size->debug )        error = face->interpreter( exec );    }    else      error = TT_Err_Ok;    /* save as default graphics state */    size->GS = exec->GS;    TT_Save_Context( exec, size );    return error;  }#endif /* TT_USE_BYTECODE_INTERPRETER */#ifdef TT_USE_BYTECODE_INTERPRETER  static void  tt_size_done_bytecode( FT_Size  ftsize )  {    TT_Size    size   = (TT_Size)ftsize;    TT_Face    face   = (TT_Face)ftsize->face;    FT_Memory  memory = face->root.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_glyphzone_done( &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;    size->bytecode_ready = 0;    size->cvt_ready      = 0;  }  /* Initialize bytecode-related fields in the size object.       */  /* We do this only if bytecode interpretation is really needed. */  static FT_Error  tt_size_init_bytecode( FT_Size  ftsize )  {    FT_Error   error;    TT_Size    size = (TT_Size)ftsize;    TT_Face    face = (TT_Face)ftsize->face;    FT_Memory  memory = face->root.memory;    FT_Int     i;    FT_UShort       n_twilight;    TT_MaxProfile*  maxp = &face->max_profile;    size->bytecode_ready = 1;    size->cvt_ready      = 0;    size->max_function_defs    = maxp->maxFunctionDefs;    size->max_instruction_defs = maxp->maxInstructionDefs;    size->num_function_defs    = 0;    size->num_instruction_defs = 0;    size->max_func = 0;    size->max_ins  = 0;    size->cvt_size     = face->cvt_size;    size->storage_size = maxp->maxStorage;    /* Set default metrics */    {      FT_Size_Metrics*  metrics  = &size->metrics;      TT_Size_Metrics*  metrics2 = &size->ttmetrics;      metrics->x_ppem = 0;      metrics->y_ppem = 0;      metrics2->rotated   = FALSE;      metrics2->stretched = FALSE;      /* set default compensation (all 0) */      for ( i = 0; i < 4; i++ )        metrics2->compensations[i] = 0;    }    /* allocate function defs, instruction defs, cvt, and storage area */    if ( FT_NEW_ARRAY( size->function_defs,    size->max_function_defs    ) ||         FT_NEW_ARRAY( size->instruction_defs, size->max_instruction_defs ) ||         FT_NEW_ARRAY( size->cvt,              size->cvt_size             ) ||         FT_NEW_ARRAY( size->storage,          size->storage_size         ) )      goto Exit;    /* reserve twilight zone */    n_twilight = maxp->maxTwilightPoints;    /* there are 4 phantom points (do we need this?) */    n_twilight += 4;    error = tt_glyphzone_new( memory, n_twilight, 0, &size->twilight );    if ( error )      goto Exit;    size->twilight.n_points = n_twilight;

⌨️ 快捷键说明

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