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

📄 ttobjs.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 3 页
字号:
/***************************************************************************//*                                                                         *//*  ttobjs.c                                                               *//*                                                                         *//*    Objects manager (body).                                              *//*                                                                         *//*  Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by             *//*  David Turner, Robert Wilhelm, and Werner Lemberg.                      *//*                                                                         *//*  This file is part of the FreeType project, and may only be used,       *//*  modified, and distributed under the terms of the FreeType project      *//*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     *//*  this file you indicate that you have read the license and              *//*  understand and accept it fully.                                        *//*                                                                         *//***************************************************************************/#include <ft2build.h>#include FT_INTERNAL_DEBUG_H#include FT_INTERNAL_CALC_H#include FT_INTERNAL_STREAM_H#include FT_TRUETYPE_IDS_H#include FT_TRUETYPE_TAGS_H#include FT_INTERNAL_SFNT_H#include "ttgload.h"#include "ttpload.h"#include "tterrors.h"#ifdef TT_USE_BYTECODE_INTERPRETER#include "ttinterp.h"#endif#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING#include FT_TRUETYPE_UNPATENTED_H#endif#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT#include "ttgxvar.h"#endif  /*************************************************************************/  /*                                                                       */  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */  /* messages during execution.                                            */  /*                                                                       */#undef  FT_COMPONENT#define FT_COMPONENT  trace_ttobjs#ifdef TT_USE_BYTECODE_INTERPRETER  /*************************************************************************/  /*                                                                       */  /*                       GLYPH ZONE FUNCTIONS                            */  /*                                                                       */  /*************************************************************************/  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    tt_glyphzone_done                                                  */  /*                                                                       */  /* <Description>                                                         */  /*    Deallocate a glyph zone.                                           */  /*                                                                       */  /* <Input>                                                               */  /*    zone :: A pointer to the target glyph zone.                        */  /*                                                                       */  FT_LOCAL_DEF( void )  tt_glyphzone_done( TT_GlyphZone  zone )  {    FT_Memory  memory = zone->memory;    if ( memory )    {      FT_FREE( zone->contours );      FT_FREE( zone->tags );      FT_FREE( zone->cur );      FT_FREE( zone->org );      FT_FREE( zone->orus );      zone->max_points   = zone->n_points   = 0;      zone->max_contours = zone->n_contours = 0;      zone->memory       = NULL;    }  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    tt_glyphzone_new                                                   */  /*                                                                       */  /* <Description>                                                         */  /*    Allocate a new glyph zone.                                         */  /*                                                                       */  /* <Input>                                                               */  /*    memory      :: A handle to the current memory object.              */  /*                                                                       */  /*    maxPoints   :: The capacity of glyph zone in points.               */  /*                                                                       */  /*    maxContours :: The capacity of glyph zone in contours.             */  /*                                                                       */  /* <Output>                                                              */  /*    zone        :: A pointer to the target glyph zone record.          */  /*                                                                       */  /* <Return>                                                              */  /*    FreeType error code.  0 means success.                             */  /*                                                                       */  FT_LOCAL_DEF( FT_Error )  tt_glyphzone_new( FT_Memory     memory,                    FT_UShort     maxPoints,                    FT_Short      maxContours,                    TT_GlyphZone  zone )  {    FT_Error  error;    FT_MEM_ZERO( zone, sizeof ( *zone ) );    zone->memory = memory;    if ( FT_NEW_ARRAY( zone->org,      maxPoints   ) ||         FT_NEW_ARRAY( zone->cur,      maxPoints   ) ||         FT_NEW_ARRAY( zone->orus,     maxPoints   ) ||         FT_NEW_ARRAY( zone->tags,     maxPoints   ) ||         FT_NEW_ARRAY( zone->contours, maxContours ) )    {      tt_glyphzone_done( zone );    }    else    {      zone->max_points   = maxPoints;      zone->max_contours = maxContours;    }    return error;  }#endif /* TT_USE_BYTECODE_INTERPRETER */  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    tt_face_init                                                       */  /*                                                                       */  /* <Description>                                                         */  /*    Initialize a given TrueType face object.                           */  /*                                                                       */  /* <Input>                                                               */  /*    stream     :: The source font stream.                              */  /*                                                                       */  /*    face_index :: The index of the font face in the resource.          */  /*                                                                       */  /*    num_params :: Number of additional generic parameters.  Ignored.   */  /*                                                                       */  /*    params     :: Additional generic parameters.  Ignored.             */  /*                                                                       */  /* <InOut>                                                               */  /*    face       :: The newly built face object.                         */  /*                                                                       */  /* <Return>                                                              */  /*    FreeType error code.  0 means success.                             */  /*                                                                       */  FT_LOCAL_DEF( FT_Error )  tt_face_init( FT_Stream      stream,                FT_Face        ttface,      /* TT_Face */                FT_Int         face_index,                FT_Int         num_params,                FT_Parameter*  params )  {    FT_Error      error;    FT_Library    library;    SFNT_Service  sfnt;    TT_Face       face = (TT_Face)ttface;    library = face->root.driver->root.library;    sfnt    = (SFNT_Service)FT_Get_Module_Interface( library, "sfnt" );    if ( !sfnt )      goto Bad_Format;    /* create input stream from resource */    if ( FT_STREAM_SEEK( 0 ) )      goto Exit;    /* check that we have a valid TrueType file */    error = sfnt->init_face( stream, face, face_index, num_params, params );    if ( error )      goto Exit;    /* We must also be able to accept Mac/GX fonts, as well as OT ones. */    /* The 0x00020000 tag is completely undocumented; some fonts from   */    /* Arphic made for Chinese Windows 3.1 have this.                   */    if ( face->format_tag != 0x00010000L &&    /* MS fonts  */         face->format_tag != 0x00020000L &&    /* CJK fonts for Win 3.1 */         face->format_tag != TTAG_true   )     /* Mac fonts */    {      FT_TRACE2(( "[not a valid TTF font]\n" ));      goto Bad_Format;    }#ifdef TT_USE_BYTECODE_INTERPRETER    face->root.face_flags |= FT_FACE_FLAG_HINTER;#endif    /* If we are performing a simple font format check, exit immediately. */    if ( face_index < 0 )      return TT_Err_Ok;    /* Load font directory */    error = sfnt->load_face( stream, face, face_index, num_params, params );    if ( error )      goto Exit;    error = tt_face_load_hdmx( face, stream );    if ( error )      goto Exit;    if ( face->root.face_flags & FT_FACE_FLAG_SCALABLE )    {#ifdef FT_CONFIG_OPTION_INCREMENTAL      if ( !face->root.internal->incremental_interface )        error = tt_face_load_loca( face, stream );      if ( !error )        error = tt_face_load_cvt( face, stream )  ||                tt_face_load_fpgm( face, stream ) ||                tt_face_load_prep( face, stream );#else      if ( !error )        error = tt_face_load_loca( face, stream ) ||                tt_face_load_cvt( face, stream )  ||                tt_face_load_fpgm( face, stream ) ||                tt_face_load_prep( face, stream );#endif    }#if defined( TT_CONFIG_OPTION_UNPATENTED_HINTING    ) && \    !defined( TT_CONFIG_OPTION_BYTECODE_INTERPRETER )    {      FT_Bool  unpatented_hinting;      int      i;      /* Determine whether unpatented hinting is to be used for this face. */      unpatented_hinting = FT_BOOL        ( library->debug_hooks[FT_DEBUG_HOOK_UNPATENTED_HINTING] != NULL );      for ( i = 0; i < num_params && !face->unpatented_hinting; i++ )        if ( params[i].tag == FT_PARAM_TAG_UNPATENTED_HINTING )          unpatented_hinting = TRUE;      /* Compare the face with a list of well-known `tricky' fonts. */      /* This list shall be expanded as we find more of them.       */      if ( !unpatented_hinting )      {        static const char* const  trick_names[] =        {          "DFKaiSho-SB",     /* dfkaisb.ttf */          "DFKai-SB",        /* kaiu.ttf */          "HuaTianSongTi?",  /* htst3.ttf */          "MingLiU",         /* mingliu.ttf & mingliu.ttc */          "PMingLiU",        /* mingliu.ttc */          "MingLi43",        /* mingli.ttf */          NULL        };        int  nn;        /* Note that we only check the face name at the moment; it might */        /* be worth to do more checks for a few special cases.           */        for ( nn = 0; trick_names[nn] != NULL; nn++ )        {          if ( ttface->family_name                               &&               ft_strstr( ttface->family_name, trick_names[nn] ) )          {            unpatented_hinting = 1;            break;          }        }      }      ttface->internal->ignore_unpatented_hinter =        FT_BOOL( !unpatented_hinting );    }#endif /* TT_CONFIG_OPTION_UNPATENTED_HINTING &&          !TT_CONFIG_OPTION_BYTECODE_INTERPRETER */    /* initialize standard glyph loading routines */    TT_Init_Glyph_Loading( face );  Exit:    return error;  Bad_Format:    error = TT_Err_Unknown_File_Format;    goto Exit;  }  /*************************************************************************/  /*                                                                       */

⌨️ 快捷键说明

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