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

📄 ftcommon.i

📁 freetype库的应用demo,里面包含freetype的很多实例
💻 I
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************//*                                                                          *//*  The FreeType project -- a free and portable quality TrueType renderer.  *//*                                                                          *//*  Copyright 1996-2000, 2001, 2002, 2003, 2004, 2005 by                    *//*  D. Turner, R.Wilhelm, and W. Lemberg                                    *//*                                                                          *//*                                                                          *//*  ftcommon.i - common routines for the FreeType demo programs.            *//*                                                                          *//****************************************************************************/#include <ft2build.h>#include FT_FREETYPE_H#include FT_CACHE_H#include FT_CACHE_MANAGER_H#include FT_STROKER_H#include FT_BITMAP_H#include FT_SYNTHESIS_H  /* the following header shouldn't be used in normal programs */#include FT_INTERNAL_DEBUG_H#include "common.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdarg.h>  /* forward declarations */  extern void  PanicZ( const char*  message );  FT_Error   error;  FT_Bitmap  ft_bitmap;  /*************************************************************************/  /*************************************************************************/  /*****                                                               *****/  /*****                 DISPLAY-SPECIFIC DEFINITIONS                  *****/  /*****                                                               *****/  /*************************************************************************/  /*************************************************************************/#include "graph.h"#include "grfont.h"#define DIM_X      500#define DIM_Y      400#define CENTER_X   ( bit.width / 2 )#define CENTER_Y   ( bit.rows / 2 )#define MAXPTSIZE  500                 /* dtp */  char   Header[128];  char*  new_header = 0;  const unsigned char*  Text = (unsigned char*)    "The quick brown fox jumps over the lazy dog 0123456789 "    "\342\352\356\373\364\344\353\357\366\374\377\340\371\351\350\347 "    "&#~\"\'(-`_^@)=+\260 ABCDEFGHIJKLMNOPQRSTUVWXYZ "    "$\243^\250*\265\371%!\247:/;.,?<>";  grSurface*  surface;      /* current display surface */  grBitmap    bit;          /* current display bitmap  */  static grColor  fore_color = { 0 };  int  Fail;  int     graph_init  = 0;  double  the_gamma   = 1.0;  enum {    RENDER_MODE_ALL = 0,    RENDER_MODE_EMBOLDEN,    RENDER_MODE_STROKE,    RENDER_MODE_TEXT,    RENDER_MODE_WATERFALL,    RENDER_MODE_GAMMAGRID   /* this mode must be the last one */  } render_mode = 0;  int  debug       = 0;  int  trace_level = 0;#define RASTER_BUFF_SIZE   32768  char  raster_buff[RASTER_BUFF_SIZE];#undef  NODEBUG#ifndef NODEBUG#define LOG( x )  LogMessage##x  void  LogMessage( const char*  fmt, ... )  {    va_list  ap;    va_start( ap, fmt );    vfprintf( stderr, fmt, ap );    va_end( ap );  }#else /* !DEBUG */#define LOG( x )  /* */#endif  /* PanicZ */  void  PanicZ( const char*  message )  {    fprintf( stderr, "%s\n  error = 0x%04x\n", message, error );    exit( 1 );  }  /* clear the `bit' bitmap/pixmap */  static void  Clear_Display( void )  {    long  image_size = (long)bit.pitch * bit.rows;    if ( image_size < 0 )      image_size = -image_size;    memset( bit.buffer, 255, image_size );  }  /* initialize the display bitmap `bit' */  static void  Init_Display( void )  {    grInitDevices();    bit.mode  = gr_pixel_mode_rgb24;    bit.width = DIM_X;    bit.rows  = DIM_Y;    bit.grays = 256;    surface = grNewSurface( 0, &bit );    if ( !surface )      PanicZ( "could not allocate display surface\n" );    grSetGlyphGamma( the_gamma );    graph_init = 1;  }#define MAX_BUFFER  300000  /*************************************************************************/  /*************************************************************************/  /*****                                                               *****/  /*****               FREETYPE-SPECIFIC DEFINITIONS                   *****/  /*****                                                               *****/  /*************************************************************************/  /*************************************************************************/  FT_Library      library;       /* the FreeType library            */  FTC_Manager     cache_manager; /* the cache manager               */  FTC_ImageCache  image_cache;   /* the glyph image cache           */  FTC_SBitCache   sbits_cache;   /* the glyph small bitmaps cache   */  FTC_CMapCache   cmap_cache;    /* the charmap cache..             */  FT_Face         face;          /* the font face                   */  FT_Size         size;          /* the font size                   */  FT_GlyphSlot    glyph;         /* the glyph slot                  */  FTC_ImageTypeRec  current_font;  int  dump_cache_stats = 0;  /* do we need to dump cache statistics? */  int  use_sbits_cache  = 1;  int  num_indices;           /* number of glyphs or characters */  int  ptsize;                /* current point size             */  FT_Encoding  encoding = FT_ENCODING_NONE;  int  hinted    = 1;         /* is glyph hinting active?    */  int  antialias = 1;         /* is anti-aliasing active?    */  int  use_sbits = 1;         /* do we use embedded bitmaps? */  int  low_prec  = 0;         /* force low precision         */  int  autohint  = 0;         /* force auto-hinting          */  int  lcd_mode  = 0;         /* 0 - 5                       */  int  Num;                   /* current first index         */  int  res = 72;#define MAX_GLYPH_BYTES  150000   /* 150kB for the glyph image cache */#define FLOOR( x )  (   (x)        & -64 )#define CEIL( x )   ( ( (x) + 63 ) & -64 )#define TRUNC( x )  (   (x) >> 6 )  /* this simple record is used to model a given `installed' face */  typedef struct  TFont_  {    const char*  filepathname;    int          face_index;    int          cmap_index;    int          num_indices;  } TFont, *PFont;  static PFont*  fonts = NULL;  static int     num_fonts;  static int     max_fonts = 0;  static  const char*  file_suffixes[] =  {    ".ttf",    ".ttc",    ".otf",    ".pfa",    ".pfb",    0  };  static unsigned long  make_tag( char  *s )  {    int            i;    unsigned long  l = 0;    for ( i = 0; i < 4; i++ )    {      if ( !s[i] )        break;      l <<= 8;      l  += (unsigned long)s[i];    }    return l;  }  static int  install_font_file( char*  filepath )  {    static char   filename[1024 + 5];    int           i, len, suffix_len, num_faces;    const char**  suffix;    len = strlen( filepath );    if ( len > 1024 )      len = 1024;    strncpy( filename, filepath, len );    filename[len] = 0;    error = FT_New_Face( library, filename, 0, &face );    if ( !error )      goto Success;    /* could not open the file directly; we will now try various */    /* suffixes like `.ttf' or `.pfb'                            */#ifndef macintosh    suffix     = file_suffixes;    suffix_len = 0;    i          = len - 1;    while ( i > 0 && filename[i] != '\\' && filename[i] != '/' )    {      if ( filename[i] == '.' )      {        suffix_len = i;        break;      }      i--;    }    if ( suffix_len == 0 )    {      for ( suffix = file_suffixes; suffix[0]; suffix++ )      {        /* try with current suffix */        strcpy( filename + len, suffix[0] );        error = FT_New_Face( library, filename, 0, &face );        if ( !error )          goto Success;      }    }#endif /* !macintosh */    /* really couldn't open this file */    return -1;  Success:    /* allocate new font object */    num_faces = face->num_faces;    for ( i = 0; i < num_faces; i++ )    {      PFont  font;      if ( i > 0 )      {        error = FT_New_Face( library, filename, i, &face );        if ( error )          continue;      }      if ( encoding != FT_ENCODING_NONE )      {        error = FT_Select_Charmap( face, encoding );        if ( error )        {          FT_Done_Face( face );          face = NULL;          continue;        }      }      font = (PFont)malloc( sizeof ( *font ) );      font->filepathname = (char*)malloc( strlen( filename ) + 1 );      font->face_index   = i;      font->cmap_index   = face->charmap ? FT_Get_Charmap_Index( face->charmap ) : 0;      switch ( encoding )      {      case FT_ENCODING_NONE:        font->num_indices = face->num_glyphs;        break;      case FT_ENCODING_UNICODE:        font->num_indices = 0x110000L;        break;      case FT_ENCODING_MS_SYMBOL:      case FT_ENCODING_ADOBE_LATIN_1:      case FT_ENCODING_ADOBE_STANDARD:      case FT_ENCODING_ADOBE_EXPERT:      case FT_ENCODING_ADOBE_CUSTOM:      case FT_ENCODING_APPLE_ROMAN:        font->num_indices = 0x100L;        break;      default:        font->num_indices = 0x10000L;      }      strcpy( (char*)font->filepathname, filename );      FT_Done_Face( face );      face = NULL;      if ( max_fonts == 0 )      {        max_fonts = 16;        fonts     = (PFont*)calloc( max_fonts, sizeof ( PFont ) );      }      else if ( num_fonts >= max_fonts )

⌨️ 快捷键说明

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