llfontfreetype.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:5k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llfontfreetype.h
  3.  * @brief Font library wrapper
  4.  *
  5.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2002-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLFONTFREETYPE_H
  33. #define LL_LLFONTFREETYPE_H
  34. #include <map>
  35. #include "llpointer.h"
  36. #include "llstl.h"
  37. #include "llimagegl.h"
  38. #include "llfontbitmapcache.h"
  39. // Hack.  FT_Face is just a typedef for a pointer to a struct,
  40. // but there's no simple forward declarations file for FreeType, 
  41. // and the main include file is 200K.  
  42. // We'll forward declare the struct here.  JC
  43. struct FT_FaceRec_;
  44. typedef struct FT_FaceRec_* LLFT_Face;
  45. class LLFontManager
  46. {
  47. public:
  48. static void initClass();
  49. static void cleanupClass();
  50. private:
  51. LLFontManager();
  52. ~LLFontManager();
  53. };
  54. struct LLFontGlyphInfo
  55. {
  56. LLFontGlyphInfo(U32 index);
  57. U32 mGlyphIndex;
  58. // Metrics
  59. S32 mWidth; // In pixels
  60. S32 mHeight; // In pixels
  61. F32 mXAdvance; // In pixels
  62. F32 mYAdvance; // In pixels
  63. // Information for actually rendering
  64. S32 mXBitmapOffset; // Offset to the origin in the bitmap
  65. S32 mYBitmapOffset; // Offset to the origin in the bitmap
  66. S32 mXBearing; // Distance from baseline to left in pixels
  67. S32 mYBearing; // Distance from baseline to top in pixels
  68. S32 mBitmapNum; // Which bitmap in the bitmap cache contains this glyph
  69. };
  70. extern LLFontManager *gFontManagerp;
  71. class LLFontFreetype : public LLRefCount
  72. {
  73. public:
  74. LLFontFreetype();
  75. ~LLFontFreetype();
  76. // is_fallback should be true for fallback fonts that aren't used
  77. // to render directly (Unicode backup, primarily)
  78. BOOL loadFace(const std::string& filename, F32 point_size, F32 vert_dpi, F32 horz_dpi, S32 components, BOOL is_fallback);
  79. typedef std::vector<LLPointer<LLFontFreetype> > font_vector_t;
  80. void setFallbackFonts(const font_vector_t &font);
  81. const font_vector_t &getFallbackFonts() const;
  82. // Global font metrics - in units of pixels
  83. F32 getLineHeight() const;
  84. F32 getAscenderHeight() const;
  85. F32 getDescenderHeight() const;
  86. // For a lowercase "g":
  87. //
  88. // ------------------------------
  89. //                      ^     ^
  90. //  |     |
  91. // xxx x    |Ascender
  92. //            x   x     v     |
  93. // ---------   xxxx-------------- Baseline
  94. // ^        x        |
  95. //  | Descender    x           |
  96. // v xxxx           |LineHeight
  97. //  -----------------------    |
  98. //                             v
  99. // ------------------------------
  100. enum
  101. {
  102. FIRST_CHAR = 32, 
  103. NUM_CHARS = 127 - 32, 
  104. LAST_CHAR_BASIC = 127,
  105. // Need full 8-bit ascii range for spanish
  106. NUM_CHARS_FULL = 255 - 32,
  107. LAST_CHAR_FULL = 255
  108. };
  109. F32 getXAdvance(llwchar wc) const;
  110. F32 getXAdvance(const LLFontGlyphInfo* glyph) const;
  111. F32 getXKerning(llwchar char_left, llwchar char_right) const; // Get the kerning between the two characters
  112. F32 getXKerning(const LLFontGlyphInfo* left_glyph_info, const LLFontGlyphInfo* right_glyph_info) const; // Get the kerning between the two characters
  113. LLFontGlyphInfo* getGlyphInfo(llwchar wch) const;
  114. void reset(F32 vert_dpi, F32 horz_dpi);
  115. void destroyGL();
  116. const std::string& getName() const;
  117. const LLPointer<LLFontBitmapCache> getFontBitmapCache() const;
  118. void setStyle(U8 style);
  119. U8 getStyle() const;
  120. private:
  121. void resetBitmapCache();
  122. void setSubImageLuminanceAlpha(U32 x, U32 y, U32 bitmap_num, U32 width, U32 height, U8 *data, S32 stride = 0) const;
  123. BOOL hasGlyph(llwchar wch) const; // Has a glyph for this character
  124. LLFontGlyphInfo* addGlyph(llwchar wch) const; // Add a new character to the font if necessary
  125. LLFontGlyphInfo* addGlyphFromFont(const LLFontFreetype *fontp, llwchar wch, U32 glyph_index) const; // Add a glyph from this font to the other (returns the glyph_index, 0 if not found)
  126. void renderGlyph(U32 glyph_index) const;
  127. void insertGlyphInfo(llwchar wch, LLFontGlyphInfo* gi) const;
  128. std::string mName;
  129. U8 mStyle;
  130. F32 mPointSize;
  131. F32 mAscender;
  132. F32 mDescender;
  133. F32 mLineHeight;
  134. LLFT_Face mFTFace;
  135. BOOL mIsFallback;
  136. font_vector_t mFallbackFonts; // A list of fallback fonts to look for glyphs in (for Unicode chars)
  137. BOOL mValid;
  138. typedef std::map<llwchar, LLFontGlyphInfo*> char_glyph_info_map_t;
  139. mutable char_glyph_info_map_t mCharGlyphInfoMap; // Information about glyph location in bitmap
  140. mutable LLPointer<LLFontBitmapCache> mFontBitmapCachep;
  141. mutable S32 mRenderGlyphCount;
  142. mutable S32 mAddGlyphCount;
  143. };
  144. #endif // LL_FONTFREETYPE_H