ftfuncs.h
上传用户:lctgjx
上传日期:2022-06-04
资源大小:8887k
文件大小:7k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2. Copyright (c) 1998-2002 by Juliusz Chroboczek
  3. Copyright (c) 2003 After X-TT Project, All rights reserved.
  4. Permission is hereby granted, free of charge, to any person obtaining a copy
  5. of this software and associated documentation files (the "Software"), to deal
  6. in the Software without restriction, including without limitation the rights
  7. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  8. copies of the Software, and to permit persons to whom the Software is
  9. furnished to do so, subject to the following conditions:
  10. The above copyright notice and this permission notice shall be included in
  11. all copies or substantial portions of the Software.
  12. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  13. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  14. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
  15. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  16. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  17. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  18. THE SOFTWARE.
  19. */
  20. /* $XFree86: xc/lib/font/FreeType/ftfuncs.h,v 1.17 2003/12/21 04:02:07 dawes Exp $ */
  21. /* Number of buckets in the hashtable holding faces */
  22. #define NUMFACEBUCKETS 32
  23. /* Glyphs are held in segments of this size */
  24. #define FONTSEGMENTSIZE 16
  25. /* A structure that holds bitmap order and padding info. */
  26. typedef struct {
  27.     int bit;                    /* bit order */
  28.     int byte;                   /* byte order */
  29.     int glyph;                  /* glyph pad size */
  30.     int scan;                   /* machine word size */
  31. } FontBitmapFormatRec, *FontBitmapFormatPtr;
  32. struct FTSize_s;
  33. /* At the lowest level, there is face; FTFaces are in one-to-one
  34.    correspondence with TrueType faces.  Multiple instance may share
  35.    the same face. */
  36. typedef struct _FTFace {
  37.     char *filename;
  38.     FT_Face face;
  39.     int bitmap;
  40.     FT_UInt num_hmetrics;
  41.     struct _FTInstance *instances;
  42.     struct _FTInstance *active_instance;
  43.     struct _FTFace *next;       /* link to next face in bucket */
  44. } FTFaceRec, *FTFacePtr;
  45. /* A transformation matrix with resolution information */
  46. typedef struct _FTNormalisedTransformation {
  47.     double scale;
  48.     int nonIdentity;            /* if 0, matrix is the identity */
  49.     FT_Matrix matrix;
  50.     int xres, yres;
  51. } FTNormalisedTransformationRec, *FTNormalisedTransformationPtr;
  52. #define FT_PROPORTIONAL 0
  53. #define FT_MONOSPACED 1
  54. #define FT_CHARCELL 2
  55. #define FT_AVAILABLE_UNKNOWN 0
  56. #define FT_AVAILABLE_NO 1
  57. #define FT_AVAILABLE_METRICS 2
  58. #define FT_AVAILABLE_RASTERISED 3
  59. #define FT_GET_GLYPH_BOTH   0x01
  60. #define FT_GET_GLYPH_METRICS_ONLY 0x02
  61. #define FT_GET_DUMMY   0x04
  62. #define FT_FORCE_CONSTANT_SPACING 0x08
  63. #define TTCAP_DOUBLE_STRIKE 0x0001
  64. #define TTCAP_DOUBLE_STRIKE_MKBOLD_EDGE_LEFT 0x0002
  65. #define TTCAP_DOUBLE_STRIKE_CORRECT_B_BOX_WIDTH 0x0008
  66. #define TTCAP_IS_VERY_LAZY 0x0010
  67. #define TTCAP_DISABLE_DEFAULT_VERY_LAZY 0x0020
  68. #define TTCAP_FORCE_C_LSB_FLAG 0x0100
  69. #define TTCAP_FORCE_C_RSB_FLAG 0x0200
  70. #define TTCAP_FORCE_C_OUTSIDE 0x0400
  71. #define TTCAP_MONO_CENTER 0x0800
  72. /* TTCap */
  73. struct TTCapInfo {
  74.     long flags;
  75.     double autoItalic;
  76.     double scaleWidth;
  77.     double scaleBBoxWidth;
  78.     double scaleBBoxHeight;
  79.     int doubleStrikeShift;
  80.     int adjustBBoxWidthByPixel;
  81.     int adjustLeftSideBearingByPixel;
  82.     int adjustRightSideBearingByPixel;
  83.     double scaleBitmap;
  84.     int forceConstantSpacingBegin;
  85.     int forceConstantSpacingEnd;
  86.     /* We don't compare */
  87.     int force_c_adjust_width_by_pixel;
  88.     int force_c_adjust_lsb_by_pixel;
  89.     int force_c_adjust_rsb_by_pixel;
  90.     int force_c_representative_metrics_char_code;
  91.     double force_c_scale_b_box_width;
  92.     double force_c_scale_b_box_height;
  93.     double force_c_scale_lsb;
  94.     double force_c_scale_rsb;
  95.     double vl_slant;
  96.     int lsbShiftOfBitmapAutoItalic;
  97.     int rsbShiftOfBitmapAutoItalic;
  98. };
  99. /* An instance builds on a face by specifying the transformation
  100.    matrix.  Multiple fonts may share the same instance. */
  101. /* This structure caches bitmap data */
  102. typedef struct _FTInstance {
  103.     FTFacePtr face;             /* the associated face */
  104.     FT_Size size;
  105.     FTNormalisedTransformationRec transformation;
  106.     FT_Int32 load_flags;
  107.     FT_ULong strike_index;
  108.     int spacing; /* actual spacing */
  109.     double pixel_size;          /* to calc attributes (actual height) */
  110.     double pixel_width_unit_x;  /* to calc horiz. width (cosine) */
  111.     double pixel_width_unit_y;  /* to calc vert. width (cosine) */
  112.     xCharInfo *charcellMetrics; /* the header's metrics */
  113.     int averageWidth; /* the header's metrics */
  114.     long rawAverageWidth; /* the header's metrics */
  115.     double advance; /* the header's metrics */
  116.     xCharInfo *forceConstantMetrics;
  117.     FontBitmapFormatRec bmfmt;
  118.     unsigned nglyphs;
  119.     CharInfoPtr *glyphs;        /* glyphs and available are used in parallel */
  120.     int **available;
  121.     struct TTCapInfo ttcap;
  122.     int refcount;
  123.     struct _FTInstance *next;   /* link to next instance */
  124. } FTInstanceRec, *FTInstancePtr;
  125. /* A font is an instance with coding information; fonts are in
  126.    one-to-one correspondence with X fonts */
  127. typedef struct _FTFont{
  128.     FTInstancePtr instance;
  129.     FTMappingRec mapping;
  130.     unsigned zero_idx;
  131.     FontInfoPtr info;
  132.     int nranges;
  133.     CharInfoRec dummy_char;
  134.     fsRange *ranges;
  135. } FTFontRec, *FTFontPtr;
  136. #ifndef NOT_IN_FTFUNCS
  137. /* Prototypes for some local functions */
  138. static int FreeTypeOpenFace(FTFacePtr *facep, char *FTFileName, char *realFileName, int faceNumber);
  139. static void FreeTypeFreeFace(FTFacePtr face);
  140. static int 
  141. FreeTypeOpenInstance(FTInstancePtr *instancep, FTFacePtr face,
  142.                      char *FTFileName, FTNormalisedTransformationPtr trans,
  143.                      int spacing, FontBitmapFormatPtr bmfmt,
  144.      struct TTCapInfo *tmp_ttcap, FT_Int32 load_flags);
  145. static void FreeTypeFreeInstance(FTInstancePtr instance);
  146. static int
  147. FreeTypeInstanceGetGlyph(unsigned idx, int flags, CharInfoPtr *g, FTInstancePtr instance);
  148. static int
  149. FreeTypeInstanceGetGlyphMetrics(unsigned idx, int flags,
  150. xCharInfo **metrics, FTInstancePtr instance );
  151. static int 
  152. FreeTypeRasteriseGlyph(unsigned idx, int flags, CharInfoPtr tgp, 
  153.        FTInstancePtr instance, int hasMetrics );
  154. static void FreeTypeFreeFont(FTFontPtr font);
  155. static void FreeTypeFreeXFont(FontPtr pFont, int freeProps);
  156. static void FreeTypeUnloadXFont(FontPtr pFont);
  157. static int
  158. FreeTypeAddProperties(FTFontPtr font, FontScalablePtr vals, FontInfoPtr info, 
  159.                       char *fontname, int rawAverageWidth, Bool font_properties);
  160. static int FreeTypeFontGetGlyph(unsigned code, int flags, CharInfoPtr *g, FTFontPtr font);
  161. static int
  162. FreeTypeLoadFont(FTFontPtr font, FontInfoPtr info, FTFacePtr face,
  163.  char *FTFileName, FontScalablePtr vals, FontEntryPtr entry,
  164.                  FontBitmapFormatPtr bmfmt, FT_Int32 load_flags, 
  165.  struct TTCapInfo *tmp_ttcap, char *dynStrTTCapCodeRange,
  166.  int ttcap_spacing );
  167. #endif /* NOT_IN_FTFUNCS */