FTGL  2.2.0
FTFont.h
Go to the documentation of this file.
1 /*
2  * FTGL - OpenGL font library
3  *
4  * Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
5  * Copyright (c) 2008 Sam Hocevar <sam@hocevar.net>
6  * Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining
9  * a copy of this software and associated documentation files (the
10  * "Software"), to deal in the Software without restriction, including
11  * without limitation the rights to use, copy, modify, merge, publish,
12  * distribute, sublicense, and/or sell copies of the Software, and to
13  * permit persons to whom the Software is furnished to do so, subject to
14  * the following conditions:
15  *
16  * The above copyright notice and this permission notice shall be
17  * included in all copies or substantial portions of the Software.
18  *
19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
23  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26  */
27 
28 #ifndef __ftgl__
29 # warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
30 # include <FTGL/ftgl.h>
31 #endif
32 
33 #ifndef __FTFont__
34 #define __FTFont__
35 
36 #ifdef __cplusplus
37 
38 class FTFontImpl;
39 
57 {
58  protected:
64  FTFont(char const *fontFilePath);
65 
74  FTFont(const unsigned char *pBufferBytes, size_t bufferSizeInBytes);
75 
76  private:
77  /* Allow our internal subclasses to access the private constructor */
78  friend class FTBitmapFont;
79  friend class FTBufferFont;
80  friend class FTExtrudeFont;
81  friend class FTOutlineFont;
82  friend class FTPixmapFont;
83  friend class FTPolygonFont;
84  friend class FTTextureFont;
85 
92  FTFont(FTFontImpl *pImpl);
93 
94  public:
95  virtual ~FTFont();
96 
106  virtual bool Attach(const char* fontFilePath);
107 
118  virtual bool Attach(const unsigned char *pBufferBytes,
119  size_t bufferSizeInBytes);
120 
128  virtual void GlyphLoadFlags(FT_Int flags);
129 
137  virtual bool CharMap(FT_Encoding encoding);
138 
144  virtual unsigned int CharMapCount() const;
145 
151  virtual FT_Encoding* CharMapList();
152 
160  virtual bool FaceSize(const unsigned int size,
161  const unsigned int res = 72);
162 
168  virtual unsigned int FaceSize() const;
169 
176  virtual void Depth(float depth);
177 
184  virtual void Outset(float outset);
185 
193  virtual void Outset(float front, float back);
194 
201  virtual void UseDisplayList(bool useList);
202 
208  virtual float Ascender() const;
209 
215  virtual float Descender() const;
216 
222  virtual float LineHeight() const;
223 
236  virtual FTBBox BBox(const char *string, const int len = -1,
237  FTPoint position = FTPoint(),
238  FTPoint spacing = FTPoint());
239 
251  void BBox(const char* string, float& llx, float& lly, float& llz,
252  float& urx, float& ury, float& urz)
253  {
254  FTBBox b = BBox(string);
255  llx = b.Lower().Xf(); lly = b.Lower().Yf(); llz = b.Lower().Zf();
256  urx = b.Upper().Xf(); ury = b.Upper().Yf(); urz = b.Upper().Zf();
257  }
258 
271  virtual FTBBox BBox(const wchar_t *string, const int len = -1,
272  FTPoint position = FTPoint(),
273  FTPoint spacing = FTPoint());
274 
286  void BBox(const wchar_t* string, float& llx, float& lly, float& llz,
287  float& urx, float& ury, float& urz)
288  {
289  FTBBox b = BBox(string);
290  llx = b.Lower().Xf(); lly = b.Lower().Yf(); llz = b.Lower().Zf();
291  urx = b.Upper().Xf(); ury = b.Upper().Yf(); urz = b.Upper().Zf();
292  }
293 
305  virtual float Advance(const char* string, const int len = -1,
306  FTPoint spacing = FTPoint());
307 
319  virtual float Advance(const wchar_t* string, const int len = -1,
320  FTPoint spacing = FTPoint());
321 
342  virtual FTPoint Render(const char* string, const int len = -1,
343  FTPoint position = FTPoint(),
344  FTPoint spacing = FTPoint(),
345  int renderMode = FTGL::RENDER_ALL);
346 
367  virtual FTPoint Render(const wchar_t *string, const int len = -1,
368  FTPoint position = FTPoint(),
369  FTPoint spacing = FTPoint(),
370  int renderMode = FTGL::RENDER_ALL);
371 
377  virtual FT_Error Error() const;
378 
379  protected:
380  /* Allow impl to access MakeGlyph */
381  friend class FTFontImpl;
382 
392  virtual FTGlyph* MakeGlyph(FT_GlyphSlot slot) = 0;
393 
394  private:
398  FTFontImpl *impl;
399 };
400 
401 #endif //__cplusplus
402 
404 
412 struct _FTGLFont;
413 typedef struct _FTGLfont FTGLfont;
414 
423 FTGL_EXPORT FTGLfont *ftglCreateCustomFont(char const *fontFilePath,
424  void *data,
425  FTGLglyph * (*makeglyphCallback) (FT_GlyphSlot, void *));
426 
436 FTGL_EXPORT FTGLfont *ftglCreateCustomFontFromMem(const unsigned char *bytes,
437  size_t len, void *data,
438  FTGLglyph * (*makeglyphCallback) (FT_GlyphSlot, void *));
439 
446 
456 FTGL_EXPORT int ftglAttachFile(FTGLfont* font, const char* path);
457 
468 FTGL_EXPORT int ftglAttachData(FTGLfont* font, const unsigned char * data,
469  size_t size);
470 
479 FTGL_EXPORT void ftglSetFontGlyphLoadFlags(FTGLfont* font, FT_Int flags);
480 
488 FTGL_EXPORT int ftglSetFontCharMap(FTGLfont* font, FT_Encoding encoding);
489 
496 FTGL_EXPORT unsigned int ftglGetFontCharMapCount(FTGLfont* font);
497 
504 FTGL_EXPORT FT_Encoding* ftglGetFontCharMapList(FTGLfont* font);
505 
515 FTGL_EXPORT int ftglSetFontFaceSize(FTGLfont* font, unsigned int size,
516  unsigned int res);
517 
524 FTGL_EXPORT unsigned int ftglGetFontFaceSize(FTGLfont* font);
525 
533 FTGL_EXPORT void ftglSetFontDepth(FTGLfont* font, float depth);
534 
544 FTGL_EXPORT void ftglSetFontOutset(FTGLfont* font, float front, float back);
545 
553 FTGL_EXPORT void ftglSetFontDisplayList(FTGLfont* font, int useList);
554 
562 
570 
578 
589 FTGL_EXPORT void ftglGetFontBBox(FTGLfont* font, const char *string,
590  int len, float bounds[6]);
591 
599 FTGL_EXPORT float ftglGetFontAdvance(FTGLfont* font, const char *string);
600 
608 FTGL_EXPORT void ftglRenderFont(FTGLfont* font, const char *string, int mode);
609 
616 FTGL_EXPORT FT_Error ftglGetFontError(FTGLfont* font);
617 
619 
620 #endif // __FTFont__
621 
virtual void Depth(float depth)
Set the extrusion distance for the font.
FTGLfont * ftglCreateCustomFont(char const *fontFilePath, void *data, FTGLglyph *(*makeglyphCallback)(FT_GlyphSlot, void *))
Create a custom FTGL font object.
float ftglGetFontLineHeight(FTGLfont *font)
Gets the line spacing for the font.
void ftglSetFontDisplayList(FTGLfont *font, int useList)
Enable or disable the use of Display Lists inside FTGL.
int ftglAttachFile(FTGLfont *font, const char *path)
Attach auxilliary file to font e.g.
FT_Encoding * ftglGetFontCharMapList(FTGLfont *font)
Get a list of character maps in this face.
FTGL_FLOAT Yf() const
Definition: FTPoint.h:261
FTGLfont * ftglCreateCustomFontFromMem(const unsigned char *bytes, size_t len, void *data, FTGLglyph *(*makeglyphCallback)(FT_GlyphSlot, void *))
Create a custom FTGL font object from a buffer in memory.
FTFont(char const *fontFilePath)
Open and read a font file.
FTExtrudeFont is a specialisation of the FTFont class for handling extruded Polygon fonts...
Definition: FTGLExtrdFont.h:46
void ftglSetFontOutset(FTGLfont *font, float front, float back)
Set the outset distance for the font.
virtual float Ascender() const
Get the global ascender height for the face.
void BBox(const char *string, float &llx, float &lly, float &llz, float &urx, float &ury, float &urz)
Get the bounding box for a string (deprecated).
Definition: FTFont.h:251
virtual FT_Encoding * CharMapList()
Get a list of character maps in this face.
struct _FTGLfont FTGLfont
Definition: FTFont.h:413
void ftglRenderFont(FTGLfont *font, const char *string, int mode)
Render a string of characters.
virtual float Advance(const char *string, const int len=-1, FTPoint spacing=FTPoint())
Get the advance for a string.
virtual float Descender() const
Gets the global descender height for the face.
FTPixmapFont is a specialisation of the FTFont class for handling Pixmap (Grey Scale) fonts...
FTBBox is a convenience class for handling bounding boxes.
Definition: FTBBox.h:42
virtual unsigned int FaceSize() const
Get the current face size in points (1/72 inch).
void ftglDestroyFont(FTGLfont *font)
Destroy an FTGL font object.
#define FTGL_EXPORT
Definition: ftgl.h:134
void ftglSetFontDepth(FTGLfont *font, float depth)
Set the extrusion distance for the font.
virtual unsigned int CharMapCount() const
Get the number of character maps in this face.
virtual float LineHeight() const
Gets the line spacing for the font.
friend class FTFontImpl
Definition: FTFont.h:381
FTTextureFont is a specialisation of the FTFont class for handling Texture mapped fonts...
virtual void Outset(float outset)
Set the outset distance for the font.
FTPoint class is a basic 3-dimensional point or vector.
Definition: FTPoint.h:42
int ftglSetFontCharMap(FTGLfont *font, FT_Encoding encoding)
Set the character map for the face.
float ftglGetFontAscender(FTGLfont *font)
Get the global ascender height for the face.
FTOutlineFont is a specialisation of the FTFont class for handling Vector Outline fonts...
float ftglGetFontAdvance(FTGLfont *font, const char *string)
Get the advance width for a string.
virtual FTPoint Render(const char *string, const int len=-1, FTPoint position=FTPoint(), FTPoint spacing=FTPoint(), int renderMode=FTGL::RENDER_ALL)
Render a string of characters.
unsigned int ftglGetFontCharMapCount(FTGLfont *font)
Get the number of character maps in this face.
int ftglAttachData(FTGLfont *font, const unsigned char *data, size_t size)
Attach auxilliary data to font, e.g.
FT_Error ftglGetFontError(FTGLfont *font)
Query a font for errors.
float ftglGetFontDescender(FTGLfont *font)
Gets the global descender height for the face.
virtual void UseDisplayList(bool useList)
Enable or disable the use of Display Lists inside FTGL.
void ftglGetFontBBox(FTGLfont *font, const char *string, int len, float bounds[6])
Get the bounding box for a string.
FTBufferFont is a specialisation of the FTFont class for handling memory buffer fonts.
Definition: FTBufferFont.h:43
#define FTGL_END_C_DECLS
Definition: ftgl.h:44
int ftglSetFontFaceSize(FTGLfont *font, unsigned int size, unsigned int res)
Set the char size for the current face.
virtual bool CharMap(FT_Encoding encoding)
Set the character map for the face.
virtual FTBBox BBox(const char *string, const int len=-1, FTPoint position=FTPoint(), FTPoint spacing=FTPoint())
Get the bounding box for a string.
unsigned int ftglGetFontFaceSize(FTGLfont *font)
Get the current face size in points (1/72 inch).
#define FTGL_BEGIN_C_DECLS
Definition: ftgl.h:43
virtual FT_Error Error() const
Queries the Font for errors.
FTPolygonFont is a specialisation of the FTFont class for handling tesselated Polygon Mesh fonts...
virtual void GlyphLoadFlags(FT_Int flags)
Set the glyph loading flags.
void ftglSetFontGlyphLoadFlags(FTGLfont *font, FT_Int flags)
Set the glyph loading flags.
FTFont is the public interface for the FTGL library.
Definition: FTFont.h:56
virtual ~FTFont()
virtual bool Attach(const char *fontFilePath)
Attach auxilliary file to font e.g font metrics.
struct _FTGLglyph FTGLglyph
Definition: FTGlyph.h:133
FTPoint const Lower() const
Definition: FTBBox.h:165
FTPoint const Upper() const
Definition: FTBBox.h:159
FTBitmapFont is a specialisation of the FTFont class for handling Bitmap fonts.
FTGL_FLOAT Xf() const
Definition: FTPoint.h:260
FTGlyph is the base class for FTGL glyphs.
Definition: FTGlyph.h:50
void BBox(const wchar_t *string, float &llx, float &lly, float &llz, float &urx, float &ury, float &urz)
Get the bounding box for a string (deprecated).
Definition: FTFont.h:286
FTGL_FLOAT Zf() const
Definition: FTPoint.h:262