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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llfontgl.h
  3.  * @author Doug Soo
  4.  * @brief Wrapper around FreeType
  5.  *
  6.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2001-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #ifndef LL_LLFONTGL_H
  34. #define LL_LLFONTGL_H
  35. #include "llcoord.h"
  36. #include "llfontregistry.h"
  37. #include "llimagegl.h"
  38. #include "llpointer.h"
  39. #include "llrect.h"
  40. #include "v2math.h"
  41. class LLColor4;
  42. // Key used to request a font.
  43. class LLFontDescriptor;
  44. class LLFontFreetype;
  45. // Structure used to store previously requested fonts.
  46. class LLFontRegistry;
  47. class LLFontGL
  48. {
  49. public:
  50. enum HAlign
  51. {
  52. // Horizontal location of x,y coord to render.
  53. LEFT = 0, // Left align
  54. RIGHT = 1, // Right align
  55. HCENTER = 2, // Center
  56. };
  57. enum VAlign
  58. {
  59. // Vertical location of x,y coord to render.
  60. TOP = 3, // Top align
  61. VCENTER = 4, // Center
  62. BASELINE = 5, // Baseline
  63. BOTTOM = 6 // Bottom
  64. };
  65. enum StyleFlags
  66. {
  67. // text style to render.  May be combined (these are bit flags)
  68. NORMAL    = 0x00,
  69. BOLD      = 0x01,
  70. ITALIC    = 0x02,
  71. UNDERLINE = 0x04
  72. };
  73. enum ShadowType
  74. {
  75. NO_SHADOW,
  76. DROP_SHADOW,
  77. DROP_SHADOW_SOFT
  78. };
  79. LLFontGL();
  80. ~LLFontGL();
  81. void reset(); // Reset a font after GL cleanup.  ONLY works on an already loaded font.
  82. void destroyGL();
  83. BOOL loadFace(const std::string& filename, F32 point_size, const F32 vert_dpi, const F32 horz_dpi, const S32 components, BOOL is_fallback);
  84. S32 render(const LLWString &text, S32 begin_offset, F32 x, F32 y, const LLColor4 &color, HAlign halign = LEFT,  VAlign valign = BASELINE, U8 style = NORMAL,
  85.            ShadowType shadow = NO_SHADOW, S32 max_chars = S32_MAX, S32 max_pixels = S32_MAX, F32* right_x=NULL, BOOL use_ellipses = FALSE) const;
  86. S32 render(const LLWString &text, S32 begin_offset, F32 x, F32 y, const LLColor4 &color) const;
  87. // renderUTF8 does a conversion, so is slower!
  88. S32 renderUTF8(const std::string &text, S32 begin_offset, F32 x, F32 y, const LLColor4 &color, HAlign halign,  VAlign valign, U8 style, ShadowType shadow, S32 max_chars, S32 max_pixels,  F32* right_x, BOOL use_ellipses) const;
  89. S32 renderUTF8(const std::string &text, S32 begin_offset, S32 x, S32 y, const LLColor4 &color) const;
  90. S32 renderUTF8(const std::string &text, S32 begin_offset, S32 x, S32 y, const LLColor4 &color, HAlign halign, VAlign valign, U8 style = NORMAL, ShadowType shadow = NO_SHADOW) const;
  91. // font metrics - override for LLFontFreetype that returns units of virtual pixels
  92. F32 getLineHeight() const;
  93. F32 getAscenderHeight() const;
  94. F32 getDescenderHeight() const;
  95. S32 getWidth(const std::string& utf8text) const;
  96. S32 getWidth(const llwchar* wchars) const;
  97. S32 getWidth(const std::string& utf8text, S32 offset, S32 max_chars ) const;
  98. S32 getWidth(const llwchar* wchars, S32 offset, S32 max_chars) const;
  99. F32 getWidthF32(const std::string& utf8text) const;
  100. F32 getWidthF32(const llwchar* wchars) const;
  101. F32 getWidthF32(const std::string& text, S32 offset, S32 max_chars ) const;
  102. F32 getWidthF32(const llwchar* wchars, S32 offset, S32 max_chars) const;
  103. // The following are called often, frequently with large buffers, so do not use a string interface
  104. // Returns the max number of complete characters from text (up to max_chars) that can be drawn in max_pixels
  105. typedef enum e_word_wrap_style
  106. {
  107. ONLY_WORD_BOUNDARIES,
  108. WORD_BOUNDARY_IF_POSSIBLE,
  109. ANYWHERE
  110. } EWordWrapStyle ;
  111. S32 maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_chars = S32_MAX, EWordWrapStyle end_on_word_boundary = ANYWHERE) const;
  112. // Returns the index of the first complete characters from text that can be drawn in max_pixels
  113. // given that the character at start_pos should be the last character (or as close to last as possible).
  114. S32 firstDrawableChar(const llwchar* wchars, F32 max_pixels, S32 text_len, S32 start_pos=S32_MAX, S32 max_chars = S32_MAX) const;
  115. // Returns the index of the character closest to pixel position x (ignoring text to the right of max_pixels and max_chars)
  116. S32 charFromPixelOffset(const llwchar* wchars, S32 char_offset, F32 x, F32 max_pixels=F32_MAX, S32 max_chars = S32_MAX, BOOL round = TRUE) const;
  117. const LLFontDescriptor& getFontDesc() const;
  118. static void initClass(F32 screen_dpi, F32 x_scale, F32 y_scale, const std::string& app_dir, const std::vector<std::string>& xui_paths, bool create_gl_textures = true);
  119. // Load sans-serif, sans-serif-small, etc.
  120. // Slow, requires multiple seconds to load fonts.
  121. static bool loadDefaultFonts();
  122. static void destroyDefaultFonts();
  123. static void destroyAllGL();
  124. // Takes a string with potentially several flags, i.e. "NORMAL|BOLD|ITALIC"
  125. static U8 getStyleFromString(const std::string &style);
  126. static std::string getStringFromStyle(U8 style);
  127. static std::string nameFromFont(const LLFontGL* fontp);
  128. static std::string sizeFromFont(const LLFontGL* fontp);
  129. static std::string nameFromHAlign(LLFontGL::HAlign align);
  130. static LLFontGL::HAlign hAlignFromName(const std::string& name);
  131. static std::string nameFromVAlign(LLFontGL::VAlign align);
  132. static LLFontGL::VAlign vAlignFromName(const std::string& name);
  133. static void setFontDisplay(BOOL flag) { sDisplayFont = flag; }
  134. static LLFontGL* getFontMonospace();
  135. static LLFontGL* getFontSansSerifSmall();
  136. static LLFontGL* getFontSansSerif();
  137. static LLFontGL* getFontSansSerifBig();
  138. static LLFontGL* getFontSansSerifHuge();
  139. static LLFontGL* getFontSansSerifBold();
  140. static LLFontGL* getFontExtChar();
  141. static LLFontGL* getFont(const LLFontDescriptor& desc);
  142. // Use with legacy names like "SANSSERIF_SMALL" or "OCRA"
  143. static LLFontGL* getFontByName(const std::string& name);
  144. static LLFontGL* getFontDefault(); // default fallback font
  145. static std::string getFontPathLocal();
  146. static std::string getFontPathSystem();
  147. static LLCoordFont sCurOrigin;
  148. static std::vector<LLCoordFont> sOriginStack;
  149. static LLColor4 sShadowColor;
  150. static F32 sVertDPI;
  151. static F32 sHorizDPI;
  152. static F32 sScaleX;
  153. static F32 sScaleY;
  154. static BOOL sDisplayFont ;
  155. static std::string sAppDir; // For loading fonts
  156. private:
  157. friend class LLFontRegistry;
  158. friend class LLTextBillboard;
  159. friend class LLHUDText;
  160. LLFontGL(const LLFontGL &source);
  161. LLFontGL &operator=(const LLFontGL &source);
  162. LLFontDescriptor mFontDescriptor;
  163. LLPointer<LLFontFreetype> mFontFreetype;
  164. void renderQuad(const LLRectf& screen_rect, const LLRectf& uv_rect, F32 slant_amt) const;
  165. void drawGlyph(const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4& color, U8 style, ShadowType shadow, F32 drop_shadow_fade) const;
  166. // Registry holds all instantiated fonts.
  167. static LLFontRegistry* sFontRegistry;
  168. };
  169. #endif