Bazaar/FTGL : added OpenGL font rendering library FTGL packaged for Upp

git-svn-id: svn://ultimatepp.org/upp/trunk@3871 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
micio 2011-09-17 17:40:49 +00:00
parent 1fe844e31e
commit 97367a3496
87 changed files with 13522 additions and 0 deletions

180
bazaar/FTGL/FTBBox.h Normal file
View file

@ -0,0 +1,180 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTBBox__
#define __FTBBox__
#ifdef __cplusplus
/**
* FTBBox is a convenience class for handling bounding boxes.
*/
class FTGL_EXPORT FTBBox
{
public:
/**
* Default constructor. Bounding box is set to zero.
*/
FTBBox()
: lower(0.0f, 0.0f, 0.0f),
upper(0.0f, 0.0f, 0.0f)
{}
/**
* Constructor.
*/
FTBBox(float lx, float ly, float lz, float ux, float uy, float uz)
: lower(lx, ly, lz),
upper(ux, uy, uz)
{}
/**
* Constructor.
*/
FTBBox(FTPoint l, FTPoint u)
: lower(l),
upper(u)
{}
/**
* Constructor. Extracts a bounding box from a freetype glyph. Uses
* the control box for the glyph. <code>FT_Glyph_Get_CBox()</code>
*
* @param glyph A freetype glyph
*/
FTBBox(FT_GlyphSlot glyph)
: lower(0.0f, 0.0f, 0.0f),
upper(0.0f, 0.0f, 0.0f)
{
FT_BBox bbox;
FT_Outline_Get_CBox(&(glyph->outline), &bbox);
lower.X(static_cast<float>(bbox.xMin) / 64.0f);
lower.Y(static_cast<float>(bbox.yMin) / 64.0f);
lower.Z(0.0f);
upper.X(static_cast<float>(bbox.xMax) / 64.0f);
upper.Y(static_cast<float>(bbox.yMax) / 64.0f);
upper.Z(0.0f);
}
/**
* Destructor
*/
~FTBBox()
{}
/**
* Mark the bounds invalid by setting all lower dimensions greater
* than the upper dimensions.
*/
void Invalidate()
{
lower = FTPoint(1.0f, 1.0f, 1.0f);
upper = FTPoint(-1.0f, -1.0f, -1.0f);
}
/**
* Determines if this bounding box is valid.
*
* @return True if all lower values are <= the corresponding
* upper values.
*/
bool IsValid()
{
return lower.X() <= upper.X()
&& lower.Y() <= upper.Y()
&& lower.Z() <= upper.Z();
}
/**
* Move the Bounding Box by a vector.
*
* @param vector The vector to move the bbox in 3D space.
*/
FTBBox& operator += (const FTPoint vector)
{
lower += vector;
upper += vector;
return *this;
}
/**
* Combine two bounding boxes. The result is the smallest bounding
* box containing the two original boxes.
*
* @param bbox The bounding box to merge with the second one.
*/
FTBBox& operator |= (const FTBBox& bbox)
{
if(bbox.lower.X() < lower.X()) lower.X(bbox.lower.X());
if(bbox.lower.Y() < lower.Y()) lower.Y(bbox.lower.Y());
if(bbox.lower.Z() < lower.Z()) lower.Z(bbox.lower.Z());
if(bbox.upper.X() > upper.X()) upper.X(bbox.upper.X());
if(bbox.upper.Y() > upper.Y()) upper.Y(bbox.upper.Y());
if(bbox.upper.Z() > upper.Z()) upper.Z(bbox.upper.Z());
return *this;
}
void SetDepth(float depth)
{
if(depth > 0)
upper.Z(lower.Z() + depth);
else
lower.Z(upper.Z() + depth);
}
inline FTPoint const Upper() const
{
return upper;
}
inline FTPoint const Lower() const
{
return lower;
}
private:
/**
* The bounds of the box
*/
FTPoint lower, upper;
};
#endif //__cplusplus
#endif // __FTBBox__

View file

@ -0,0 +1,82 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTBitmapGlyph__
#define __FTBitmapGlyph__
#ifdef __cplusplus
/**
* FTBitmapGlyph is a specialisation of FTGlyph for creating bitmaps.
*/
class FTGL_EXPORT FTBitmapGlyph : public FTGlyph
{
public:
/**
* Constructor
*
* @param glyph The Freetype glyph to be processed
*/
FTBitmapGlyph(FT_GlyphSlot glyph);
/**
* Destructor
*/
virtual ~FTBitmapGlyph();
/**
* Render this glyph at the current pen position.
*
* @param pen The current pen position.
* @param renderMode Render mode to display
* @return The advance distance for this glyph.
*/
virtual const FTPoint& Render(const FTPoint& pen, int renderMode);
};
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* Create a specialisation of FTGLglyph for creating bitmaps.
*
* @param glyph The Freetype glyph to be processed
* @return An FTGLglyph* object.
*/
FTGL_EXPORT FTGLglyph *ftglCreateBitmapGlyph(FT_GlyphSlot glyph);
FTGL_END_C_DECLS
#endif // __FTBitmapGlyph__

127
bazaar/FTGL/FTBuffer.h Normal file
View file

@ -0,0 +1,127 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning Please use <FTGL/ftgl.h> instead of <FTBuffer.h>.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTBuffer__
#define __FTBuffer__
#ifdef __cplusplus
/**
* FTBuffer is a helper class for pixel buffers.
*
* It provides the interface between FTBufferFont and FTBufferGlyph to
* optimise rendering operations.
*
* @see FTBufferGlyph
* @see FTBufferFont
*/
class FTGL_EXPORT FTBuffer
{
public:
/**
* Default constructor.
*/
FTBuffer();
/**
* Destructor
*/
~FTBuffer();
/**
* Get the pen's position in the buffer.
*
* @return The pen's position as an FTPoint object.
*/
inline FTPoint Pos() const
{
return pos;
}
/**
* Set the pen's position in the buffer.
*
* @param arg An FTPoint object with the desired pen's position.
*/
inline void Pos(FTPoint arg)
{
pos = arg;
}
/**
* Set the buffer's size.
*
* @param w The buffer's desired width, in pixels.
* @param h The buffer's desired height, in pixels.
*/
void Size(int w, int h);
/**
* Get the buffer's width.
*
* @return The buffer's width, in pixels.
*/
inline int Width() const { return width; }
/**
* Get the buffer's height.
*
* @return The buffer's height, in pixels.
*/
inline int Height() const { return height; }
/**
* Get the buffer's direct pixel buffer.
*
* @return A read-write pointer to the buffer's pixels.
*/
inline unsigned char *Pixels() const { return pixels; }
private:
/**
* Buffer's width and height.
*/
int width, height;
/**
* Buffer's pixel buffer.
*/
unsigned char *pixels;
/**
* Buffer's internal pen position.
*/
FTPoint pos;
};
#endif //__cplusplus
#endif // __FTBuffer__

View file

@ -0,0 +1,99 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning Please use <FTGL/ftgl.h> instead of <FTBufferFont.h>.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTBufferFont__
#define __FTBufferFont__
#ifdef __cplusplus
/**
* FTBufferFont is a specialisation of the FTFont class for handling
* memory buffer fonts.
*
* @see FTFont
*/
class FTGL_EXPORT FTBufferFont : public FTFont
{
public:
/**
* Open and read a font file. Sets Error flag.
*
* @param fontFilePath font file path.
*/
FTBufferFont(const char* fontFilePath);
/**
* Open and read a font from a buffer in memory. Sets Error flag.
* The buffer is owned by the client and is NOT copied by FTGL. The
* pointer must be valid while using FTGL.
*
* @param pBufferBytes the in-memory buffer
* @param bufferSizeInBytes the length of the buffer in bytes
*/
FTBufferFont(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
/**
* Destructor
*/
~FTBufferFont();
protected:
/**
* Construct a glyph of the correct type.
*
* Clients must override the function and return their specialised
* FTGlyph.
*
* @param slot A FreeType glyph slot.
* @return An FT****Glyph or <code>null</code> on failure.
*/
virtual FTGlyph* MakeGlyph(FT_GlyphSlot slot);
};
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* Create a specialised FTGLfont object for handling memory buffer fonts.
*
* @param file The font file name.
* @return An FTGLfont* object.
*
* @see FTGLfont
*/
FTGL_EXPORT FTGLfont *ftglCreateBufferFont(const char *file);
FTGL_END_C_DECLS
#endif // __FTBufferFont__

View file

@ -0,0 +1,69 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning Please use <FTGL/ftgl.h> instead of <FTBufferGlyph.h>.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTBufferGlyph__
#define __FTBufferGlyph__
#ifdef __cplusplus
/**
* FTBufferGlyph is a specialisation of FTGlyph for memory buffer rendering.
*/
class FTGL_EXPORT FTBufferGlyph : public FTGlyph
{
public:
/**
* Constructor
*
* @param glyph The Freetype glyph to be processed
* @param buffer An FTBuffer object in which to render the glyph.
*/
FTBufferGlyph(FT_GlyphSlot glyph, FTBuffer *buffer);
/**
* Destructor
*/
virtual ~FTBufferGlyph();
/**
* Render this glyph at the current pen position.
*
* @param pen The current pen position.
* @param renderMode Render mode to display
* @return The advance distance for this glyph.
*/
virtual const FTPoint& Render(const FTPoint& pen, int renderMode);
};
#endif //__cplusplus
#endif // __FTBufferGlyph__

104
bazaar/FTGL/FTExtrdGlyph.h Normal file
View file

@ -0,0 +1,104 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTExtrudeGlyph__
#define __FTExtrudeGlyph__
#ifdef __cplusplus
/**
* FTExtrudeGlyph is a specialisation of FTGlyph for creating tessellated
* extruded polygon glyphs.
*/
class FTGL_EXPORT FTExtrudeGlyph : public FTGlyph
{
public:
/**
* Constructor. Sets the Error to Invalid_Outline if the glyph isn't
* an outline.
*
* @param glyph The Freetype glyph to be processed
* @param depth The distance along the z axis to extrude the glyph
* @param frontOutset outset contour size
* @param backOutset outset contour size
* @param useDisplayList Enable or disable the use of Display Lists
* for this glyph
* <code>true</code> turns ON display lists.
* <code>false</code> turns OFF display lists.
*/
FTExtrudeGlyph(FT_GlyphSlot glyph, float depth, float frontOutset,
float backOutset, bool useDisplayList);
/**
* Destructor
*/
virtual ~FTExtrudeGlyph();
/**
* Render this glyph at the current pen position.
*
* @param pen The current pen position.
* @param renderMode Render mode to display
* @return The advance distance for this glyph.
*/
virtual const FTPoint& Render(const FTPoint& pen, int renderMode);
};
#define FTExtrdGlyph FTExtrudeGlyph
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* Create a specialisation of FTGLglyph for creating tessellated
* extruded polygon glyphs.
*
* @param glyph The Freetype glyph to be processed
* @param depth The distance along the z axis to extrude the glyph
* @param frontOutset outset contour size
* @param backOutset outset contour size
* @param useDisplayList Enable or disable the use of Display Lists
* for this glyph
* <code>true</code> turns ON display lists.
* <code>false</code> turns OFF display lists.
* @return An FTGLglyph* object.
*/
FTGL_EXPORT FTGLglyph *ftglCreateExtrudeGlyph(FT_GlyphSlot glyph, float depth,
float frontOutset, float backOutset,
int useDisplayList);
FTGL_END_C_DECLS
#endif // __FTExtrudeGlyph__

584
bazaar/FTGL/FTFont.h Normal file
View file

@ -0,0 +1,584 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTFont__
#define __FTFont__
#ifdef __cplusplus
class FTFontImpl;
/**
* FTFont is the public interface for the FTGL library.
*
* Specific font classes are derived from this class. It uses the helper
* classes FTFace and FTSize to access the Freetype library. This class
* is abstract and deriving classes must implement the protected
* <code>MakeGlyph</code> function to create glyphs of the
* appropriate type.
*
* It is good practice after using these functions to test the error
* code returned. <code>FT_Error Error()</code>. Check the freetype file
* fterrdef.h for error definitions.
*
* @see FTFace
* @see FTSize
*/
class FTGL_EXPORT FTFont
{
protected:
/**
* Open and read a font file. Sets Error flag.
*
* @param fontFilePath font file path.
*/
FTFont(char const *fontFilePath);
/**
* Open and read a font from a buffer in memory. Sets Error flag.
* The buffer is owned by the client and is NOT copied by FTGL. The
* pointer must be valid while using FTGL.
*
* @param pBufferBytes the in-memory buffer
* @param bufferSizeInBytes the length of the buffer in bytes
*/
FTFont(const unsigned char *pBufferBytes, size_t bufferSizeInBytes);
private:
/* Allow our internal subclasses to access the private constructor */
friend class FTBitmapFont;
friend class FTBufferFont;
friend class FTExtrudeFont;
friend class FTOutlineFont;
friend class FTPixmapFont;
friend class FTPolygonFont;
friend class FTTextureFont;
/**
* Internal FTGL FTFont constructor. For private use only.
*
* @param pImpl Internal implementation object. Will be destroyed
* upon FTFont deletion.
*/
FTFont(FTFontImpl *pImpl);
public:
virtual ~FTFont();
/**
* Attach auxilliary file to font e.g font metrics.
*
* Note: not all font formats implement this function.
*
* @param fontFilePath auxilliary font file path.
* @return <code>true</code> if file has been attached
* successfully.
*/
virtual bool Attach(const char* fontFilePath);
/**
* Attach auxilliary data to font e.g font metrics, from memory.
*
* Note: not all font formats implement this function.
*
* @param pBufferBytes the in-memory buffer.
* @param bufferSizeInBytes the length of the buffer in bytes.
* @return <code>true</code> if file has been attached
* successfully.
*/
virtual bool Attach(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
/**
* Set the glyph loading flags. By default, fonts use the most
* sensible flags when loading a font's glyph using FT_Load_Glyph().
* This function allows to override the default flags.
*
* @param flags The glyph loading flags.
*/
virtual void GlyphLoadFlags(FT_Int flags);
/**
* Set the character map for the face.
*
* @param encoding Freetype enumerate for char map code.
* @return <code>true</code> if charmap was valid and
* set correctly.
*/
virtual bool CharMap(FT_Encoding encoding);
/**
* Get the number of character maps in this face.
*
* @return character map count.
*/
virtual unsigned int CharMapCount() const;
/**
* Get a list of character maps in this face.
*
* @return pointer to the first encoding.
*/
virtual FT_Encoding* CharMapList();
/**
* Set the char size for the current face.
*
* @param size the face size in points (1/72 inch)
* @param res the resolution of the target device.
* @return <code>true</code> if size was set correctly
*/
virtual bool FaceSize(const unsigned int size,
const unsigned int res = 72);
/**
* Get the current face size in points (1/72 inch).
*
* @return face size
*/
virtual unsigned int FaceSize() const;
/**
* Set the extrusion distance for the font. Only implemented by
* FTExtrudeFont
*
* @param depth The extrusion distance.
*/
virtual void Depth(float depth);
/**
* Set the outset distance for the font. Only implemented by
* FTOutlineFont, FTPolygonFont and FTExtrudeFont
*
* @param outset The outset distance.
*/
virtual void Outset(float outset);
/**
* Set the front and back outset distances for the font. Only
* implemented by FTExtrudeFont
*
* @param front The front outset distance.
* @param back The back outset distance.
*/
virtual void Outset(float front, float back);
/**
* Enable or disable the use of Display Lists inside FTGL
*
* @param useList <code>true</code> turns ON display lists.
* <code>false</code> turns OFF display lists.
*/
virtual void UseDisplayList(bool useList);
/**
* Get the global ascender height for the face.
*
* @return Ascender height
*/
virtual float Ascender() const;
/**
* Gets the global descender height for the face.
*
* @return Descender height
*/
virtual float Descender() const;
/**
* Gets the line spacing for the font.
*
* @return Line height
*/
virtual float LineHeight() const;
/**
* Get the bounding box for a string.
*
* @param string A char buffer.
* @param len The length of the string. If < 0 then all characters
* will be checked until a null character is encountered
* (optional).
* @param position The pen position of the first character (optional).
* @param spacing A displacement vector to add after each character
* has been checked (optional).
* @return The corresponding bounding box.
*/
virtual FTBBox BBox(const char *string, const int len = -1,
FTPoint position = FTPoint(),
FTPoint spacing = FTPoint());
/**
* Get the bounding box for a string (deprecated).
*
* @param string A char buffer.
* @param llx Lower left near x coordinate.
* @param lly Lower left near y coordinate.
* @param llz Lower left near z coordinate.
* @param urx Upper right far x coordinate.
* @param ury Upper right far y coordinate.
* @param urz Upper right far z coordinate.
*/
void BBox(const char* string, float& llx, float& lly, float& llz,
float& urx, float& ury, float& urz)
{
FTBBox b = BBox(string);
llx = b.Lower().Xf(); lly = b.Lower().Yf(); llz = b.Lower().Zf();
urx = b.Upper().Xf(); ury = b.Upper().Yf(); urz = b.Upper().Zf();
}
/**
* Get the bounding box for a string.
*
* @param string A wchar_t buffer.
* @param len The length of the string. If < 0 then all characters
* will be checked until a null character is encountered
* (optional).
* @param position The pen position of the first character (optional).
* @param spacing A displacement vector to add after each character
* has been checked (optional).
* @return The corresponding bounding box.
*/
virtual FTBBox BBox(const wchar_t *string, const int len = -1,
FTPoint position = FTPoint(),
FTPoint spacing = FTPoint());
/**
* Get the bounding box for a string (deprecated).
*
* @param string A wchar_t buffer.
* @param llx Lower left near x coordinate.
* @param lly Lower left near y coordinate.
* @param llz Lower left near z coordinate.
* @param urx Upper right far x coordinate.
* @param ury Upper right far y coordinate.
* @param urz Upper right far z coordinate.
*/
void BBox(const wchar_t* string, float& llx, float& lly, float& llz,
float& urx, float& ury, float& urz)
{
FTBBox b = BBox(string);
llx = b.Lower().Xf(); lly = b.Lower().Yf(); llz = b.Lower().Zf();
urx = b.Upper().Xf(); ury = b.Upper().Yf(); urz = b.Upper().Zf();
}
/**
* Get the advance for a string.
*
* @param string 'C' style string to be checked.
* @param len The length of the string. If < 0 then all characters
* will be checked until a null character is encountered
* (optional).
* @param spacing A displacement vector to add after each character
* has been checked (optional).
* @return The string's advance width.
*/
virtual float Advance(const char* string, const int len = -1,
FTPoint spacing = FTPoint());
/**
* Get the advance for a string.
*
* @param string A wchar_t string
* @param len The length of the string. If < 0 then all characters
* will be checked until a null character is encountered
* (optional).
* @param spacing A displacement vector to add after each character
* has been checked (optional).
* @return The string's advance width.
*/
virtual float Advance(const wchar_t* string, const int len = -1,
FTPoint spacing = FTPoint());
/**
* Render a string of characters.
*
* @param string 'C' style string to be output.
* @param len The length of the string. If < 0 then all characters
* will be displayed until a null character is encountered
* (optional).
* @param position The pen position of the first character (optional).
* @param spacing A displacement vector to add after each character
* has been displayed (optional).
* @param renderMode Render mode to use for display (optional).
* @return The new pen position after the last character was output.
*/
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
*
* @param string wchar_t string to be output.
* @param len The length of the string. If < 0 then all characters
* will be displayed until a null character is encountered
* (optional).
* @param position The pen position of the first character (optional).
* @param spacing A displacement vector to add after each character
* has been displayed (optional).
* @param renderMode Render mode to use for display (optional).
* @return The new pen position after the last character was output.
*/
virtual FTPoint Render(const wchar_t *string, const int len = -1,
FTPoint position = FTPoint(),
FTPoint spacing = FTPoint(),
int renderMode = FTGL::RENDER_ALL);
/**
* Queries the Font for errors.
*
* @return The current error code.
*/
virtual FT_Error Error() const;
protected:
/* Allow impl to access MakeGlyph */
friend class FTFontImpl;
/**
* Construct a glyph of the correct type.
*
* Clients must override the function and return their specialised
* FTGlyph.
*
* @param slot A FreeType glyph slot.
* @return An FT****Glyph or <code>null</code> on failure.
*/
virtual FTGlyph* MakeGlyph(FT_GlyphSlot slot) = 0;
private:
/**
* Internal FTGL FTFont implementation object. For private use only.
*/
FTFontImpl *impl;
};
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* FTGLfont is the public interface for the FTGL library.
*
* It is good practice after using these functions to test the error
* code returned. <code>FT_Error Error()</code>. Check the freetype file
* fterrdef.h for error definitions.
*/
struct _FTGLFont;
typedef struct _FTGLfont FTGLfont;
/**
* Create a custom FTGL font object.
*
* @param fontFilePath The font file name.
* @param data A pointer to private data that will be passed to callbacks.
* @param makeglyphCallback A glyph-making callback function.
* @return An FTGLfont* object.
*/
FTGL_EXPORT FTGLfont *ftglCreateCustomFont(char const *fontFilePath,
void *data,
FTGLglyph * (*makeglyphCallback) (FT_GlyphSlot, void *));
/**
* Destroy an FTGL font object.
*
* @param font An FTGLfont* object.
*/
FTGL_EXPORT void ftglDestroyFont(FTGLfont* font);
/**
* Attach auxilliary file to font e.g. font metrics.
*
* Note: not all font formats implement this function.
*
* @param font An FTGLfont* object.
* @param path Auxilliary font file path.
* @return 1 if file has been attached successfully.
*/
FTGL_EXPORT int ftglAttachFile(FTGLfont* font, const char* path);
/**
* Attach auxilliary data to font, e.g. font metrics, from memory.
*
* Note: not all font formats implement this function.
*
* @param font An FTGLfont* object.
* @param data The in-memory buffer.
* @param size The length of the buffer in bytes.
* @return 1 if file has been attached successfully.
*/
FTGL_EXPORT int ftglAttachData(FTGLfont* font, const unsigned char * data,
size_t size);
/**
* Set the character map for the face.
*
* @param font An FTGLfont* object.
* @param encoding Freetype enumerate for char map code.
* @return 1 if charmap was valid and set correctly.
*/
FTGL_EXPORT int ftglSetFontCharMap(FTGLfont* font, FT_Encoding encoding);
/**
* Get the number of character maps in this face.
*
* @param font An FTGLfont* object.
* @return character map count.
*/
FTGL_EXPORT unsigned int ftglGetFontCharMapCount(FTGLfont* font);
/**
* Get a list of character maps in this face.
*
* @param font An FTGLfont* object.
* @return pointer to the first encoding.
*/
FTGL_EXPORT FT_Encoding* ftglGetFontCharMapList(FTGLfont* font);
/**
* Set the char size for the current face.
*
* @param font An FTGLfont* object.
* @param size The face size in points (1/72 inch).
* @param res The resolution of the target device, or 0 to use the default
* value of 72.
* @return 1 if size was set correctly.
*/
FTGL_EXPORT int ftglSetFontFaceSize(FTGLfont* font, unsigned int size,
unsigned int res);
/**
* Get the current face size in points (1/72 inch).
*
* @param font An FTGLfont* object.
* @return face size
*/
FTGL_EXPORT unsigned int ftglGetFontFaceSize(FTGLfont* font);
/**
* Set the extrusion distance for the font. Only implemented by
* FTExtrudeFont.
*
* @param font An FTGLfont* object.
* @param depth The extrusion distance.
*/
FTGL_EXPORT void ftglSetFontDepth(FTGLfont* font, float depth);
/**
* Set the outset distance for the font. Only FTOutlineFont, FTPolygonFont
* and FTExtrudeFont implement front outset. Only FTExtrudeFont implements
* back outset.
*
* @param font An FTGLfont* object.
* @param front The front outset distance.
* @param back The back outset distance.
*/
FTGL_EXPORT void ftglSetFontOutset(FTGLfont* font, float front, float back);
/**
* Enable or disable the use of Display Lists inside FTGL.
*
* @param font An FTGLfont* object.
* @param useList 1 turns ON display lists.
* 0 turns OFF display lists.
*/
FTGL_EXPORT void ftglSetFontDisplayList(FTGLfont* font, int useList);
/**
* Get the global ascender height for the face.
*
* @param font An FTGLfont* object.
* @return Ascender height
*/
FTGL_EXPORT float ftglGetFontAscender(FTGLfont* font);
/**
* Gets the global descender height for the face.
*
* @param font An FTGLfont* object.
* @return Descender height
*/
FTGL_EXPORT float ftglGetFontDescender(FTGLfont* font);
/**
* Gets the line spacing for the font.
*
* @param font An FTGLfont* object.
* @return Line height
*/
FTGL_EXPORT float ftglGetFontLineHeight(FTGLfont* font);
/**
* Get the bounding box for a string.
*
* @param font An FTGLfont* object.
* @param string A char buffer
* @param len The length of the string. If < 0 then all characters will be
* checked until a null character is encountered (optional).
* @param bounds An array of 6 float values where the bounding box's lower
* left near and upper right far 3D coordinates will be stored.
*/
FTGL_EXPORT void ftglGetFontBBox(FTGLfont* font, const char *string,
int len, float bounds[6]);
/**
* Get the advance width for a string.
*
* @param font An FTGLfont* object.
* @param string A char string.
* @return Advance width
*/
FTGL_EXPORT float ftglGetFontAdvance(FTGLfont* font, const char *string);
/**
* Render a string of characters.
*
* @param font An FTGLfont* object.
* @param string Char string to be output.
* @param mode Render mode to display.
*/
FTGL_EXPORT void ftglRenderFont(FTGLfont* font, const char *string, int mode);
/**
* Query a font for errors.
*
* @param font An FTGLfont* object.
* @return The current error code.
*/
FTGL_EXPORT FT_Error ftglGetFontError(FTGLfont* font);
FTGL_END_C_DECLS
#endif // __FTFont__

74
bazaar/FTGL/FTGL.upp Normal file
View file

@ -0,0 +1,74 @@
noblitz;
uses
freetype;
library(LINUX) "GL GLU";
library(FREEBSD) "GL GLU";
library(WIN32 GCC) "glaux glu32 opengl32";
file
src/config.h,
src/FTBuffer.cpp,
src/FTCharmap.cpp,
src/FTCharmap.h,
src/FTCharToGlyphIndexMap.h,
src/FTContour.cpp,
src/FTContour.h,
src/FTFace.cpp,
src/FTFace.h,
src/FTGlyphContainer.cpp,
src/FTGlyphContainer.h,
src/FTInternals.h,
src/FTLibrary.cpp,
src/FTLibrary.h,
src/FTList.h,
src/FTPoint.cpp,
src/FTSize.cpp,
src/FTSize.h,
src/FTUnicode.h,
src/FTVector.h,
src/FTVectoriser.cpp,
src/FTVectoriser.h,
src/FTFont/FTBitmapFont.cpp,
src/FTFont/FTBitmapFontImpl.h,
src/FTFont/FTBufferFont.cpp,
src/FTFont/FTBufferFontImpl.h,
src/FTFont/FTExtrudeFont.cpp,
src/FTFont/FTExtrudeFontImpl.h,
src/FTFont/FTFont.cpp,
src/FTFont/FTFontGlue.cpp,
src/FTFont/FTFontImpl.h,
src/FTFont/FTOutlineFont.cpp,
src/FTFont/FTOutlineFontImpl.h,
src/FTFont/FTPixmapFont.cpp,
src/FTFont/FTPixmapFontImpl.h,
src/FTFont/FTPolygonFont.cpp,
src/FTFont/FTPolygonFontImpl.h,
src/FTFont/FTTextureFont.cpp,
src/FTFont/FTTextureFontImpl.h,
src/FTGlyph/FTBitmapGlyph.cpp,
src/FTGlyph/FTBitmapGlyphImpl.h,
src/FTGlyph/FTBufferGlyph.cpp,
src/FTGlyph/FTBufferGlyphImpl.h,
src/FTGlyph/FTExtrudeGlyph.cpp,
src/FTGlyph/FTExtrudeGlyphImpl.h,
src/FTGlyph/FTGlyph.cpp,
src/FTGlyph/FTGlyphGlue.cpp,
src/FTGlyph/FTGlyphImpl.h,
src/FTGlyph/FTOutlineGlyph.cpp,
src/FTGlyph/FTOutlineGlyphImpl.h,
src/FTGlyph/FTPixmapGlyph.cpp,
src/FTGlyph/FTPixmapGlyphImpl.h,
src/FTGlyph/FTPolygonGlyph.cpp,
src/FTGlyph/FTPolygonGlyphImpl.h,
src/FTGlyph/FTTextureGlyph.cpp,
src/FTGlyph/FTTextureGlyphImpl.h,
src/FTLayout/FTLayout.cpp,
src/FTLayout/FTLayoutGlue.cpp,
src/FTLayout/FTLayoutImpl.h,
src/FTLayout/FTSimpleLayout.cpp,
src/FTLayout/FTSimpleLayoutImpl.h;

View file

@ -0,0 +1,103 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTBitmapFont__
#define __FTBitmapFont__
#ifdef __cplusplus
/**
* FTBitmapFont is a specialisation of the FTFont class for handling
* Bitmap fonts
*
* @see FTFont
*/
class FTGL_EXPORT FTBitmapFont : public FTFont
{
public:
/**
* Open and read a font file. Sets Error flag.
*
* @param fontFilePath font file path.
*/
FTBitmapFont(const char* fontFilePath);
/**
* Open and read a font from a buffer in memory. Sets Error flag.
* The buffer is owned by the client and is NOT copied by FTGL. The
* pointer must be valid while using FTGL.
*
* @param pBufferBytes the in-memory buffer
* @param bufferSizeInBytes the length of the buffer in bytes
*/
FTBitmapFont(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
/**
* Destructor
*/
~FTBitmapFont();
protected:
/**
* Construct a glyph of the correct type.
*
* Clients must override the function and return their specialised
* FTGlyph.
*
* @param slot A FreeType glyph slot.
* @return An FT****Glyph or <code>null</code> on failure.
*/
virtual FTGlyph* MakeGlyph(FT_GlyphSlot slot);
};
#define FTGLBitmapFont FTBitmapFont
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* Create a specialised FTGLfont object for handling bitmap fonts.
*
* @param file The font file name.
* @return An FTGLfont* object.
*
* @see FTGLfont
*/
FTGL_EXPORT FTGLfont *ftglCreateBitmapFont(const char *file);
FTGL_END_C_DECLS
#endif // __FTBitmapFont__

105
bazaar/FTGL/FTGLExtrdFont.h Normal file
View file

@ -0,0 +1,105 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTExtrudeFont__
#define __FTExtrudeFont__
#ifdef __cplusplus
/**
* FTExtrudeFont is a specialisation of the FTFont class for handling
* extruded Polygon fonts
*
* @see FTFont
* @see FTPolygonFont
*/
class FTGL_EXPORT FTExtrudeFont : public FTFont
{
public:
/**
* Open and read a font file. Sets Error flag.
*
* @param fontFilePath font file path.
*/
FTExtrudeFont(const char* fontFilePath);
/**
* Open and read a font from a buffer in memory. Sets Error flag.
* The buffer is owned by the client and is NOT copied by FTGL. The
* pointer must be valid while using FTGL.
*
* @param pBufferBytes the in-memory buffer
* @param bufferSizeInBytes the length of the buffer in bytes
*/
FTExtrudeFont(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
/**
* Destructor
*/
~FTExtrudeFont();
protected:
/**
* Construct a glyph of the correct type.
*
* Clients must override the function and return their specialised
* FTGlyph.
*
* @param slot A FreeType glyph slot.
* @return An FT****Glyph or <code>null</code> on failure.
*/
virtual FTGlyph* MakeGlyph(FT_GlyphSlot slot);
};
#define FTGLExtrdFont FTExtrudeFont
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* Create a specialised FTGLfont object for handling extruded poygon fonts.
*
* @param file The font file name.
* @return An FTGLfont* object.
*
* @see FTGLfont
* @see ftglCreatePolygonFont
*/
FTGL_EXPORT FTGLfont *ftglCreateExtrudeFont(const char *file);
FTGL_END_C_DECLS
#endif // __FTExtrudeFont__

View file

@ -0,0 +1,103 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTOutlineFont__
#define __FTOutlineFont__
#ifdef __cplusplus
/**
* FTOutlineFont is a specialisation of the FTFont class for handling
* Vector Outline fonts
*
* @see FTFont
*/
class FTGL_EXPORT FTOutlineFont : public FTFont
{
public:
/**
* Open and read a font file. Sets Error flag.
*
* @param fontFilePath font file path.
*/
FTOutlineFont(const char* fontFilePath);
/**
* Open and read a font from a buffer in memory. Sets Error flag.
* The buffer is owned by the client and is NOT copied by FTGL. The
* pointer must be valid while using FTGL.
*
* @param pBufferBytes the in-memory buffer
* @param bufferSizeInBytes the length of the buffer in bytes
*/
FTOutlineFont(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
/**
* Destructor
*/
~FTOutlineFont();
protected:
/**
* Construct a glyph of the correct type.
*
* Clients must override the function and return their specialised
* FTGlyph.
*
* @param slot A FreeType glyph slot.
* @return An FT****Glyph or <code>null</code> on failure.
*/
virtual FTGlyph* MakeGlyph(FT_GlyphSlot slot);
};
#define FTGLOutlineFont FTOutlineFont
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* Create a specialised FTGLfont object for handling vector outline fonts.
*
* @param file The font file name.
* @return An FTGLfont* object.
*
* @see FTGLfont
*/
FTGL_EXPORT FTGLfont *ftglCreateOutlineFont(const char *file);
FTGL_END_C_DECLS
#endif // __FTOutlineFont__

View file

@ -0,0 +1,103 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTPixmapFont__
#define __FTPixmapFont__
#ifdef __cplusplus
/**
* FTPixmapFont is a specialisation of the FTFont class for handling
* Pixmap (Grey Scale) fonts
*
* @see FTFont
*/
class FTGL_EXPORT FTPixmapFont : public FTFont
{
public:
/**
* Open and read a font file. Sets Error flag.
*
* @param fontFilePath font file path.
*/
FTPixmapFont(const char* fontFilePath);
/**
* Open and read a font from a buffer in memory. Sets Error flag.
* The buffer is owned by the client and is NOT copied by FTGL. The
* pointer must be valid while using FTGL.
*
* @param pBufferBytes the in-memory buffer
* @param bufferSizeInBytes the length of the buffer in bytes
*/
FTPixmapFont(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
/**
* Destructor
*/
~FTPixmapFont();
protected:
/**
* Construct a glyph of the correct type.
*
* Clients must override the function and return their specialised
* FTGlyph.
*
* @param slot A FreeType glyph slot.
* @return An FT****Glyph or <code>null</code> on failure.
*/
virtual FTGlyph* MakeGlyph(FT_GlyphSlot slot);
};
#define FTGLPixmapFont FTPixmapFont
#endif // __cplusplus
FTGL_BEGIN_C_DECLS
/**
* Create a specialised FTGLfont object for handling pixmap (grey scale) fonts.
*
* @param file The font file name.
* @return An FTGLfont* object.
*
* @see FTGLfont
*/
FTGL_EXPORT FTGLfont *ftglCreatePixmapFont(const char *file);
FTGL_END_C_DECLS
#endif // __FTPixmapFont__

View file

@ -0,0 +1,104 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTPolygonFont__
#define __FTPolygonFont__
#ifdef __cplusplus
/**
* FTPolygonFont is a specialisation of the FTFont class for handling
* tesselated Polygon Mesh fonts
*
* @see FTFont
*/
class FTGL_EXPORT FTPolygonFont : public FTFont
{
public:
/**
* Open and read a font file. Sets Error flag.
*
* @param fontFilePath font file path.
*/
FTPolygonFont(const char* fontFilePath);
/**
* Open and read a font from a buffer in memory. Sets Error flag.
* The buffer is owned by the client and is NOT copied by FTGL. The
* pointer must be valid while using FTGL.
*
* @param pBufferBytes the in-memory buffer
* @param bufferSizeInBytes the length of the buffer in bytes
*/
FTPolygonFont(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
/**
* Destructor
*/
~FTPolygonFont();
protected:
/**
* Construct a glyph of the correct type.
*
* Clients must override the function and return their specialised
* FTGlyph.
*
* @param slot A FreeType glyph slot.
* @return An FT****Glyph or <code>null</code> on failure.
*/
virtual FTGlyph* MakeGlyph(FT_GlyphSlot slot);
};
#define FTGLPolygonFont FTPolygonFont
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* Create a specialised FTGLfont object for handling tesselated polygon
* mesh fonts.
*
* @param file The font file name.
* @return An FTGLfont* object.
*
* @see FTGLfont
*/
FTGL_EXPORT FTGLfont *ftglCreatePolygonFont(const char *file);
FTGL_END_C_DECLS
#endif // __FTPolygonFont__

View file

@ -0,0 +1,103 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTTextureFont__
#define __FTTextureFont__
#ifdef __cplusplus
/**
* FTTextureFont is a specialisation of the FTFont class for handling
* Texture mapped fonts
*
* @see FTFont
*/
class FTGL_EXPORT FTTextureFont : public FTFont
{
public:
/**
* Open and read a font file. Sets Error flag.
*
* @param fontFilePath font file path.
*/
FTTextureFont(const char* fontFilePath);
/**
* Open and read a font from a buffer in memory. Sets Error flag.
* The buffer is owned by the client and is NOT copied by FTGL. The
* pointer must be valid while using FTGL.
*
* @param pBufferBytes the in-memory buffer
* @param bufferSizeInBytes the length of the buffer in bytes
*/
FTTextureFont(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
/**
* Destructor
*/
virtual ~FTTextureFont();
protected:
/**
* Construct a glyph of the correct type.
*
* Clients must override the function and return their specialised
* FTGlyph.
*
* @param slot A FreeType glyph slot.
* @return An FT****Glyph or <code>null</code> on failure.
*/
virtual FTGlyph* MakeGlyph(FT_GlyphSlot slot);
};
#define FTGLTextureFont FTTextureFont
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* Create a specialised FTGLfont object for handling texture-mapped fonts.
*
* @param file The font file name.
* @return An FTGLfont* object.
*
* @see FTGLfont
*/
FTGL_EXPORT FTGLfont *ftglCreateTextureFont(const char *file);
FTGL_END_C_DECLS
#endif // __FTTextureFont__

201
bazaar/FTGL/FTGlyph.h Normal file
View file

@ -0,0 +1,201 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTGlyph__
#define __FTGlyph__
#ifdef __cplusplus
class FTGlyphImpl;
/**
* FTGlyph is the base class for FTGL glyphs.
*
* It provides the interface between Freetype glyphs and their openGL
* renderable counterparts. This is an abstract class and derived classes
* must implement the <code>Render</code> function.
*
* @see FTBBox
* @see FTPoint
*/
class FTGL_EXPORT FTGlyph
{
protected:
/**
* Create a glyph.
*
* @param glyph The Freetype glyph to be processed
*/
FTGlyph(FT_GlyphSlot glyph);
private:
/**
* Internal FTGL FTGlyph constructor. For private use only.
*
* @param pImpl Internal implementation object. Will be destroyed
* upon FTGlyph deletion.
*/
FTGlyph(FTGlyphImpl *pImpl);
/* Allow our internal subclasses to access the private constructor */
friend class FTBitmapGlyph;
friend class FTBufferGlyph;
friend class FTExtrudeGlyph;
friend class FTOutlineGlyph;
friend class FTPixmapGlyph;
friend class FTPolygonGlyph;
friend class FTTextureGlyph;
public:
/**
* Destructor
*/
virtual ~FTGlyph();
/**
* Renders this glyph at the current pen position.
*
* @param pen The current pen position.
* @param renderMode Render mode to display
* @return The advance distance for this glyph.
*/
virtual const FTPoint& Render(const FTPoint& pen, int renderMode) = 0;
/**
* Return the advance width for this glyph.
*
* @return advance width.
*/
virtual float Advance() const;
/**
* Return the bounding box for this glyph.
*
* @return bounding box.
*/
virtual const FTBBox& BBox() const;
/**
* Queries for errors.
*
* @return The current error code.
*/
virtual FT_Error Error() const;
private:
/**
* Internal FTGL FTGlyph implementation object. For private use only.
*/
FTGlyphImpl *impl;
};
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* FTGLglyph is the base class for FTGL glyphs.
*
* It provides the interface between Freetype glyphs and their openGL
* renderable counterparts. This is an abstract class and derived classes
* must implement the ftglRenderGlyph() function.
*/
struct _FTGLGlyph;
typedef struct _FTGLglyph FTGLglyph;
/**
* Create a custom FTGL glyph object.
* FIXME: maybe get rid of "base" and have advanceCallback etc. functions
*
* @param base The base FTGLglyph* to subclass.
* @param data A pointer to private data that will be passed to callbacks.
* @param renderCallback A rendering callback function.
* @param destroyCallback A callback function to be called upon destruction.
* @return An FTGLglyph* object.
*/
FTGL_EXPORT FTGLglyph *ftglCreateCustomGlyph(FTGLglyph *base, void *data,
void (*renderCallback) (FTGLglyph *, void *, FTGL_DOUBLE, FTGL_DOUBLE,
int, FTGL_DOUBLE *, FTGL_DOUBLE *),
void (*destroyCallback) (FTGLglyph *, void *));
/**
* Destroy an FTGL glyph object.
*
* @param glyph An FTGLglyph* object.
*/
FTGL_EXPORT void ftglDestroyGlyph(FTGLglyph *glyph);
/**
* Render a glyph at the current pen position and compute the corresponding
* advance.
*
* @param glyph An FTGLglyph* object.
* @param penx The current pen's X position.
* @param peny The current pen's Y position.
* @param renderMode Render mode to display
* @param advancex A pointer to an FTGL_DOUBLE where to write the advance's X
* component.
* @param advancey A pointer to an FTGL_DOUBLE where to write the advance's Y
* component.
*/
FTGL_EXPORT void ftglRenderGlyph(FTGLglyph *glyph, FTGL_DOUBLE penx,
FTGL_DOUBLE peny, int renderMode,
FTGL_DOUBLE *advancex, FTGL_DOUBLE *advancey);
/**
* Return the advance for a glyph.
*
* @param glyph An FTGLglyph* object.
* @return The advance's X component.
*/
FTGL_EXPORT float ftglGetGlyphAdvance(FTGLglyph *glyph);
/**
* Return the bounding box for a glyph.
*
* @param glyph An FTGLglyph* object.
* @param bounds An array of 6 float values where the bounding box's lower
* left near and upper right far 3D coordinates will be stored.
*/
FTGL_EXPORT void ftglGetGlyphBBox(FTGLglyph *glyph, float bounds[6]);
/**
* Query a glyph for errors.
*
* @param glyph An FTGLglyph* object.
* @return The current error code.
*/
FTGL_EXPORT FT_Error ftglGetGlyphError(FTGLglyph* glyph);
FTGL_END_C_DECLS
#endif // __FTGlyph__

192
bazaar/FTGL/FTLayout.h Normal file
View file

@ -0,0 +1,192 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTLayout__
#define __FTLayout__
#ifdef __cplusplus
class FTLayoutImpl;
/**
* FTLayout is the interface for layout managers that render text.
*
* Specific layout manager classes are derived from this class. This class
* is abstract and deriving classes must implement the protected
* <code>Render</code> methods to render formatted text and
* <code>BBox</code> methods to determine the bounding box of output text.
*
* @see FTFont
* @see FTBBox
*/
class FTGL_EXPORT FTLayout
{
protected:
FTLayout();
private:
/**
* Internal FTGL FTLayout constructor. For private use only.
*
* @param pImpl Internal implementation object. Will be destroyed
* upon FTLayout deletion.
*/
FTLayout(FTLayoutImpl *pImpl);
/* Allow our internal subclasses to access the private constructor */
friend class FTSimpleLayout;
public:
/**
* Destructor
*/
virtual ~FTLayout();
/**
* Get the bounding box for a formatted string.
*
* @param string A char string.
* @param len The length of the string. If < 0 then all characters
* will be checked until a null character is encountered
* (optional).
* @param position The pen position of the first character (optional).
* @return The corresponding bounding box.
*/
virtual FTBBox BBox(const char* string, const int len = -1,
FTPoint position = FTPoint()) = 0;
/**
* Get the bounding box for a formatted string.
*
* @param string A wchar_t string.
* @param len The length of the string. If < 0 then all characters
* will be checked until a null character is encountered
* (optional).
* @param position The pen position of the first character (optional).
* @return The corresponding bounding box.
*/
virtual FTBBox BBox(const wchar_t* string, const int len = -1,
FTPoint position = FTPoint()) = 0;
/**
* Render a string of characters.
*
* @param string 'C' style string to be output.
* @param len The length of the string. If < 0 then all characters
* will be displayed until a null character is encountered
* (optional).
* @param position The pen position of the first character (optional).
* @param renderMode Render mode to display (optional)
*/
virtual void Render(const char *string, const int len = -1,
FTPoint position = FTPoint(),
int renderMode = FTGL::RENDER_ALL) = 0;
/**
* Render a string of characters.
*
* @param string wchar_t string to be output.
* @param len The length of the string. If < 0 then all characters
* will be displayed until a null character is encountered
* (optional).
* @param position The pen position of the first character (optional).
* @param renderMode Render mode to display (optional)
*/
virtual void Render(const wchar_t *string, const int len = -1,
FTPoint position = FTPoint(),
int renderMode = FTGL::RENDER_ALL) = 0;
/**
* Queries the Layout for errors.
*
* @return The current error code.
*/
virtual FT_Error Error() const;
private:
/**
* Internal FTGL FTLayout implementation object. For private use only.
*/
FTLayoutImpl *impl;
};
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* FTGLlayout is the interface for layout managers that render text.
*/
struct _FTGLlayout;
typedef struct _FTGLlayout FTGLlayout;
/**
* Destroy an FTGL layout object.
*
* @param layout An FTGLlayout* object.
*/
FTGL_EXPORT void ftglDestroyLayout(FTGLlayout* layout);
/**
* Get the bounding box for a string.
*
* @param layout An FTGLlayout* object.
* @param string A char buffer
* @param bounds An array of 6 float values where the bounding box's lower
* left near and upper right far 3D coordinates will be stored.
*/
FTGL_EXPORT void ftglGetLayoutBBox(FTGLlayout *layout, const char* string,
float bounds[6]);
/**
* Render a string of characters.
*
* @param layout An FTGLlayout* object.
* @param string Char string to be output.
* @param mode Render mode to display.
*/
FTGL_EXPORT void ftglRenderLayout(FTGLlayout *layout, const char *string,
int mode);
/**
* Query a layout for errors.
*
* @param layout An FTGLlayout* object.
* @return The current error code.
*/
FTGL_EXPORT FT_Error ftglGetLayoutError(FTGLlayout* layout);
FTGL_END_C_DECLS
#endif /* __FTLayout__ */

View file

@ -0,0 +1,94 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTOutlineGlyph__
#define __FTOutlineGlyph__
#ifdef __cplusplus
/**
* FTOutlineGlyph is a specialisation of FTGlyph for creating outlines.
*/
class FTGL_EXPORT FTOutlineGlyph : public FTGlyph
{
public:
/**
* Constructor. Sets the Error to Invalid_Outline if the glyphs isn't
* an outline.
*
* @param glyph The Freetype glyph to be processed
* @param outset outset distance
* @param useDisplayList Enable or disable the use of Display Lists
* for this glyph
* <code>true</code> turns ON display lists.
* <code>false</code> turns OFF display lists.
*/
FTOutlineGlyph(FT_GlyphSlot glyph, float outset, bool useDisplayList);
/**
* Destructor
*/
virtual ~FTOutlineGlyph();
/**
* Render this glyph at the current pen position.
*
* @param pen The current pen position.
* @param renderMode Render mode to display
* @return The advance distance for this glyph.
*/
virtual const FTPoint& Render(const FTPoint& pen, int renderMode);
};
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* Create a specialisation of FTGLglyph for creating outlines.
*
* @param glyph The Freetype glyph to be processed
* @param outset outset contour size
* @param useDisplayList Enable or disable the use of Display Lists
* for this glyph
* <code>true</code> turns ON display lists.
* <code>false</code> turns OFF display lists.
* @return An FTGLglyph* object.
*/
FTGL_EXPORT FTGLglyph *ftglCreateOutlineGlyph(FT_GlyphSlot glyph, float outset,
int useDisplayList);
FTGL_END_C_DECLS
#endif // __FTOutlineGlyph__

View file

@ -0,0 +1,82 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTPixmapGlyph__
#define __FTPixmapGlyph__
#ifdef __cplusplus
/**
* FTPixmapGlyph is a specialisation of FTGlyph for creating pixmaps.
*/
class FTGL_EXPORT FTPixmapGlyph : public FTGlyph
{
public:
/**
* Constructor
*
* @param glyph The Freetype glyph to be processed
*/
FTPixmapGlyph(FT_GlyphSlot glyph);
/**
* Destructor
*/
virtual ~FTPixmapGlyph();
/**
* Render this glyph at the current pen position.
*
* @param pen The current pen position.
* @param renderMode Render mode to display
* @return The advance distance for this glyph.
*/
virtual const FTPoint& Render(const FTPoint& pen, int renderMode);
};
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* Create a specialisation of FTGLglyph for creating pixmaps.
*
* @param glyph The Freetype glyph to be processed
* @return An FTGLglyph* object.
*/
FTGL_EXPORT FTGLglyph *ftglCreatePixmapGlyph(FT_GlyphSlot glyph);
FTGL_END_C_DECLS
#endif // __FTPixmapGlyph__

274
bazaar/FTGL/FTPoint.h Normal file
View file

@ -0,0 +1,274 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTPoint__
#define __FTPoint__
#ifdef __cplusplus
/**
* FTPoint class is a basic 3-dimensional point or vector.
*/
class FTGL_EXPORT FTPoint
{
public:
/**
* Default constructor. Point is set to zero.
*/
inline FTPoint()
{
values[0] = 0;
values[1] = 0;
values[2] = 0;
}
/**
* Constructor. Z coordinate is set to zero if unspecified.
*
* @param x First component
* @param y Second component
* @param z Third component
*/
inline FTPoint(const FTGL_DOUBLE x, const FTGL_DOUBLE y,
const FTGL_DOUBLE z = 0)
{
values[0] = x;
values[1] = y;
values[2] = z;
}
/**
* Constructor. This converts an FT_Vector to an FTPoint
*
* @param ft_vector A freetype vector
*/
inline FTPoint(const FT_Vector& ft_vector)
{
values[0] = ft_vector.x;
values[1] = ft_vector.y;
values[2] = 0;
}
/**
* Normalise a point's coordinates. If the coordinates are zero,
* the point is left untouched.
*
* @return A vector of norm one.
*/
FTPoint Normalise();
/**
* Operator += In Place Addition.
*
* @param point
* @return this plus point.
*/
inline FTPoint& operator += (const FTPoint& point)
{
values[0] += point.values[0];
values[1] += point.values[1];
values[2] += point.values[2];
return *this;
}
/**
* Operator +
*
* @param point
* @return this plus point.
*/
inline FTPoint operator + (const FTPoint& point) const
{
FTPoint temp;
temp.values[0] = values[0] + point.values[0];
temp.values[1] = values[1] + point.values[1];
temp.values[2] = values[2] + point.values[2];
return temp;
}
/**
* Operator -= In Place Substraction.
*
* @param point
* @return this minus point.
*/
inline FTPoint& operator -= (const FTPoint& point)
{
values[0] -= point.values[0];
values[1] -= point.values[1];
values[2] -= point.values[2];
return *this;
}
/**
* Operator -
*
* @param point
* @return this minus point.
*/
inline FTPoint operator - (const FTPoint& point) const
{
FTPoint temp;
temp.values[0] = values[0] - point.values[0];
temp.values[1] = values[1] - point.values[1];
temp.values[2] = values[2] - point.values[2];
return temp;
}
/**
* Operator * Scalar multiplication
*
* @param multiplier
* @return <code>this</code> multiplied by <code>multiplier</code>.
*/
inline FTPoint operator * (double multiplier) const
{
FTPoint temp;
temp.values[0] = values[0] * multiplier;
temp.values[1] = values[1] * multiplier;
temp.values[2] = values[2] * multiplier;
return temp;
}
/**
* Operator * Scalar multiplication
*
* @param point
* @param multiplier
* @return <code>multiplier</code> multiplied by <code>point</code>.
*/
inline friend FTPoint operator * (double multiplier, FTPoint& point)
{
return point * multiplier;
}
/**
* Operator * Scalar product
*
* @param a First vector.
* @param b Second vector.
* @return <code>a.b</code> scalar product.
*/
inline friend double operator * (FTPoint &a, FTPoint& b)
{
return a.values[0] * b.values[0]
+ a.values[1] * b.values[1]
+ a.values[2] * b.values[2];
}
/**
* Operator ^ Vector product
*
* @param point Second point
* @return this vector point.
*/
inline FTPoint operator ^ (const FTPoint& point)
{
FTPoint temp;
temp.values[0] = values[1] * point.values[2]
- values[2] * point.values[1];
temp.values[1] = values[2] * point.values[0]
- values[0] * point.values[2];
temp.values[2] = values[0] * point.values[1]
- values[1] * point.values[0];
return temp;
}
/**
* Operator == Tests for equality
*
* @param a
* @param b
* @return true if a & b are equal
*/
friend bool operator == (const FTPoint &a, const FTPoint &b);
/**
* Operator != Tests for non equality
*
* @param a
* @param b
* @return true if a & b are not equal
*/
friend bool operator != (const FTPoint &a, const FTPoint &b);
/**
* Cast to FTGL_DOUBLE*
*/
inline operator const FTGL_DOUBLE*() const
{
return values;
}
/**
* Setters
*/
inline void X(FTGL_DOUBLE x) { values[0] = x; };
inline void Y(FTGL_DOUBLE y) { values[1] = y; };
inline void Z(FTGL_DOUBLE z) { values[2] = z; };
/**
* Getters
*/
inline FTGL_DOUBLE X() const { return values[0]; };
inline FTGL_DOUBLE Y() const { return values[1]; };
inline FTGL_DOUBLE Z() const { return values[2]; };
inline FTGL_FLOAT Xf() const { return static_cast<FTGL_FLOAT>(values[0]); };
inline FTGL_FLOAT Yf() const { return static_cast<FTGL_FLOAT>(values[1]); };
inline FTGL_FLOAT Zf() const { return static_cast<FTGL_FLOAT>(values[2]); };
private:
/**
* The point data
*/
FTGL_DOUBLE values[3];
};
#endif //__cplusplus
#endif // __FTPoint__

98
bazaar/FTGL/FTPolyGlyph.h Normal file
View file

@ -0,0 +1,98 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTPolygonGlyph__
#define __FTPolygonGlyph__
#ifdef __cplusplus
/**
* FTPolygonGlyph is a specialisation of FTGlyph for creating tessellated
* polygon glyphs.
*/
class FTGL_EXPORT FTPolygonGlyph : public FTGlyph
{
public:
/**
* Constructor. Sets the Error to Invalid_Outline if the glyphs
* isn't an outline.
*
* @param glyph The Freetype glyph to be processed
* @param outset The outset distance
* @param useDisplayList Enable or disable the use of Display Lists
* for this glyph
* <code>true</code> turns ON display lists.
* <code>false</code> turns OFF display lists.
*/
FTPolygonGlyph(FT_GlyphSlot glyph, float outset, bool useDisplayList);
/**
* Destructor
*/
virtual ~FTPolygonGlyph();
/**
* Render this glyph at the current pen position.
*
* @param pen The current pen position.
* @param renderMode Render mode to display
* @return The advance distance for this glyph.
*/
virtual const FTPoint& Render(const FTPoint& pen, int renderMode);
};
#define FTPolyGlyph FTPolygonGlyph
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* Create a specialisation of FTGLglyph for creating tessellated
* polygon glyphs.
*
* @param glyph The Freetype glyph to be processed
* @param outset outset contour size
* @param useDisplayList Enable or disable the use of Display Lists
* for this glyph
* <code>true</code> turns ON display lists.
* <code>false</code> turns OFF display lists.
* @return An FTGLglyph* object.
*/
FTGL_EXPORT FTGLglyph *ftglCreatePolygonGlyph(FT_GlyphSlot glyph, float outset,
int useDisplayList);
FTGL_END_C_DECLS
#endif // __FTPolygonGlyph__

View file

@ -0,0 +1,191 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTSimpleLayout__
#define __FTSimpleLayout__
#ifdef __cplusplus
class FTFont;
/**
* FTSimpleLayout is a specialisation of FTLayout for simple text boxes.
*
* This class has basic support for text wrapping, left, right and centered
* alignment, and text justification.
*
* @see FTLayout
*/
class FTGL_EXPORT FTSimpleLayout : public FTLayout
{
public:
/**
* Initializes line spacing to 1.0, alignment to
* ALIGN_LEFT and wrap to 100.0
*/
FTSimpleLayout();
/**
* Destructor
*/
~FTSimpleLayout();
/**
* Get the bounding box for a formatted string.
*
* @param string A char string.
* @param len The length of the string. If < 0 then all characters
* will be checked until a null character is encountered
* (optional).
* @param position The pen position of the first character (optional).
* @return The corresponding bounding box.
*/
virtual FTBBox BBox(const char* string, const int len = -1,
FTPoint position = FTPoint());
/**
* Get the bounding box for a formatted string.
*
* @param string A wchar_t string.
* @param len The length of the string. If < 0 then all characters
* will be checked until a null character is encountered
* (optional).
* @param position The pen position of the first character (optional).
* @return The corresponding bounding box.
*/
virtual FTBBox BBox(const wchar_t* string, const int len = -1,
FTPoint position = FTPoint());
/**
* Render a string of characters.
*
* @param string 'C' style string to be output.
* @param len The length of the string. If < 0 then all characters
* will be displayed until a null character is encountered
* (optional).
* @param position The pen position of the first character (optional).
* @param renderMode Render mode to display (optional)
*/
virtual void Render(const char *string, const int len = -1,
FTPoint position = FTPoint(),
int renderMode = FTGL::RENDER_ALL);
/**
* Render a string of characters.
*
* @param string wchar_t string to be output.
* @param len The length of the string. If < 0 then all characters
* will be displayed until a null character is encountered
* (optional).
* @param position The pen position of the first character (optional).
* @param renderMode Render mode to display (optional)
*/
virtual void Render(const wchar_t *string, const int len = -1,
FTPoint position = FTPoint(),
int renderMode = FTGL::RENDER_ALL);
/**
* Set the font to use for rendering the text.
*
* @param fontInit A pointer to the new font. The font is
* referenced by this but will not be
* disposed of when this is deleted.
*/
void SetFont(FTFont *fontInit);
/**
* @return The current font.
*/
FTFont *GetFont();
/**
* The maximum line length for formatting text.
*
* @param LineLength The new line length.
*/
void SetLineLength(const float LineLength);
/**
* @return The current line length.
*/
float GetLineLength() const;
/**
* The text alignment mode used to distribute
* space within a line or rendered text.
*
* @param Alignment The new alignment mode.
*/
void SetAlignment(const FTGL::TextAlignment Alignment);
/**
* @return The text alignment mode.
*/
FTGL::TextAlignment GetAlignment() const;
/**
* Sets the line height.
*
* @param LineSpacing The height of each line of text expressed as
* a percentage of the current fonts line height.
*/
void SetLineSpacing(const float LineSpacing);
/**
* @return The line spacing.
*/
float GetLineSpacing() const;
};
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
FTGL_EXPORT FTGLlayout *ftglCreateSimpleLayout(void);
FTGL_EXPORT void ftglSetLayoutFont(FTGLlayout *, FTGLfont*);
FTGL_EXPORT FTGLfont *ftglGetLayoutFont(FTGLlayout *);
FTGL_EXPORT void ftglSetLayoutLineLength(FTGLlayout *, const float);
FTGL_EXPORT float ftglGetLayoutLineLength(FTGLlayout *);
FTGL_EXPORT void ftglSetLayoutAlignment(FTGLlayout *, const int);
FTGL_EXPORT int ftglGetLayoutAlignement(FTGLlayout *);
FTGL_EXPORT void ftglSetLayoutLineSpacing(FTGLlayout *, const float);
FTGL_EXPORT float ftglGetLayoutLineSpacing(FTGLlayout *);
FTGL_END_C_DECLS
#endif /* __FTSimpleLayout__ */

View file

@ -0,0 +1,99 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
# include <FTGL/ftgl.h>
#endif
#ifndef __FTTextureGlyph__
#define __FTTextureGlyph__
#ifdef __cplusplus
/**
* FTTextureGlyph is a specialisation of FTGlyph for creating texture
* glyphs.
*/
class FTGL_EXPORT FTTextureGlyph : public FTGlyph
{
public:
/**
* Constructor
*
* @param glyph The Freetype glyph to be processed
* @param id The id of the texture that this glyph will be
* drawn in
* @param xOffset The x offset into the parent texture to draw
* this glyph
* @param yOffset The y offset into the parent texture to draw
* this glyph
* @param width The width of the parent texture
* @param height The height (number of rows) of the parent texture
*/
FTTextureGlyph(FT_GlyphSlot glyph, int id, int xOffset, int yOffset,
int width, int height);
/**
* Destructor
*/
virtual ~FTTextureGlyph();
/**
* Render this glyph at the current pen position.
*
* @param pen The current pen position.
* @param renderMode Render mode to display
* @return The advance distance for this glyph.
*/
virtual const FTPoint& Render(const FTPoint& pen, int renderMode);
};
#endif //__cplusplus
FTGL_BEGIN_C_DECLS
/**
* Create a specialisation of FTGLglyph for creating pixmaps.
*
* @param glyph The Freetype glyph to be processed.
* @param id The id of the texture that this glyph will be drawn in.
* @param xOffset The x offset into the parent texture to draw this glyph.
* @param yOffset The y offset into the parent texture to draw this glyph.
* @param width The width of the parent texture.
* @param height The height (number of rows) of the parent texture.
* @return An FTGLglyph* object.
*/
FTGL_EXPORT FTGLglyph *ftglCreateTextureGlyph(FT_GlyphSlot glyph, int id,
int xOffset, int yOffset,
int width, int height);
FTGL_END_C_DECLS
#endif // __FTTextureGlyph__

135
bazaar/FTGL/ftgl.h Normal file
View file

@ -0,0 +1,135 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ftgl__
#define __ftgl__
/* We need the Freetype headers */
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
#include FT_OUTLINE_H
/* Floating point types used by the library */
typedef double FTGL_DOUBLE;
typedef float FTGL_FLOAT;
/* Macros used to declare C-linkage types and symbols */
#ifdef __cplusplus
# define FTGL_BEGIN_C_DECLS extern "C" { namespace FTGL {
# define FTGL_END_C_DECLS } }
#else
# define FTGL_BEGIN_C_DECLS
# define FTGL_END_C_DECLS
#endif
#ifdef __cplusplus
namespace FTGL
{
typedef enum
{
RENDER_FRONT = 0x0001,
RENDER_BACK = 0x0002,
RENDER_SIDE = 0x0004,
RENDER_ALL = 0xffff
} RenderMode;
typedef enum
{
ALIGN_LEFT = 0,
ALIGN_CENTER = 1,
ALIGN_RIGHT = 2,
ALIGN_JUSTIFY = 3
} TextAlignment;
}
#else
# define FTGL_RENDER_FRONT 0x0001
# define FTGL_RENDER_BACK 0x0002
# define FTGL_RENDER_SIDE 0x0004
# define FTGL_RENDER_ALL 0xffff
# define FTGL_ALIGN_LEFT 0
# define FTGL_ALIGN_CENTER 1
# define FTGL_ALIGN_RIGHT 2
# define FTGL_ALIGN_JUSTIFY 3
#endif
// Compiler-specific conditional compilation
#ifdef _MSC_VER // MS Visual C++
// Disable various warning.
// 4786: template name too long
#pragma warning(disable : 4251)
#pragma warning(disable : 4275)
#pragma warning(disable : 4786)
// The following definitions control how symbols are exported.
// If the target is a static library ensure that FTGL_LIBRARY_STATIC
// is defined. If building a dynamic library (ie DLL) ensure the
// FTGL_LIBRARY macro is defined, as it will mark symbols for
// export. If compiling a project to _use_ the _dynamic_ library
// version of the library, no definition is required.
#ifdef FTGL_LIBRARY_STATIC // static lib - no special export required
# define FTGL_EXPORT
#elif FTGL_LIBRARY // dynamic lib - must export/import symbols appropriately.
# define FTGL_EXPORT __declspec(dllexport)
#else
# define FTGL_EXPORT __declspec(dllimport)
#endif
#else
// Compiler that is not MS Visual C++.
// Ensure that the export symbol is defined (and blank)
#define FTGL_EXPORT
#endif
#include <FTGL/FTPoint.h>
#include <FTGL/FTBBox.h>
#include <FTGL/FTBuffer.h>
#include <FTGL/FTGlyph.h>
#include <FTGL/FTBitmapGlyph.h>
#include <FTGL/FTBufferGlyph.h>
#include <FTGL/FTExtrdGlyph.h>
#include <FTGL/FTOutlineGlyph.h>
#include <FTGL/FTPixmapGlyph.h>
#include <FTGL/FTPolyGlyph.h>
#include <FTGL/FTTextureGlyph.h>
#include <FTGL/FTFont.h>
#include <FTGL/FTGLBitmapFont.h>
#include <FTGL/FTBufferFont.h>
#include <FTGL/FTGLExtrdFont.h>
#include <FTGL/FTGLOutlineFont.h>
#include <FTGL/FTGLPixmapFont.h>
#include <FTGL/FTGLPolygonFont.h>
#include <FTGL/FTGLTextureFont.h>
#include <FTGL/FTLayout.h>
#include <FTGL/FTSimpleLayout.h>
#endif // __ftgl__

4
bazaar/FTGL/init Normal file
View file

@ -0,0 +1,4 @@
#ifndef _FTGL_icpp_init_stub
#define _FTGL_icpp_init_stub
#include "freetype/init"
#endif

View file

@ -0,0 +1,69 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "config.h"
#include "FTGL/ftgl.h"
FTBuffer::FTBuffer()
: width(0),
height(0),
pixels(0),
pos(FTPoint())
{
}
FTBuffer::~FTBuffer()
{
if(pixels)
{
delete[] pixels;
}
}
void FTBuffer::Size(int w, int h)
{
if(w == width && h == height)
{
return;
}
if(w * h != width * height)
{
if(pixels)
{
delete[] pixels;
}
pixels = new unsigned char[w * h];
}
memset(pixels, 0, w * h);
width = w;
height = h;
}

View file

@ -0,0 +1,155 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTCharToGlyphIndexMap__
#define __FTCharToGlyphIndexMap__
#include <stdlib.h>
#include "FTGL/ftgl.h"
/**
* Provides a non-STL alternative to the STL map<unsigned long, unsigned long>
* which maps character codes to glyph indices inside FTCharmap.
*
* Implementation:
* - NumberOfBuckets buckets are considered.
* - Each bucket has BucketSize entries.
* - When the glyph index for the character code C has to be stored, the
* bucket this character belongs to is found using 'C div BucketSize'.
* If this bucket has not been allocated yet, do it now.
* The entry in the bucked is found using 'C mod BucketSize'.
* If it is set to IndexNotFound, then the glyph entry has not been set.
* - Try to mimic the calls made to the STL map API.
*
* Caveats:
* - The glyph index is now a signed long instead of unsigned long, so
* the special value IndexNotFound (= -1) can be used to specify that the
* glyph index has not been stored yet.
*/
class FTCharToGlyphIndexMap
{
public:
typedef unsigned long CharacterCode;
typedef signed long GlyphIndex;
enum
{
NumberOfBuckets = 256,
BucketSize = 256,
IndexNotFound = -1
};
FTCharToGlyphIndexMap()
{
this->Indices = 0;
}
virtual ~FTCharToGlyphIndexMap()
{
if(this->Indices)
{
// Free all buckets
this->clear();
// Free main structure
delete [] this->Indices;
this->Indices = 0;
}
}
void clear()
{
if(this->Indices)
{
for(int i = 0; i < FTCharToGlyphIndexMap::NumberOfBuckets; i++)
{
if(this->Indices[i])
{
delete [] this->Indices[i];
this->Indices[i] = 0;
}
}
}
}
const GlyphIndex find(CharacterCode c)
{
if(!this->Indices)
{
return 0;
}
// Find position of char code in buckets
div_t pos = div(c, FTCharToGlyphIndexMap::BucketSize);
if(!this->Indices[pos.quot])
{
return 0;
}
const FTCharToGlyphIndexMap::GlyphIndex *ptr = &this->Indices[pos.quot][pos.rem];
if(*ptr == FTCharToGlyphIndexMap::IndexNotFound)
{
return 0;
}
return *ptr;
}
void insert(CharacterCode c, GlyphIndex g)
{
if(!this->Indices)
{
this->Indices = new GlyphIndex* [FTCharToGlyphIndexMap::NumberOfBuckets];
for(int i = 0; i < FTCharToGlyphIndexMap::NumberOfBuckets; i++)
{
this->Indices[i] = 0;
}
}
// Find position of char code in buckets
div_t pos = div(c, FTCharToGlyphIndexMap::BucketSize);
// Allocate bucket if does not exist yet
if(!this->Indices[pos.quot])
{
this->Indices[pos.quot] = new GlyphIndex [FTCharToGlyphIndexMap::BucketSize];
for(int i = 0; i < FTCharToGlyphIndexMap::BucketSize; i++)
{
this->Indices[pos.quot][i] = FTCharToGlyphIndexMap::IndexNotFound;
}
}
this->Indices[pos.quot][pos.rem] = g;
}
private:
GlyphIndex** Indices;
};
#endif // __FTCharToGlyphIndexMap__

View file

@ -0,0 +1,106 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "config.h"
#include "FTFace.h"
#include "FTCharmap.h"
FTCharmap::FTCharmap(FTFace* face)
: ftFace(*(face->Face())),
err(0)
{
if(!ftFace->charmap)
{
if(!ftFace->num_charmaps)
{
// This face doesn't even have one charmap!
err = 0x96; // Invalid_CharMap_Format
return;
}
err = FT_Set_Charmap(ftFace, ftFace->charmaps[0]);
}
ftEncoding = ftFace->charmap->encoding;
for(unsigned int i = 0; i < FTCharmap::MAX_PRECOMPUTED; i++)
{
charIndexCache[i] = FT_Get_Char_Index(ftFace, i);
}
}
FTCharmap::~FTCharmap()
{
charMap.clear();
}
bool FTCharmap::CharMap(FT_Encoding encoding)
{
if(ftEncoding == encoding)
{
err = 0;
return true;
}
err = FT_Select_Charmap(ftFace, encoding);
if(!err)
{
ftEncoding = encoding;
charMap.clear();
}
return !err;
}
unsigned int FTCharmap::GlyphListIndex(const unsigned int characterCode)
{
return charMap.find(characterCode);
}
unsigned int FTCharmap::FontIndex(const unsigned int characterCode)
{
if(characterCode < FTCharmap::MAX_PRECOMPUTED)
{
return charIndexCache[characterCode];
}
return FT_Get_Char_Index(ftFace, characterCode);
}
void FTCharmap::InsertIndex(const unsigned int characterCode,
const size_t containerIndex)
{
charMap.insert(characterCode, static_cast<FTCharToGlyphIndexMap::GlyphIndex>(containerIndex));
}

165
bazaar/FTGL/src/FTCharmap.h Normal file
View file

@ -0,0 +1,165 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTCharmap__
#define __FTCharmap__
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
#include "FTGL/ftgl.h"
#include "FTCharToGlyphIndexMap.h"
/**
* FTCharmap takes care of specifying the encoding for a font and mapping
* character codes to glyph indices.
*
* It doesn't preprocess all indices, only on an as needed basis. This may
* seem like a performance penalty but it is quicker than using the 'raw'
* freetype calls and will save significant amounts of memory when dealing
* with unicode encoding
*
* @see "Freetype 2 Documentation"
*
*/
class FTFace;
class FTCharmap
{
public:
/**
* Constructor
*/
FTCharmap(FTFace* face);
/**
* Destructor
*/
virtual ~FTCharmap();
/**
* Queries for the current character map code.
*
* @return The current character map code.
*/
FT_Encoding Encoding() const { return ftEncoding; }
/**
* Sets the character map for the face. If an error occurs the object is not modified.
* Valid encodings as at Freetype 2.0.4
* ft_encoding_none
* ft_encoding_symbol
* ft_encoding_unicode
* ft_encoding_latin_2
* ft_encoding_sjis
* ft_encoding_gb2312
* ft_encoding_big5
* ft_encoding_wansung
* ft_encoding_johab
* ft_encoding_adobe_standard
* ft_encoding_adobe_expert
* ft_encoding_adobe_custom
* ft_encoding_apple_roman
*
* @param encoding the Freetype encoding symbol. See above.
* @return <code>true</code> if charmap was valid and set
* correctly.
*/
bool CharMap(FT_Encoding encoding);
/**
* Get the FTGlyphContainer index of the input character.
*
* @param characterCode The character code of the requested glyph in
* the current encoding eg apple roman.
* @return The FTGlyphContainer index for the character or zero
* if it wasn't found
*/
unsigned int GlyphListIndex(const unsigned int characterCode);
/**
* Get the font glyph index of the input character.
*
* @param characterCode The character code of the requested glyph in
* the current encoding eg apple roman.
* @return The glyph index for the character.
*/
unsigned int FontIndex(const unsigned int characterCode);
/**
* Set the FTGlyphContainer index of the character code.
*
* @param characterCode The character code of the requested glyph in
* the current encoding eg apple roman.
* @param containerIndex The index into the FTGlyphContainer of the
* character code.
*/
void InsertIndex(const unsigned int characterCode,
const size_t containerIndex);
/**
* Queries for errors.
*
* @return The current error code. Zero means no error.
*/
FT_Error Error() const { return err; }
private:
/**
* Current character map code.
*/
FT_Encoding ftEncoding;
/**
* The current Freetype face.
*/
const FT_Face ftFace;
/**
* A structure that maps glyph indices to character codes
*
* < character code, face glyph index>
*/
typedef FTCharToGlyphIndexMap CharacterMap;
CharacterMap charMap;
/**
* Precomputed font indices.
*/
static const unsigned int MAX_PRECOMPUTED = 128;
unsigned int charIndexCache[MAX_PRECOMPUTED];
/**
* Current error code.
*/
FT_Error err;
};
#endif // __FTCharmap__

View file

@ -0,0 +1,245 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
* Copyright (c) 2008 Éric Beets <ericbeets@free.fr>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "config.h"
#include "FTContour.h"
#include <math.h>
static const unsigned int BEZIER_STEPS = 5;
void FTContour::AddPoint(FTPoint point)
{
if(pointList.empty() || (point != pointList[pointList.size() - 1]
&& point != pointList[0]))
{
pointList.push_back(point);
}
}
void FTContour::AddOutsetPoint(FTPoint point)
{
outsetPointList.push_back(point);
}
void FTContour::AddFrontPoint(FTPoint point)
{
frontPointList.push_back(point);
}
void FTContour::AddBackPoint(FTPoint point)
{
backPointList.push_back(point);
}
void FTContour::evaluateQuadraticCurve(FTPoint A, FTPoint B, FTPoint C)
{
for(unsigned int i = 1; i < BEZIER_STEPS; i++)
{
float t = static_cast<float>(i) / BEZIER_STEPS;
FTPoint U = (1.0f - t) * A + t * B;
FTPoint V = (1.0f - t) * B + t * C;
AddPoint((1.0f - t) * U + t * V);
}
}
void FTContour::evaluateCubicCurve(FTPoint A, FTPoint B, FTPoint C, FTPoint D)
{
for(unsigned int i = 0; i < BEZIER_STEPS; i++)
{
float t = static_cast<float>(i) / BEZIER_STEPS;
FTPoint U = (1.0f - t) * A + t * B;
FTPoint V = (1.0f - t) * B + t * C;
FTPoint W = (1.0f - t) * C + t * D;
FTPoint M = (1.0f - t) * U + t * V;
FTPoint N = (1.0f - t) * V + t * W;
AddPoint((1.0f - t) * M + t * N);
}
}
// This function is a bit tricky. Given a path ABC, it returns the
// coordinates of the outset point facing B on the left at a distance
// of 64.0.
// M
// - - - - - - X
// ^ / '
// | 64.0 / '
// X---->-----X ==> X--v-------X '
// A B \ A B \ .>'
// \ \<' 64.0
// \ \ .
// \ \ .
// C X C X
//
FTPoint FTContour::ComputeOutsetPoint(FTPoint A, FTPoint B, FTPoint C)
{
/* Build the rotation matrix from 'ba' vector */
FTPoint ba = (A - B).Normalise();
FTPoint bc = C - B;
/* Rotate bc to the left */
FTPoint tmp(bc.X() * -ba.X() + bc.Y() * -ba.Y(),
bc.X() * ba.Y() + bc.Y() * -ba.X());
/* Compute the vector bisecting 'abc' */
FTGL_DOUBLE norm = sqrt(tmp.X() * tmp.X() + tmp.Y() * tmp.Y());
FTGL_DOUBLE dist = 64.0 * sqrt((norm - tmp.X()) / (norm + tmp.X()));
tmp.X(tmp.Y() < 0.0 ? dist : -dist);
tmp.Y(64.0);
/* Rotate the new bc to the right */
return FTPoint(tmp.X() * -ba.X() + tmp.Y() * ba.Y(),
tmp.X() * -ba.Y() + tmp.Y() * -ba.X());
}
void FTContour::SetParity(int parity)
{
size_t size = PointCount();
FTPoint vOutset;
if(((parity & 1) && clockwise) || (!(parity & 1) && !clockwise))
{
// Contour orientation is wrong! We must reverse all points.
// FIXME: could it be worth writing FTVector::reverse() for this?
for(size_t i = 0; i < size / 2; i++)
{
FTPoint tmp = pointList[i];
pointList[i] = pointList[size - 1 - i];
pointList[size - 1 -i] = tmp;
}
clockwise = !clockwise;
}
for(size_t i = 0; i < size; i++)
{
size_t prev, cur, next;
prev = (i + size - 1) % size;
cur = i;
next = (i + size + 1) % size;
vOutset = ComputeOutsetPoint(Point(prev), Point(cur), Point(next));
AddOutsetPoint(vOutset);
}
}
FTContour::FTContour(FT_Vector* contour, char* tags, unsigned int n)
{
FTPoint prev, cur(contour[(n - 1) % n]), next(contour[0]);
FTPoint a, b = next - cur;
double olddir, dir = atan2((next - cur).Y(), (next - cur).X());
double angle = 0.0;
// See http://freetype.sourceforge.net/freetype2/docs/glyphs/glyphs-6.html
// for a full description of FreeType tags.
for(unsigned int i = 0; i < n; i++)
{
prev = cur;
cur = next;
next = FTPoint(contour[(i + 1) % n]);
olddir = dir;
dir = atan2((next - cur).Y(), (next - cur).X());
// Compute our path's new direction.
double t = dir - olddir;
if(t < -M_PI) t += 2 * M_PI;
if(t > M_PI) t -= 2 * M_PI;
angle += t;
// Only process point tags we know.
if(n < 2 || FT_CURVE_TAG(tags[i]) == FT_Curve_Tag_On)
{
AddPoint(cur);
}
else if(FT_CURVE_TAG(tags[i]) == FT_Curve_Tag_Conic)
{
FTPoint prev2 = prev, next2 = next;
// Previous point is either the real previous point (an "on"
// point), or the midpoint between the current one and the
// previous "conic off" point.
if(FT_CURVE_TAG(tags[(i - 1 + n) % n]) == FT_Curve_Tag_Conic)
{
prev2 = (cur + prev) * 0.5;
AddPoint(prev2);
}
// Next point is either the real next point or the midpoint.
if(FT_CURVE_TAG(tags[(i + 1) % n]) == FT_Curve_Tag_Conic)
{
next2 = (cur + next) * 0.5;
}
evaluateQuadraticCurve(prev2, cur, next2);
}
else if(FT_CURVE_TAG(tags[i]) == FT_Curve_Tag_Cubic
&& FT_CURVE_TAG(tags[(i + 1) % n]) == FT_Curve_Tag_Cubic)
{
evaluateCubicCurve(prev, cur, next,
FTPoint(contour[(i + 2) % n]));
}
}
// If final angle is positive (+2PI), it's an anti-clockwise contour,
// otherwise (-2PI) it's clockwise.
clockwise = (angle < 0.0);
}
void FTContour::buildFrontOutset(float outset)
{
for(size_t i = 0; i < PointCount(); ++i)
{
AddFrontPoint(Point(i) + Outset(i) * outset);
}
}
void FTContour::buildBackOutset(float outset)
{
for(size_t i = 0; i < PointCount(); ++i)
{
AddBackPoint(Point(i) + Outset(i) * outset);
}
}

209
bazaar/FTGL/src/FTContour.h Normal file
View file

@ -0,0 +1,209 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Éric Beets <ericbeets@free.fr>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTContour__
#define __FTContour__
#include "FTGL/ftgl.h"
#include "FTVector.h"
/**
* FTContour class is a container of points that describe a vector font
* outline. It is used as a container for the output of the bezier curve
* evaluator in FTVectoriser.
*
* @see FTOutlineGlyph
* @see FTPolygonGlyph
* @see FTPoint
*/
class FTContour
{
public:
/**
* Constructor
*
* @param contour
* @param pointTags
* @param numberOfPoints
*/
FTContour(FT_Vector* contour, char* pointTags, unsigned int numberOfPoints);
/**
* Destructor
*/
~FTContour()
{
pointList.clear();
outsetPointList.clear();
frontPointList.clear();
backPointList.clear();
}
/**
* Return a point at index.
*
* @param index of the point in the curve.
* @return const point reference
*/
const FTPoint& Point(size_t index) const { return pointList[index]; }
/**
* Return a point at index.
*
* @param index of the point in the outset curve.
* @return const point reference
*/
const FTPoint& Outset(size_t index) const { return outsetPointList[index]; }
/**
* Return a point at index of the front outset contour.
*
* @param index of the point in the curve.
* @return const point reference
*/
const FTPoint& FrontPoint(size_t index) const
{
if(frontPointList.size() == 0)
return Point(index);
return frontPointList[index];
}
/**
* Return a point at index of the back outset contour.
*
* @param index of the point in the curve.
* @return const point reference
*/
const FTPoint& BackPoint(size_t index) const
{
if(backPointList.size() == 0)
return Point(index);
return backPointList[index];
}
/**
* How many points define this contour
*
* @return the number of points in this contour
*/
size_t PointCount() const { return pointList.size(); }
/**
* Make sure the glyph has the proper parity and create the front/back
* outset contour.
*
* @param parity The contour's parity within the glyph.
*/
void SetParity(int parity);
// FIXME: this should probably go away.
void buildFrontOutset(float outset);
void buildBackOutset(float outset);
private:
/**
* Add a point to this contour. This function tests for duplicate
* points.
*
* @param point The point to be added to the contour.
*/
inline void AddPoint(FTPoint point);
/**
* Add a point to this contour. This function tests for duplicate
* points.
*
* @param point The point to be added to the contour.
*/
inline void AddOutsetPoint(FTPoint point);
/*
* Add a point to this outset contour. This function tests for duplicate
* points.
*
* @param point The point to be added to the contour outset.
*/
inline void AddFrontPoint(FTPoint point);
inline void AddBackPoint(FTPoint point);
/**
* De Casteljau (bezier) algorithm contributed by Jed Soane
* Evaluates a quadratic or conic (second degree) curve
*/
inline void evaluateQuadraticCurve(FTPoint, FTPoint, FTPoint);
/**
* De Casteljau (bezier) algorithm contributed by Jed Soane
* Evaluates a cubic (third degree) curve
*/
inline void evaluateCubicCurve(FTPoint, FTPoint, FTPoint, FTPoint);
/**
* Compute the vector norm
*/
inline FTGL_DOUBLE NormVector(const FTPoint &v);
/**
* Compute a rotation matrix from a vector
*/
inline void RotationMatrix(const FTPoint &a, const FTPoint &b, FTGL_DOUBLE *matRot, FTGL_DOUBLE *invRot);
/**
* Matrix and vector multiplication
*/
inline void MultMatrixVect(FTGL_DOUBLE *mat, FTPoint &v);
/**
* Compute the vector bisecting from a vector 'v' and a distance 'd'
*/
inline void ComputeBisec(FTPoint &v);
/**
* Compute the outset point coordinates
*/
inline FTPoint ComputeOutsetPoint(FTPoint a, FTPoint b, FTPoint c);
/**
* The list of points in this contour
*/
typedef FTVector<FTPoint> PointVector;
PointVector pointList;
PointVector outsetPointList;
PointVector frontPointList;
PointVector backPointList;
/**
* Is this contour clockwise or anti-clockwise?
*/
bool clockwise;
};
#endif // __FTContour__

232
bazaar/FTGL/src/FTFace.cpp Normal file
View file

@ -0,0 +1,232 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "config.h"
#include "FTFace.h"
#include "FTLibrary.h"
#include FT_TRUETYPE_TABLES_H
FTFace::FTFace(const char* fontFilePath, bool precomputeKerning)
: numGlyphs(0),
fontEncodingList(0),
kerningCache(0),
err(0)
{
const FT_Long DEFAULT_FACE_INDEX = 0;
ftFace = new FT_Face;
err = FT_New_Face(*FTLibrary::Instance().GetLibrary(), fontFilePath,
DEFAULT_FACE_INDEX, ftFace);
if(err)
{
delete ftFace;
ftFace = 0;
return;
}
numGlyphs = (*ftFace)->num_glyphs;
hasKerningTable = (FT_HAS_KERNING((*ftFace)) != 0);
if(hasKerningTable && precomputeKerning)
{
BuildKerningCache();
}
}
FTFace::FTFace(const unsigned char *pBufferBytes, size_t bufferSizeInBytes,
bool precomputeKerning)
: numGlyphs(0),
fontEncodingList(0),
kerningCache(0),
err(0)
{
const FT_Long DEFAULT_FACE_INDEX = 0;
ftFace = new FT_Face;
err = FT_New_Memory_Face(*FTLibrary::Instance().GetLibrary(),
(FT_Byte const *)pBufferBytes, (FT_Long)bufferSizeInBytes,
DEFAULT_FACE_INDEX, ftFace);
if(err)
{
delete ftFace;
ftFace = 0;
return;
}
numGlyphs = (*ftFace)->num_glyphs;
hasKerningTable = (FT_HAS_KERNING((*ftFace)) != 0);
if(hasKerningTable && precomputeKerning)
{
BuildKerningCache();
}
}
FTFace::~FTFace()
{
if(kerningCache)
{
delete[] kerningCache;
}
if(ftFace)
{
FT_Done_Face(*ftFace);
delete ftFace;
ftFace = 0;
}
}
bool FTFace::Attach(const char* fontFilePath)
{
err = FT_Attach_File(*ftFace, fontFilePath);
return !err;
}
bool FTFace::Attach(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes)
{
FT_Open_Args open;
open.flags = FT_OPEN_MEMORY;
open.memory_base = (FT_Byte const *)pBufferBytes;
open.memory_size = (FT_Long)bufferSizeInBytes;
err = FT_Attach_Stream(*ftFace, &open);
return !err;
}
const FTSize& FTFace::Size(const unsigned int size, const unsigned int res)
{
charSize.CharSize(ftFace, size, res, res);
err = charSize.Error();
return charSize;
}
unsigned int FTFace::CharMapCount() const
{
return (*ftFace)->num_charmaps;
}
FT_Encoding* FTFace::CharMapList()
{
if(0 == fontEncodingList)
{
fontEncodingList = new FT_Encoding[CharMapCount()];
for(size_t i = 0; i < CharMapCount(); ++i)
{
fontEncodingList[i] = (*ftFace)->charmaps[i]->encoding;
}
}
return fontEncodingList;
}
FTPoint FTFace::KernAdvance(unsigned int index1, unsigned int index2)
{
float x, y;
if(!hasKerningTable || !index1 || !index2)
{
return FTPoint(0.0f, 0.0f);
}
if(kerningCache && index1 < FTFace::MAX_PRECOMPUTED
&& index2 < FTFace::MAX_PRECOMPUTED)
{
x = kerningCache[2 * (index2 * FTFace::MAX_PRECOMPUTED + index1)];
y = kerningCache[2 * (index2 * FTFace::MAX_PRECOMPUTED + index1) + 1];
return FTPoint(x, y);
}
FT_Vector kernAdvance;
kernAdvance.x = kernAdvance.y = 0;
err = FT_Get_Kerning(*ftFace, index1, index2, ft_kerning_unfitted,
&kernAdvance);
if(err)
{
return FTPoint(0.0f, 0.0f);
}
x = static_cast<float>(kernAdvance.x) / 64.0f;
y = static_cast<float>(kernAdvance.y) / 64.0f;
return FTPoint(x, y);
}
FT_GlyphSlot FTFace::Glyph(unsigned int index, FT_Int load_flags)
{
err = FT_Load_Glyph(*ftFace, index, load_flags);
if(err)
{
return NULL;
}
return (*ftFace)->glyph;
}
void FTFace::BuildKerningCache()
{
FT_Vector kernAdvance;
kernAdvance.x = 0;
kernAdvance.y = 0;
kerningCache = new float[FTFace::MAX_PRECOMPUTED
* FTFace::MAX_PRECOMPUTED * 2];
for(unsigned int j = 0; j < FTFace::MAX_PRECOMPUTED; j++)
{
for(unsigned int i = 0; i < FTFace::MAX_PRECOMPUTED; i++)
{
err = FT_Get_Kerning(*ftFace, i, j, ft_kerning_unfitted,
&kernAdvance);
if(err)
{
delete[] kerningCache;
kerningCache = NULL;
return;
}
kerningCache[2 * (j * FTFace::MAX_PRECOMPUTED + i)] =
static_cast<float>(kernAdvance.x) / 64.0f;
kerningCache[2 * (j * FTFace::MAX_PRECOMPUTED + i) + 1] =
static_cast<float>(kernAdvance.y) / 64.0f;
}
}
}

181
bazaar/FTGL/src/FTFace.h Normal file
View file

@ -0,0 +1,181 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTFace__
#define __FTFace__
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
#include "FTGL/ftgl.h"
#include "FTSize.h"
/**
* FTFace class provides an abstraction layer for the Freetype Face.
*
* @see "Freetype 2 Documentation"
*
*/
class FTFace
{
public:
/**
* Opens and reads a face file. Error is set.
*
* @param fontFilePath font file path.
*/
FTFace(const char* fontFilePath, bool precomputeKerning = true);
/**
* Read face data from an in-memory buffer. Error is set.
*
* @param pBufferBytes the in-memory buffer
* @param bufferSizeInBytes the length of the buffer in bytes
*/
FTFace(const unsigned char *pBufferBytes, size_t bufferSizeInBytes,
bool precomputeKerning = true);
/**
* Destructor
*
* Disposes of the current Freetype Face.
*/
virtual ~FTFace();
/**
* Attach auxilliary file to font (e.g., font metrics).
*
* @param fontFilePath auxilliary font file path.
* @return <code>true</code> if file has opened
* successfully.
*/
bool Attach(const char* fontFilePath);
/**
* Attach auxilliary data to font (e.g., font metrics) from memory
*
* @param pBufferBytes the in-memory buffer
* @param bufferSizeInBytes the length of the buffer in bytes
* @return <code>true</code> if file has opened
* successfully.
*/
bool Attach(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
/**
* Get the freetype face object..
*
* @return pointer to an FT_Face.
*/
FT_Face* Face() const { return ftFace; }
/**
* Sets the char size for the current face.
*
* This doesn't guarantee that the size was set correctly. Clients
* should check errors.
*
* @param size the face size in points (1/72 inch)
* @param res the resolution of the target device.
* @return <code>FTSize</code> object
*/
const FTSize& Size(const unsigned int size, const unsigned int res);
/**
* Get the number of character maps in this face.
*
* @return character map count.
*/
unsigned int CharMapCount() const;
/**
* Get a list of character maps in this face.
*
* @return pointer to the first encoding.
*/
FT_Encoding* CharMapList();
/**
* Gets the kerning vector between two glyphs
*/
FTPoint KernAdvance(unsigned int index1, unsigned int index2);
/**
* Loads and creates a Freetype glyph.
*/
FT_GlyphSlot Glyph(unsigned int index, FT_Int load_flags);
/**
* Gets the number of glyphs in the current face.
*/
unsigned int GlyphCount() const { return numGlyphs; }
/**
* Queries for errors.
*
* @return The current error code.
*/
FT_Error Error() const { return err; }
private:
/**
* The Freetype face
*/
FT_Face* ftFace;
/**
* The size object associated with this face
*/
FTSize charSize;
/**
* The number of glyphs in this face
*/
int numGlyphs;
FT_Encoding* fontEncodingList;
/**
* This face has kerning tables
*/
bool hasKerningTable;
/**
* If this face has kerning tables, we can cache them.
*/
void BuildKerningCache();
static const unsigned int MAX_PRECOMPUTED = 128;
float *kerningCache;
/**
* Current error code. Zero means no error.
*/
FT_Error err;
};
#endif // __FTFace__

View file

@ -0,0 +1,106 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTBitmapFontImpl.h"
//
// FTBitmapFont
//
FTBitmapFont::FTBitmapFont(char const *fontFilePath) :
FTFont(new FTBitmapFontImpl(this, fontFilePath))
{}
FTBitmapFont::FTBitmapFont(unsigned char const *pBufferBytes,
size_t bufferSizeInBytes) :
FTFont(new FTBitmapFontImpl(this, pBufferBytes, bufferSizeInBytes))
{}
FTBitmapFont::~FTBitmapFont()
{}
FTGlyph* FTBitmapFont::MakeGlyph(FT_GlyphSlot ftGlyph)
{
return new FTBitmapGlyph(ftGlyph);
}
//
// FTBitmapFontImpl
//
template <typename T>
inline FTPoint FTBitmapFontImpl::RenderI(const T* string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
// Protect GL_BLEND
glPushAttrib(GL_COLOR_BUFFER_BIT);
// Protect glPixelStorei() calls (also in FTBitmapGlyphImpl::RenderImpl)
glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT);
glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glDisable(GL_BLEND);
FTPoint tmp = FTFontImpl::Render(string, len,
position, spacing, renderMode);
glPopClientAttrib();
glPopAttrib();
return tmp;
}
FTPoint FTBitmapFontImpl::Render(const char * string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
return RenderI(string, len, position, spacing, renderMode);
}
FTPoint FTBitmapFontImpl::Render(const wchar_t * string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
return RenderI(string, len, position, spacing, renderMode);
}

View file

@ -0,0 +1,62 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTBitmapFontImpl__
#define __FTBitmapFontImpl__
#include "FTFontImpl.h"
class FTGlyph;
class FTBitmapFontImpl : public FTFontImpl
{
friend class FTBitmapFont;
protected:
FTBitmapFontImpl(FTFont *ftFont, const char* fontFilePath) :
FTFontImpl(ftFont, fontFilePath) {};
FTBitmapFontImpl(FTFont *ftFont, const unsigned char *pBufferBytes,
size_t bufferSizeInBytes) :
FTFontImpl(ftFont, pBufferBytes, bufferSizeInBytes) {};
virtual FTPoint Render(const char *s, const int len,
FTPoint position, FTPoint spacing,
int renderMode);
virtual FTPoint Render(const wchar_t *s, const int len,
FTPoint position, FTPoint spacing,
int renderMode);
private:
/* Internal generic Render() implementation */
template <typename T>
inline FTPoint RenderI(const T *s, const int len,
FTPoint position, FTPoint spacing, int mode);
};
#endif // __FTBitmapFontImpl__

View file

@ -0,0 +1,349 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include <wchar.h>
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTBufferFontImpl.h"
//
// FTBufferFont
//
FTBufferFont::FTBufferFont(char const *fontFilePath) :
FTFont(new FTBufferFontImpl(this, fontFilePath))
{}
FTBufferFont::FTBufferFont(unsigned char const *pBufferBytes,
size_t bufferSizeInBytes) :
FTFont(new FTBufferFontImpl(this, pBufferBytes, bufferSizeInBytes))
{}
FTBufferFont::~FTBufferFont()
{}
FTGlyph* FTBufferFont::MakeGlyph(FT_GlyphSlot ftGlyph)
{
FTBufferFontImpl *myimpl = dynamic_cast<FTBufferFontImpl *>(impl);
if(!myimpl)
{
return NULL;
}
return myimpl->MakeGlyphImpl(ftGlyph);
}
//
// FTBufferFontImpl
//
FTBufferFontImpl::FTBufferFontImpl(FTFont *ftFont, const char* fontFilePath) :
FTFontImpl(ftFont, fontFilePath),
buffer(new FTBuffer())
{
load_flags = FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP;
glGenTextures(BUFFER_CACHE_SIZE, idCache);
for(int i = 0; i < BUFFER_CACHE_SIZE; i++)
{
stringCache[i] = NULL;
glBindTexture(GL_TEXTURE_2D, idCache[i]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
lastString = 0;
}
FTBufferFontImpl::FTBufferFontImpl(FTFont *ftFont,
const unsigned char *pBufferBytes,
size_t bufferSizeInBytes) :
FTFontImpl(ftFont, pBufferBytes, bufferSizeInBytes),
buffer(new FTBuffer())
{
load_flags = FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP;
glGenTextures(BUFFER_CACHE_SIZE, idCache);
for(int i = 0; i < BUFFER_CACHE_SIZE; i++)
{
stringCache[i] = NULL;
glBindTexture(GL_TEXTURE_2D, idCache[i]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
lastString = 0;
}
FTBufferFontImpl::~FTBufferFontImpl()
{
glDeleteTextures(BUFFER_CACHE_SIZE, idCache);
for(int i = 0; i < BUFFER_CACHE_SIZE; i++)
{
if(stringCache[i])
{
free(stringCache[i]);
}
}
delete buffer;
}
FTGlyph* FTBufferFontImpl::MakeGlyphImpl(FT_GlyphSlot ftGlyph)
{
return new FTBufferGlyph(ftGlyph, buffer);
}
bool FTBufferFontImpl::FaceSize(const unsigned int size,
const unsigned int res)
{
for(int i = 0; i < BUFFER_CACHE_SIZE; i++)
{
if(stringCache[i])
{
free(stringCache[i]);
stringCache[i] = NULL;
}
}
return FTFontImpl::FaceSize(size, res);
}
static inline GLuint NextPowerOf2(GLuint in)
{
in -= 1;
in |= in >> 16;
in |= in >> 8;
in |= in >> 4;
in |= in >> 2;
in |= in >> 1;
return in + 1;
}
inline int StringCompare(void const *a, char const *b, int len)
{
return len < 0 ? strcmp((char const *)a, b)
: strncmp((char const *)a, b, len);
}
inline int StringCompare(void const *a, wchar_t const *b, int len)
{
return len < 0 ? wcscmp((wchar_t const *)a, b)
: wcsncmp((wchar_t const *)a, b, len);
}
inline char *StringCopy(char const *s, int len)
{
if(len < 0)
{
return strdup(s);
}
else
{
#ifdef HAVE_STRNDUP
return strndup(s, len);
#else
char *s2 = (char*)malloc(len + 1);
memcpy(s2, s, len);
s2[len] = 0;
return s2;
#endif
}
}
inline wchar_t *StringCopy(wchar_t const *s, int len)
{
if(len < 0)
{
#if defined HAVE_WCSDUP
return wcsdup(s);
#else
len = (int)wcslen(s);
#endif
}
wchar_t *s2 = (wchar_t *)malloc((len + 1) * sizeof(wchar_t));
memcpy(s2, s, len * sizeof(wchar_t));
s2[len] = 0;
return s2;
}
template <typename T>
inline FTPoint FTBufferFontImpl::RenderI(const T* string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
const float padding = 3.0f;
int width, height, texWidth, texHeight;
int cacheIndex = -1;
bool inCache = false;
// Protect blending functions, GL_BLEND and GL_TEXTURE_2D
glPushAttrib(GL_COLOR_BUFFER_BIT | GL_ENABLE_BIT);
// Protect glPixelStorei() calls
glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT);
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // GL_ONE
// Search whether the string is already in a texture we uploaded
for(int n = 0; n < BUFFER_CACHE_SIZE; n++)
{
int i = (lastString + n + BUFFER_CACHE_SIZE) % BUFFER_CACHE_SIZE;
if(stringCache[i] && !StringCompare(stringCache[i], string, len))
{
cacheIndex = i;
inCache = true;
break;
}
}
// If the string was not found, we need to put it in the cache and compute
// its new bounding box.
if(!inCache)
{
// FIXME: this cache is not very efficient. We should first expire
// strings that are not used very often.
cacheIndex = lastString;
lastString = (lastString + 1) % BUFFER_CACHE_SIZE;
if(stringCache[cacheIndex])
{
free(stringCache[cacheIndex]);
}
// FIXME: only the first N bytes are copied; we want the first N chars.
stringCache[cacheIndex] = StringCopy(string, len);
bboxCache[cacheIndex] = BBox(string, len, FTPoint(), spacing);
}
FTBBox bbox = bboxCache[cacheIndex];
width = static_cast<int>(bbox.Upper().X() - bbox.Lower().X()
+ padding + padding + 0.5);
height = static_cast<int>(bbox.Upper().Y() - bbox.Lower().Y()
+ padding + padding + 0.5);
texWidth = NextPowerOf2(width);
texHeight = NextPowerOf2(height);
glBindTexture(GL_TEXTURE_2D, idCache[cacheIndex]);
// If the string was not found, we need to render the text in a new
// texture buffer, then upload it to the OpenGL layer.
if(!inCache)
{
buffer->Size(texWidth, texHeight);
buffer->Pos(FTPoint(padding, padding) - bbox.Lower());
advanceCache[cacheIndex] =
FTFontImpl::Render(string, len, FTPoint(), spacing, renderMode);
glBindTexture(GL_TEXTURE_2D, idCache[cacheIndex]);
glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
/* TODO: use glTexSubImage2D later? */
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, texWidth, texHeight, 0,
GL_ALPHA, GL_UNSIGNED_BYTE, (GLvoid *)buffer->Pixels());
buffer->Size(0, 0);
}
FTPoint low = position + bbox.Lower();
FTPoint up = position + bbox.Upper();
glBegin(GL_QUADS);
glNormal3f(0.0f, 0.0f, 1.0f);
glTexCoord2f(padding / texWidth,
(texHeight - height + padding) / texHeight);
glVertex2f(low.Xf(), up.Yf());
glTexCoord2f(padding / texWidth,
(texHeight - padding) / texHeight);
glVertex2f(low.Xf(), low.Yf());
glTexCoord2f((width - padding) / texWidth,
(texHeight - padding) / texHeight);
glVertex2f(up.Xf(), low.Yf());
glTexCoord2f((width - padding) / texWidth,
(texHeight - height + padding) / texHeight);
glVertex2f(up.Xf(), up.Yf());
glEnd();
glPopClientAttrib();
glPopAttrib();
return position + advanceCache[cacheIndex];
}
FTPoint FTBufferFontImpl::Render(const char * string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
return RenderI(string, len, position, spacing, renderMode);
}
FTPoint FTBufferFontImpl::Render(const wchar_t * string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
return RenderI(string, len, position, spacing, renderMode);
}

View file

@ -0,0 +1,81 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTBufferFontImpl__
#define __FTBufferFontImpl__
#include "FTFontImpl.h"
class FTGlyph;
class FTBuffer;
class FTBufferFontImpl : public FTFontImpl
{
friend class FTBufferFont;
protected:
FTBufferFontImpl(FTFont *ftFont, const char* fontFilePath);
FTBufferFontImpl(FTFont *ftFont, const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
virtual ~FTBufferFontImpl();
virtual FTPoint Render(const char *s, const int len,
FTPoint position, FTPoint spacing,
int renderMode);
virtual FTPoint Render(const wchar_t *s, const int len,
FTPoint position, FTPoint spacing,
int renderMode);
virtual bool FaceSize(const unsigned int size,
const unsigned int res);
private:
/**
* Create an FTBufferGlyph object for the base class.
*/
FTGlyph* MakeGlyphImpl(FT_GlyphSlot ftGlyph);
/* Internal generic Render() implementation */
template <typename T>
inline FTPoint RenderI(const T *s, const int len,
FTPoint position, FTPoint spacing, int mode);
/* Pixel buffer */
FTBuffer *buffer;
static const int BUFFER_CACHE_SIZE = 16;
/* Texture IDs */
GLuint idCache[BUFFER_CACHE_SIZE];
void *stringCache[BUFFER_CACHE_SIZE];
FTBBox bboxCache[BUFFER_CACHE_SIZE];
FTPoint advanceCache[BUFFER_CACHE_SIZE];
int lastString;
};
#endif // __FTBufferFontImpl__

View file

@ -0,0 +1,89 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTExtrudeFontImpl.h"
//
// FTExtrudeFont
//
FTExtrudeFont::FTExtrudeFont(char const *fontFilePath) :
FTFont(new FTExtrudeFontImpl(this, fontFilePath))
{}
FTExtrudeFont::FTExtrudeFont(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes) :
FTFont(new FTExtrudeFontImpl(this, pBufferBytes, bufferSizeInBytes))
{}
FTExtrudeFont::~FTExtrudeFont()
{}
FTGlyph* FTExtrudeFont::MakeGlyph(FT_GlyphSlot ftGlyph)
{
FTExtrudeFontImpl *myimpl = dynamic_cast<FTExtrudeFontImpl *>(impl);
if(!myimpl)
{
return NULL;
}
return new FTExtrudeGlyph(ftGlyph, myimpl->depth, myimpl->front,
myimpl->back, myimpl->useDisplayLists);
}
//
// FTExtrudeFontImpl
//
FTExtrudeFontImpl::FTExtrudeFontImpl(FTFont *ftFont, const char* fontFilePath)
: FTFontImpl(ftFont, fontFilePath),
depth(0.0f), front(0.0f), back(0.0f)
{
load_flags = FT_LOAD_NO_HINTING;
}
FTExtrudeFontImpl::FTExtrudeFontImpl(FTFont *ftFont,
const unsigned char *pBufferBytes,
size_t bufferSizeInBytes)
: FTFontImpl(ftFont, pBufferBytes, bufferSizeInBytes),
depth(0.0f), front(0.0f), back(0.0f)
{
load_flags = FT_LOAD_NO_HINTING;
}

View file

@ -0,0 +1,81 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTExtrudeFontImpl__
#define __FTExtrudeFontImpl__
#include "FTFontImpl.h"
class FTGlyph;
class FTExtrudeFontImpl : public FTFontImpl
{
friend class FTExtrudeFont;
protected:
FTExtrudeFontImpl(FTFont *ftFont, const char* fontFilePath);
FTExtrudeFontImpl(FTFont *ftFont, const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
/**
* Set the extrusion distance for the font.
*
* @param d The extrusion distance.
*/
virtual void Depth(float d) { depth = d; }
/**
* Set the outset distance for the font. Only implemented by
* FTOutlineFont, FTPolygonFont and FTExtrudeFont
*
* @param o The outset distance.
*/
virtual void Outset(float o) { front = back = o; }
/**
* Set the outset distance for the font. Only implemented by
* FTExtrudeFont
*
* @param f The front outset distance.
* @param b The back outset distance.
*/
virtual void Outset(float f, float b) { front = f; back = b; }
private:
/**
* The extrusion distance for the font.
*/
float depth;
/**
* The outset distance (front and back) for the font.
*/
float front, back;
};
#endif // __FTExtrudeFontImpl__

View file

@ -0,0 +1,552 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include "../FTInternals.h"
#include "../FTUnicode.h"
#include "FTFontImpl.h"
#include "FTBitmapFontImpl.h"
#include "FTExtrudeFontImpl.h"
#include "FTOutlineFontImpl.h"
#include "FTPixmapFontImpl.h"
#include "FTPolygonFontImpl.h"
#include "FTTextureFontImpl.h"
#include "../FTGlyphContainer.h"
#include "../FTFace.h"
//
// FTFont
//
FTFont::FTFont(char const *fontFilePath)
{
impl = new FTFontImpl(this, fontFilePath);
}
FTFont::FTFont(const unsigned char *pBufferBytes, size_t bufferSizeInBytes)
{
impl = new FTFontImpl(this, pBufferBytes, bufferSizeInBytes);
}
FTFont::FTFont(FTFontImpl *pImpl)
{
impl = pImpl;
}
FTFont::~FTFont()
{
delete impl;
}
bool FTFont::Attach(const char* fontFilePath)
{
return impl->Attach(fontFilePath);
}
bool FTFont::Attach(const unsigned char *pBufferBytes, size_t bufferSizeInBytes)
{
return impl->Attach(pBufferBytes, bufferSizeInBytes);
}
bool FTFont::FaceSize(const unsigned int size, const unsigned int res)
{
return impl->FaceSize(size, res);
}
unsigned int FTFont::FaceSize() const
{
return impl->FaceSize();
}
void FTFont::Depth(float depth)
{
return impl->Depth(depth);
}
void FTFont::Outset(float outset)
{
return impl->Outset(outset);
}
void FTFont::Outset(float front, float back)
{
return impl->Outset(front, back);
}
void FTFont::GlyphLoadFlags(FT_Int flags)
{
return impl->GlyphLoadFlags(flags);
}
bool FTFont::CharMap(FT_Encoding encoding)
{
return impl->CharMap(encoding);
}
unsigned int FTFont::CharMapCount() const
{
return impl->CharMapCount();
}
FT_Encoding* FTFont::CharMapList()
{
return impl->CharMapList();
}
void FTFont::UseDisplayList(bool useList)
{
return impl->UseDisplayList(useList);
}
float FTFont::Ascender() const
{
return impl->Ascender();
}
float FTFont::Descender() const
{
return impl->Descender();
}
float FTFont::LineHeight() const
{
return impl->LineHeight();
}
FTPoint FTFont::Render(const char * string, const int len,
FTPoint position, FTPoint spacing, int renderMode)
{
return impl->Render(string, len, position, spacing, renderMode);
}
FTPoint FTFont::Render(const wchar_t * string, const int len,
FTPoint position, FTPoint spacing, int renderMode)
{
return impl->Render(string, len, position, spacing, renderMode);
}
float FTFont::Advance(const char * string, const int len, FTPoint spacing)
{
return impl->Advance(string, len, spacing);
}
float FTFont::Advance(const wchar_t * string, const int len, FTPoint spacing)
{
return impl->Advance(string, len, spacing);
}
FTBBox FTFont::BBox(const char *string, const int len,
FTPoint position, FTPoint spacing)
{
return impl->BBox(string, len, position, spacing);
}
FTBBox FTFont::BBox(const wchar_t *string, const int len,
FTPoint position, FTPoint spacing)
{
return impl->BBox(string, len, position, spacing);
}
FT_Error FTFont::Error() const
{
return impl->err;
}
//
// FTFontImpl
//
FTFontImpl::FTFontImpl(FTFont *ftFont, char const *fontFilePath) :
face(fontFilePath),
useDisplayLists(true),
load_flags(FT_LOAD_DEFAULT),
intf(ftFont),
glyphList(0)
{
err = face.Error();
if(err == 0)
{
glyphList = new FTGlyphContainer(&face);
}
}
FTFontImpl::FTFontImpl(FTFont *ftFont, const unsigned char *pBufferBytes,
size_t bufferSizeInBytes) :
face(pBufferBytes, bufferSizeInBytes),
useDisplayLists(true),
load_flags(FT_LOAD_DEFAULT),
intf(ftFont),
glyphList(0)
{
err = face.Error();
if(err == 0)
{
glyphList = new FTGlyphContainer(&face);
}
}
FTFontImpl::~FTFontImpl()
{
if(glyphList)
{
delete glyphList;
}
}
bool FTFontImpl::Attach(const char* fontFilePath)
{
if(!face.Attach(fontFilePath))
{
err = face.Error();
return false;
}
err = 0;
return true;
}
bool FTFontImpl::Attach(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes)
{
if(!face.Attach(pBufferBytes, bufferSizeInBytes))
{
err = face.Error();
return false;
}
err = 0;
return true;
}
bool FTFontImpl::FaceSize(const unsigned int size, const unsigned int res)
{
if(glyphList != NULL)
{
delete glyphList;
glyphList = NULL;
}
charSize = face.Size(size, res);
err = face.Error();
if(err != 0)
{
return false;
}
glyphList = new FTGlyphContainer(&face);
return true;
}
unsigned int FTFontImpl::FaceSize() const
{
return charSize.CharSize();
}
void FTFontImpl::Depth(float depth)
{
;
}
void FTFontImpl::Outset(float outset)
{
;
}
void FTFontImpl::Outset(float front, float back)
{
;
}
void FTFontImpl::GlyphLoadFlags(FT_Int flags)
{
load_flags = flags;
}
bool FTFontImpl::CharMap(FT_Encoding encoding)
{
bool result = glyphList->CharMap(encoding);
err = glyphList->Error();
return result;
}
unsigned int FTFontImpl::CharMapCount() const
{
return face.CharMapCount();
}
FT_Encoding* FTFontImpl::CharMapList()
{
return face.CharMapList();
}
void FTFontImpl::UseDisplayList(bool useList)
{
useDisplayLists = useList;
}
float FTFontImpl::Ascender() const
{
return charSize.Ascender();
}
float FTFontImpl::Descender() const
{
return charSize.Descender();
}
float FTFontImpl::LineHeight() const
{
return charSize.Height();
}
template <typename T>
inline FTBBox FTFontImpl::BBoxI(const T* string, const int len,
FTPoint position, FTPoint spacing)
{
FTBBox totalBBox;
/* Only compute the bounds if string is non-empty. */
if(string && ('\0' != string[0]))
{
// for multibyte - we can't rely on sizeof(T) == character
FTUnicodeStringItr<T> ustr(string);
unsigned int thisChar = *ustr++;
unsigned int nextChar = *ustr;
if(CheckGlyph(thisChar))
{
totalBBox = glyphList->BBox(thisChar);
totalBBox += position;
position += FTPoint(glyphList->Advance(thisChar, nextChar), 0.0);
}
/* Expand totalBox by each glyph in string */
for(int i = 1; (len < 0 && *ustr) || (len >= 0 && i < len); i++)
{
thisChar = *ustr++;
nextChar = *ustr;
if(CheckGlyph(thisChar))
{
position += spacing;
FTBBox tempBBox = glyphList->BBox(thisChar);
tempBBox += position;
totalBBox |= tempBBox;
position += FTPoint(glyphList->Advance(thisChar, nextChar),
0.0);
}
}
}
return totalBBox;
}
FTBBox FTFontImpl::BBox(const char *string, const int len,
FTPoint position, FTPoint spacing)
{
/* The chars need to be unsigned because they are cast to int later */
return BBoxI((const unsigned char *)string, len, position, spacing);
}
FTBBox FTFontImpl::BBox(const wchar_t *string, const int len,
FTPoint position, FTPoint spacing)
{
return BBoxI(string, len, position, spacing);
}
template <typename T>
inline float FTFontImpl::AdvanceI(const T* string, const int len,
FTPoint spacing)
{
float advance = 0.0f;
FTUnicodeStringItr<T> ustr(string);
for(int i = 0; (len < 0 && *ustr) || (len >= 0 && i < len); i++)
{
unsigned int thisChar = *ustr++;
unsigned int nextChar = *ustr;
if(CheckGlyph(thisChar))
{
advance += glyphList->Advance(thisChar, nextChar);
}
if(nextChar)
{
advance += spacing.Xf();
}
}
return advance;
}
float FTFontImpl::Advance(const char* string, const int len, FTPoint spacing)
{
/* The chars need to be unsigned because they are cast to int later */
return AdvanceI((const unsigned char *)string, len, spacing);
}
float FTFontImpl::Advance(const wchar_t* string, const int len, FTPoint spacing)
{
return AdvanceI(string, len, spacing);
}
template <typename T>
inline FTPoint FTFontImpl::RenderI(const T* string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
// for multibyte - we can't rely on sizeof(T) == character
FTUnicodeStringItr<T> ustr(string);
for(int i = 0; (len < 0 && *ustr) || (len >= 0 && i < len); i++)
{
unsigned int thisChar = *ustr++;
unsigned int nextChar = *ustr;
if(CheckGlyph(thisChar))
{
position += glyphList->Render(thisChar, nextChar,
position, renderMode);
}
if(nextChar)
{
position += spacing;
}
}
return position;
}
FTPoint FTFontImpl::Render(const char * string, const int len,
FTPoint position, FTPoint spacing, int renderMode)
{
return RenderI((const unsigned char *)string,
len, position, spacing, renderMode);
}
FTPoint FTFontImpl::Render(const wchar_t * string, const int len,
FTPoint position, FTPoint spacing, int renderMode)
{
return RenderI(string, len, position, spacing, renderMode);
}
bool FTFontImpl::CheckGlyph(const unsigned int characterCode)
{
if(glyphList->Glyph(characterCode))
{
return true;
}
unsigned int glyphIndex = glyphList->FontIndex(characterCode);
FT_GlyphSlot ftSlot = face.Glyph(glyphIndex, load_flags);
if(!ftSlot)
{
err = face.Error();
return false;
}
FTGlyph* tempGlyph = intf->MakeGlyph(ftSlot);
if(!tempGlyph)
{
if(0 == err)
{
err = 0x13;
}
return false;
}
glyphList->Add(tempGlyph, characterCode);
return true;
}

View file

@ -0,0 +1,227 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Éric Beets <ericbeets@free.fr>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include "../FTInternals.h"
static const FTPoint static_ftpoint;
static const FTBBox static_ftbbox;
FTGL_BEGIN_C_DECLS
#define C_TOR(cname, cargs, cxxname, cxxarg, cxxtype) \
FTGLfont* cname cargs \
{ \
cxxname *f = new cxxname cxxarg; \
if(f->Error()) \
{ \
delete f; \
return NULL; \
} \
FTGLfont *ftgl = (FTGLfont *)malloc(sizeof(FTGLfont)); \
ftgl->ptr = f; \
ftgl->type = cxxtype; \
return ftgl; \
}
// FTBitmapFont::FTBitmapFont();
C_TOR(ftglCreateBitmapFont, (const char *fontname),
FTBitmapFont, (fontname), FONT_BITMAP);
// FTBufferFont::FTBufferFont();
C_TOR(ftglCreateBufferFont, (const char *fontname),
FTBufferFont, (fontname), FONT_BUFFER);
// FTExtrudeFont::FTExtrudeFont();
C_TOR(ftglCreateExtrudeFont, (const char *fontname),
FTExtrudeFont, (fontname), FONT_EXTRUDE);
// FTOutlineFont::FTOutlineFont();
C_TOR(ftglCreateOutlineFont, (const char *fontname),
FTOutlineFont, (fontname), FONT_OUTLINE);
// FTPixmapFont::FTPixmapFont();
C_TOR(ftglCreatePixmapFont, (const char *fontname),
FTPixmapFont, (fontname), FONT_PIXMAP);
// FTPolygonFont::FTPolygonFont();
C_TOR(ftglCreatePolygonFont, (const char *fontname),
FTPolygonFont, (fontname), FONT_POLYGON);
// FTTextureFont::FTTextureFont();
C_TOR(ftglCreateTextureFont, (const char *fontname),
FTTextureFont, (fontname), FONT_TEXTURE);
// FTCustomFont::FTCustomFont();
class FTCustomFont : public FTFont
{
public:
FTCustomFont(char const *fontFilePath, void *p,
FTGLglyph * (*makeglyph) (FT_GlyphSlot, void *))
: FTFont(fontFilePath),
data(p),
makeglyphCallback(makeglyph)
{}
~FTCustomFont()
{}
FTGlyph* MakeGlyph(FT_GlyphSlot slot)
{
FTGLglyph *g = makeglyphCallback(slot, data);
FTGlyph *glyph = g->ptr;
// XXX: we no longer need g, and no one will free it for us. Not
// very elegant, and we need to make sure no one else will try to
// use it.
free(g);
return glyph;
}
private:
void *data;
FTGLglyph *(*makeglyphCallback) (FT_GlyphSlot, void *);
};
C_TOR(ftglCreateCustomFont, (char const *fontFilePath, void *data,
FTGLglyph * (*makeglyphCallback) (FT_GlyphSlot, void *)),
FTCustomFont, (fontFilePath, data, makeglyphCallback), FONT_CUSTOM);
#define C_FUN(cret, cname, cargs, cxxerr, cxxname, cxxarg) \
cret cname cargs \
{ \
if(!f || !f->ptr) \
{ \
fprintf(stderr, "FTGL warning: NULL pointer in %s\n", #cname); \
cxxerr; \
} \
return f->ptr->cxxname cxxarg; \
}
// FTFont::~FTFont();
void ftglDestroyFont(FTGLfont *f)
{
if(!f || !f->ptr)
{
fprintf(stderr, "FTGL warning: NULL pointer in %s\n", __FUNCTION__);
return;
}
delete f->ptr;
free(f);
}
// bool FTFont::Attach(const char* fontFilePath);
C_FUN(int, ftglAttachFile, (FTGLfont *f, const char* path),
return 0, Attach, (path));
// bool FTFont::Attach(const unsigned char *pBufferBytes,
// size_t bufferSizeInBytes);
C_FUN(int, ftglAttachData, (FTGLfont *f, const unsigned char *p, size_t s),
return 0, Attach, (p, s));
// void FTFont::GlyphLoadFlags(FT_Int flags);
C_FUN(void, ftglSetFontGlyphLoadFlags, (FTGLfont *f, FT_Int flags),
return, GlyphLoadFlags, (flags));
// bool FTFont::CharMap(FT_Encoding encoding);
C_FUN(int, ftglSetFontCharMap, (FTGLfont *f, FT_Encoding enc),
return 0, CharMap, (enc));
// unsigned int FTFont::CharMapCount();
C_FUN(unsigned int, ftglGetFontCharMapCount, (FTGLfont *f),
return 0, CharMapCount, ());
// FT_Encoding* FTFont::CharMapList();
C_FUN(FT_Encoding *, ftglGetFontCharMapList, (FTGLfont* f),
return NULL, CharMapList, ());
// virtual bool FTFont::FaceSize(const unsigned int size,
// const unsigned int res = 72);
C_FUN(int, ftglSetFontFaceSize, (FTGLfont *f, unsigned int s, unsigned int r),
return 0, FaceSize, (s, r > 0 ? r : 72));
// unsigned int FTFont::FaceSize() const;
// XXX: need to call FaceSize() as FTFont::FaceSize() because of FTGLTexture
C_FUN(unsigned int, ftglGetFontFaceSize, (FTGLfont *f),
return 0, FTFont::FaceSize, ());
// virtual void FTFont::Depth(float depth);
C_FUN(void, ftglSetFontDepth, (FTGLfont *f, float d), return, Depth, (d));
// virtual void FTFont::Outset(float front, float back);
C_FUN(void, ftglSetFontOutset, (FTGLfont *f, float front, float back),
return, FTFont::Outset, (front, back));
// void FTFont::UseDisplayList(bool useList);
C_FUN(void, ftglSetFontDisplayList, (FTGLfont *f, int l),
return, UseDisplayList, (l != 0));
// float FTFont::Ascender() const;
C_FUN(float, ftglGetFontAscender, (FTGLfont *f), return 0.f, Ascender, ());
// float FTFont::Descender() const;
C_FUN(float, ftglGetFontDescender, (FTGLfont *f), return 0.f, Descender, ());
// float FTFont::LineHeight() const;
C_FUN(float, ftglGetFontLineHeight, (FTGLfont *f), return 0.f, LineHeight, ());
// void FTFont::BBox(const char* string, float& llx, float& lly, float& llz,
// float& urx, float& ury, float& urz);
extern "C++" {
C_FUN(static FTBBox, _ftglGetFontBBox, (FTGLfont *f, char const *s, int len),
return static_ftbbox, BBox, (s, len));
}
void ftglGetFontBBox(FTGLfont *f, const char* s, int len, float c[6])
{
FTBBox ret = _ftglGetFontBBox(f, s, len);
FTPoint lower = ret.Lower(), upper = ret.Upper();
c[0] = lower.Xf(); c[1] = lower.Yf(); c[2] = lower.Zf();
c[3] = upper.Xf(); c[4] = upper.Yf(); c[5] = upper.Zf();
}
// float FTFont::Advance(const char* string);
C_FUN(float, ftglGetFontAdvance, (FTGLfont *f, char const *s),
return 0.0, Advance, (s));
// virtual void Render(const char* string, int renderMode);
extern "C++" {
C_FUN(static FTPoint, _ftglRenderFont, (FTGLfont *f, char const *s, int len,
FTPoint pos, FTPoint spacing, int mode),
return static_ftpoint, Render, (s, len, pos, spacing, mode));
}
void ftglRenderFont(FTGLfont *f, const char *s, int mode)
{
_ftglRenderFont(f, s, -1, FTPoint(), FTPoint(), mode);
}
// FT_Error FTFont::Error() const;
C_FUN(FT_Error, ftglGetFontError, (FTGLfont *f), return -1, Error, ());
FTGL_END_C_DECLS

View file

@ -0,0 +1,162 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTFontImpl__
#define __FTFontImpl__
#include "FTGL/ftgl.h"
#include "../FTFace.h"
class FTGlyphContainer;
class FTGlyph;
class FTFontImpl
{
friend class FTFont;
protected:
FTFontImpl(FTFont *ftFont, char const *fontFilePath);
FTFontImpl(FTFont *ftFont, const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
virtual ~FTFontImpl();
virtual bool Attach(const char* fontFilePath);
virtual bool Attach(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
virtual void GlyphLoadFlags(FT_Int flags);
virtual bool CharMap(FT_Encoding encoding);
virtual unsigned int CharMapCount() const;
virtual FT_Encoding* CharMapList();
virtual void UseDisplayList(bool useList);
virtual float Ascender() const;
virtual float Descender() const;
virtual float LineHeight() const;
virtual bool FaceSize(const unsigned int size,
const unsigned int res);
virtual unsigned int FaceSize() const;
virtual void Depth(float depth);
virtual void Outset(float outset);
virtual void Outset(float front, float back);
virtual FTBBox BBox(const char *s, const int len, FTPoint, FTPoint);
virtual FTBBox BBox(const wchar_t *s, const int len, FTPoint, FTPoint);
virtual float Advance(const char *s, const int len, FTPoint);
virtual float Advance(const wchar_t *s, const int len, FTPoint);
virtual FTPoint Render(const char *s, const int len,
FTPoint, FTPoint, int);
virtual FTPoint Render(const wchar_t *s, const int len,
FTPoint, FTPoint, int);
/**
* Current face object
*/
FTFace face;
/**
* Current size object
*/
FTSize charSize;
/**
* Flag to enable or disable the use of Display Lists inside FTGL
* <code>true</code> turns ON display lists.
* <code>false</code> turns OFF display lists.
*/
bool useDisplayLists;
/**
* The default glyph loading flags.
*/
FT_Int load_flags;
/**
* Current error code. Zero means no error.
*/
FT_Error err;
private:
/**
* A link back to the interface of which we are the implementation.
*/
FTFont *intf;
/**
* Check that the glyph at <code>chr</code> exist. If not load it.
*
* @param chr character index
* @return <code>true</code> if the glyph can be created.
*/
bool CheckGlyph(const unsigned int chr);
/**
* An object that holds a list of glyphs
*/
FTGlyphContainer* glyphList;
/**
* Current pen or cursor position;
*/
FTPoint pen;
/* Internal generic BBox() implementation */
template <typename T>
inline FTBBox BBoxI(const T *s, const int len,
FTPoint position, FTPoint spacing);
/* Internal generic Advance() implementation */
template <typename T>
inline float AdvanceI(const T *s, const int len, FTPoint spacing);
/* Internal generic Render() implementation */
template <typename T>
inline FTPoint RenderI(const T *s, const int len,
FTPoint position, FTPoint spacing, int mode);
};
#endif // __FTFontImpl__

View file

@ -0,0 +1,129 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTOutlineFontImpl.h"
//
// FTOutlineFont
//
FTOutlineFont::FTOutlineFont(char const *fontFilePath) :
FTFont(new FTOutlineFontImpl(this, fontFilePath))
{}
FTOutlineFont::FTOutlineFont(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes) :
FTFont(new FTOutlineFontImpl(this, pBufferBytes, bufferSizeInBytes))
{}
FTOutlineFont::~FTOutlineFont()
{}
FTGlyph* FTOutlineFont::MakeGlyph(FT_GlyphSlot ftGlyph)
{
FTOutlineFontImpl *myimpl = dynamic_cast<FTOutlineFontImpl *>(impl);
if(!myimpl)
{
return NULL;
}
return new FTOutlineGlyph(ftGlyph, myimpl->outset,
myimpl->useDisplayLists);
}
//
// FTOutlineFontImpl
//
FTOutlineFontImpl::FTOutlineFontImpl(FTFont *ftFont, const char* fontFilePath)
: FTFontImpl(ftFont, fontFilePath),
outset(0.0f)
{
load_flags = FT_LOAD_NO_HINTING;
}
FTOutlineFontImpl::FTOutlineFontImpl(FTFont *ftFont,
const unsigned char *pBufferBytes,
size_t bufferSizeInBytes)
: FTFontImpl(ftFont, pBufferBytes, bufferSizeInBytes),
outset(0.0f)
{
load_flags = FT_LOAD_NO_HINTING;
}
template <typename T>
inline FTPoint FTOutlineFontImpl::RenderI(const T* string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
// Protect GL_TEXTURE_2D, glHint(), GL_LINE_SMOOTH and blending functions
glPushAttrib(GL_ENABLE_BIT | GL_HINT_BIT | GL_LINE_BIT
| GL_COLOR_BUFFER_BIT);
glDisable(GL_TEXTURE_2D);
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // GL_ONE
FTPoint tmp = FTFontImpl::Render(string, len,
position, spacing, renderMode);
glPopAttrib();
return tmp;
}
FTPoint FTOutlineFontImpl::Render(const char * string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
return RenderI(string, len, position, spacing, renderMode);
}
FTPoint FTOutlineFontImpl::Render(const wchar_t * string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
return RenderI(string, len, position, spacing, renderMode);
}

View file

@ -0,0 +1,73 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTOutlineFontImpl__
#define __FTOutlineFontImpl__
#include "FTFontImpl.h"
class FTGlyph;
class FTOutlineFontImpl : public FTFontImpl
{
friend class FTOutlineFont;
protected:
FTOutlineFontImpl(FTFont *ftFont, const char* fontFilePath);
FTOutlineFontImpl(FTFont *ftFont, const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
/**
* Set the outset distance for the font. Only implemented by
* FTOutlineFont, FTPolygonFont and FTExtrudeFont
*
* @param outset The outset distance.
*/
virtual void Outset(float o) { outset = o; }
virtual FTPoint Render(const char *s, const int len,
FTPoint position, FTPoint spacing,
int renderMode);
virtual FTPoint Render(const wchar_t *s, const int len,
FTPoint position, FTPoint spacing,
int renderMode);
private:
/**
* The outset distance for the font.
*/
float outset;
/* Internal generic Render() implementation */
template <typename T>
inline FTPoint RenderI(const T *s, const int len,
FTPoint position, FTPoint spacing, int mode);
};
#endif // __FTOutlineFontImpl__

View file

@ -0,0 +1,131 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTPixmapFontImpl.h"
//
// FTPixmapFont
//
FTPixmapFont::FTPixmapFont(char const *fontFilePath) :
FTFont(new FTPixmapFontImpl(this, fontFilePath))
{}
FTPixmapFont::FTPixmapFont(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes) :
FTFont(new FTPixmapFontImpl(this, pBufferBytes, bufferSizeInBytes))
{}
FTPixmapFont::~FTPixmapFont()
{}
FTGlyph* FTPixmapFont::MakeGlyph(FT_GlyphSlot ftGlyph)
{
return new FTPixmapGlyph(ftGlyph);
}
//
// FTPixmapFontImpl
//
FTPixmapFontImpl::FTPixmapFontImpl(FTFont *ftFont, const char* fontFilePath)
: FTFontImpl(ftFont, fontFilePath)
{
load_flags = FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP;
}
FTPixmapFontImpl::FTPixmapFontImpl(FTFont *ftFont,
const unsigned char *pBufferBytes,
size_t bufferSizeInBytes)
: FTFontImpl(ftFont, pBufferBytes, bufferSizeInBytes)
{
load_flags = FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP;
}
template <typename T>
inline FTPoint FTPixmapFontImpl::RenderI(const T* string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
// Protect GL_TEXTURE_2D and GL_BLEND, glPixelTransferf(), and blending
// functions.
glPushAttrib(GL_ENABLE_BIT | GL_PIXEL_MODE_BIT | GL_COLOR_BUFFER_BIT);
// Protect glPixelStorei() calls (made by FTPixmapGlyphImpl::RenderImpl).
glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_TEXTURE_2D);
GLfloat ftglColour[4];
glGetFloatv(GL_CURRENT_RASTER_COLOR, ftglColour);
glPixelTransferf(GL_RED_SCALE, ftglColour[0]);
glPixelTransferf(GL_GREEN_SCALE, ftglColour[1]);
glPixelTransferf(GL_BLUE_SCALE, ftglColour[2]);
glPixelTransferf(GL_ALPHA_SCALE, ftglColour[3]);
FTPoint tmp = FTFontImpl::Render(string, len,
position, spacing, renderMode);
glPopClientAttrib();
glPopAttrib();
return tmp;
}
FTPoint FTPixmapFontImpl::Render(const char * string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
return RenderI(string, len, position, spacing, renderMode);
}
FTPoint FTPixmapFontImpl::Render(const wchar_t * string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
return RenderI(string, len, position, spacing, renderMode);
}

View file

@ -0,0 +1,60 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTPixmapFontImpl__
#define __FTPixmapFontImpl__
#include "FTFontImpl.h"
class FTGlyph;
class FTPixmapFontImpl : public FTFontImpl
{
friend class FTPixmapFont;
protected:
FTPixmapFontImpl(FTFont *ftFont, const char* fontFilePath);
FTPixmapFontImpl(FTFont *ftFont, const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
virtual FTPoint Render(const char *s, const int len,
FTPoint position, FTPoint spacing,
int renderMode);
virtual FTPoint Render(const wchar_t *s, const int len,
FTPoint position, FTPoint spacing,
int renderMode);
private:
/* Internal generic Render() implementation */
template <typename T>
inline FTPoint RenderI(const T *s, const int len,
FTPoint position, FTPoint spacing, int mode);
};
#endif // __FTPixmapFontImpl__

View file

@ -0,0 +1,89 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTPolygonFontImpl.h"
//
// FTPolygonFont
//
FTPolygonFont::FTPolygonFont(char const *fontFilePath) :
FTFont(new FTPolygonFontImpl(this, fontFilePath))
{}
FTPolygonFont::FTPolygonFont(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes) :
FTFont(new FTPolygonFontImpl(this, pBufferBytes, bufferSizeInBytes))
{}
FTPolygonFont::~FTPolygonFont()
{}
FTGlyph* FTPolygonFont::MakeGlyph(FT_GlyphSlot ftGlyph)
{
FTPolygonFontImpl *myimpl = dynamic_cast<FTPolygonFontImpl *>(impl);
if(!myimpl)
{
return NULL;
}
return new FTPolygonGlyph(ftGlyph, myimpl->outset,
myimpl->useDisplayLists);
}
//
// FTPolygonFontImpl
//
FTPolygonFontImpl::FTPolygonFontImpl(FTFont *ftFont, const char* fontFilePath)
: FTFontImpl(ftFont, fontFilePath),
outset(0.0f)
{
load_flags = FT_LOAD_NO_HINTING;
}
FTPolygonFontImpl::FTPolygonFontImpl(FTFont *ftFont,
const unsigned char *pBufferBytes,
size_t bufferSizeInBytes)
: FTFontImpl(ftFont, pBufferBytes, bufferSizeInBytes),
outset(0.0f)
{
load_flags = FT_LOAD_NO_HINTING;
}

View file

@ -0,0 +1,60 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTPolygonFontImpl__
#define __FTPolygonFontImpl__
#include "FTFontImpl.h"
class FTGlyph;
class FTPolygonFontImpl : public FTFontImpl
{
friend class FTPolygonFont;
protected:
FTPolygonFontImpl(FTFont *ftFont, const char* fontFilePath);
FTPolygonFontImpl(FTFont *ftFont, const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
/**
* Set the outset distance for the font. Only implemented by
* FTOutlineFont, FTPolygonFont and FTExtrudeFont
*
* @param depth The outset distance.
*/
virtual void Outset(float o) { outset = o; }
private:
/**
* The outset distance (front and back) for the font.
*/
float outset;
};
#endif // __FTPolygonFontImpl__

View file

@ -0,0 +1,267 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include <cassert>
#include <string> // For memset
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "../FTGlyph/FTTextureGlyphImpl.h"
#include "./FTTextureFontImpl.h"
//
// FTTextureFont
//
FTTextureFont::FTTextureFont(char const *fontFilePath) :
FTFont(new FTTextureFontImpl(this, fontFilePath))
{}
FTTextureFont::FTTextureFont(const unsigned char *pBufferBytes,
size_t bufferSizeInBytes) :
FTFont(new FTTextureFontImpl(this, pBufferBytes, bufferSizeInBytes))
{}
FTTextureFont::~FTTextureFont()
{}
FTGlyph* FTTextureFont::MakeGlyph(FT_GlyphSlot ftGlyph)
{
FTTextureFontImpl *myimpl = dynamic_cast<FTTextureFontImpl *>(impl);
if(!myimpl)
{
return NULL;
}
return myimpl->MakeGlyphImpl(ftGlyph);
}
//
// FTTextureFontImpl
//
static inline GLuint NextPowerOf2(GLuint in)
{
in -= 1;
in |= in >> 16;
in |= in >> 8;
in |= in >> 4;
in |= in >> 2;
in |= in >> 1;
return in + 1;
}
FTTextureFontImpl::FTTextureFontImpl(FTFont *ftFont, const char* fontFilePath)
: FTFontImpl(ftFont, fontFilePath),
maximumGLTextureSize(0),
textureWidth(0),
textureHeight(0),
glyphHeight(0),
glyphWidth(0),
padding(3),
xOffset(0),
yOffset(0)
{
load_flags = FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP;
remGlyphs = numGlyphs = face.GlyphCount();
}
FTTextureFontImpl::FTTextureFontImpl(FTFont *ftFont,
const unsigned char *pBufferBytes,
size_t bufferSizeInBytes)
: FTFontImpl(ftFont, pBufferBytes, bufferSizeInBytes),
maximumGLTextureSize(0),
textureWidth(0),
textureHeight(0),
glyphHeight(0),
glyphWidth(0),
padding(3),
xOffset(0),
yOffset(0)
{
load_flags = FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP;
remGlyphs = numGlyphs = face.GlyphCount();
}
FTTextureFontImpl::~FTTextureFontImpl()
{
if(textureIDList.size())
{
glDeleteTextures((GLsizei)textureIDList.size(),
(const GLuint*)&textureIDList[0]);
}
}
FTGlyph* FTTextureFontImpl::MakeGlyphImpl(FT_GlyphSlot ftGlyph)
{
glyphHeight = static_cast<int>(charSize.Height() + 0.5);
glyphWidth = static_cast<int>(charSize.Width() + 0.5);
if(glyphHeight < 1) glyphHeight = 1;
if(glyphWidth < 1) glyphWidth = 1;
if(textureIDList.empty())
{
textureIDList.push_back(CreateTexture());
xOffset = yOffset = padding;
}
if(xOffset > (textureWidth - glyphWidth))
{
xOffset = padding;
yOffset += glyphHeight;
if(yOffset > (textureHeight - glyphHeight))
{
textureIDList.push_back(CreateTexture());
yOffset = padding;
}
}
FTTextureGlyph* tempGlyph = new FTTextureGlyph(ftGlyph, textureIDList[textureIDList.size() - 1],
xOffset, yOffset, textureWidth, textureHeight);
xOffset += static_cast<int>(tempGlyph->BBox().Upper().X() - tempGlyph->BBox().Lower().X() + padding + 0.5);
--remGlyphs;
return tempGlyph;
}
void FTTextureFontImpl::CalculateTextureSize()
{
if(!maximumGLTextureSize)
{
maximumGLTextureSize = 1024;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, (GLint*)&maximumGLTextureSize);
assert(maximumGLTextureSize); // If you hit this then you have an invalid OpenGL context.
}
textureWidth = NextPowerOf2((remGlyphs * glyphWidth) + (padding * 2));
textureWidth = textureWidth > maximumGLTextureSize ? maximumGLTextureSize : textureWidth;
int h = static_cast<int>((textureWidth - (padding * 2)) / glyphWidth + 0.5);
textureHeight = NextPowerOf2(((numGlyphs / h) + 1) * glyphHeight);
textureHeight = textureHeight > maximumGLTextureSize ? maximumGLTextureSize : textureHeight;
}
GLuint FTTextureFontImpl::CreateTexture()
{
CalculateTextureSize();
int totalMemory = textureWidth * textureHeight;
unsigned char* textureMemory = new unsigned char[totalMemory];
memset(textureMemory, 0, totalMemory);
GLuint textID;
glGenTextures(1, (GLuint*)&textID);
glBindTexture(GL_TEXTURE_2D, textID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, textureWidth, textureHeight,
0, GL_ALPHA, GL_UNSIGNED_BYTE, textureMemory);
delete [] textureMemory;
return textID;
}
bool FTTextureFontImpl::FaceSize(const unsigned int size, const unsigned int res)
{
if(!textureIDList.empty())
{
glDeleteTextures((GLsizei)textureIDList.size(), (const GLuint*)&textureIDList[0]);
textureIDList.clear();
remGlyphs = numGlyphs = face.GlyphCount();
}
return FTFontImpl::FaceSize(size, res);
}
template <typename T>
inline FTPoint FTTextureFontImpl::RenderI(const T* string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
// Protect GL_TEXTURE_2D, GL_BLEND and blending functions
glPushAttrib(GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // GL_ONE
glEnable(GL_TEXTURE_2D);
FTTextureGlyphImpl::ResetActiveTexture();
FTPoint tmp = FTFontImpl::Render(string, len,
position, spacing, renderMode);
glPopAttrib();
return tmp;
}
FTPoint FTTextureFontImpl::Render(const char * string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
return RenderI(string, len, position, spacing, renderMode);
}
FTPoint FTTextureFontImpl::Render(const wchar_t * string, const int len,
FTPoint position, FTPoint spacing,
int renderMode)
{
return RenderI(string, len, position, spacing, renderMode);
}

View file

@ -0,0 +1,152 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTTextureFontImpl__
#define __FTTextureFontImpl__
#include "FTFontImpl.h"
#include "../FTVector.h"
class FTTextureGlyph;
class FTTextureFontImpl : public FTFontImpl
{
friend class FTTextureFont;
protected:
FTTextureFontImpl(FTFont *ftFont, const char* fontFilePath);
FTTextureFontImpl(FTFont *ftFont, const unsigned char *pBufferBytes,
size_t bufferSizeInBytes);
virtual ~FTTextureFontImpl();
/**
* Set the char size for the current face.
*
* @param size the face size in points (1/72 inch)
* @param res the resolution of the target device.
* @return <code>true</code> if size was set correctly
*/
virtual bool FaceSize(const unsigned int size,
const unsigned int res = 72);
virtual FTPoint Render(const char *s, const int len,
FTPoint position, FTPoint spacing,
int renderMode);
virtual FTPoint Render(const wchar_t *s, const int len,
FTPoint position, FTPoint spacing,
int renderMode);
private:
/**
* Create an FTTextureGlyph object for the base class.
*/
FTGlyph* MakeGlyphImpl(FT_GlyphSlot ftGlyph);
/**
* Get the size of a block of memory required to layout the glyphs
*
* Calculates a width and height based on the glyph sizes and the
* number of glyphs. It over estimates.
*/
inline void CalculateTextureSize();
/**
* Creates a 'blank' OpenGL texture object.
*
* The format is GL_ALPHA and the params are
* GL_TEXTURE_WRAP_S = GL_CLAMP
* GL_TEXTURE_WRAP_T = GL_CLAMP
* GL_TEXTURE_MAG_FILTER = GL_LINEAR
* GL_TEXTURE_MIN_FILTER = GL_LINEAR
* Note that mipmapping is NOT used
*/
inline GLuint CreateTexture();
/**
* The maximum texture dimension on this OpenGL implemetation
*/
GLsizei maximumGLTextureSize;
/**
* The minimum texture width required to hold the glyphs
*/
GLsizei textureWidth;
/**
* The minimum texture height required to hold the glyphs
*/
GLsizei textureHeight;
/**
*An array of texture ids
*/
FTVector<GLuint> textureIDList;
/**
* The max height for glyphs in the current font
*/
int glyphHeight;
/**
* The max width for glyphs in the current font
*/
int glyphWidth;
/**
* A value to be added to the height and width to ensure that
* glyphs don't overlap in the texture
*/
unsigned int padding;
/**
*
*/
unsigned int numGlyphs;
/**
*/
unsigned int remGlyphs;
/**
*/
int xOffset;
/**
*/
int yOffset;
/* Internal generic Render() implementation */
template <typename T>
inline FTPoint RenderI(const T *s, const int len,
FTPoint position, FTPoint spacing, int mode);
};
#endif // __FTTextureFontImpl__

View file

@ -0,0 +1,128 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include <string>
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTBitmapGlyphImpl.h"
//
// FTGLBitmapGlyph
//
FTBitmapGlyph::FTBitmapGlyph(FT_GlyphSlot glyph) :
FTGlyph(new FTBitmapGlyphImpl(glyph))
{}
FTBitmapGlyph::~FTBitmapGlyph()
{}
const FTPoint& FTBitmapGlyph::Render(const FTPoint& pen, int renderMode)
{
FTBitmapGlyphImpl *myimpl = dynamic_cast<FTBitmapGlyphImpl *>(impl);
return myimpl->RenderImpl(pen, renderMode);
}
//
// FTGLBitmapGlyphImpl
//
FTBitmapGlyphImpl::FTBitmapGlyphImpl(FT_GlyphSlot glyph)
: FTGlyphImpl(glyph),
destWidth(0),
destHeight(0),
data(0)
{
err = FT_Render_Glyph(glyph, FT_RENDER_MODE_MONO);
if(err || ft_glyph_format_bitmap != glyph->format)
{
return;
}
FT_Bitmap bitmap = glyph->bitmap;
unsigned int srcWidth = bitmap.width;
unsigned int srcHeight = bitmap.rows;
unsigned int srcPitch = bitmap.pitch;
destWidth = srcWidth;
destHeight = srcHeight;
destPitch = srcPitch;
if(destWidth && destHeight)
{
data = new unsigned char[destPitch * destHeight];
unsigned char* dest = data + ((destHeight - 1) * destPitch);
unsigned char* src = bitmap.buffer;
for(unsigned int y = 0; y < srcHeight; ++y)
{
memcpy(dest, src, srcPitch);
dest -= destPitch;
src += srcPitch;
}
}
pos = FTPoint(glyph->bitmap_left, static_cast<int>(srcHeight) - glyph->bitmap_top, 0.0);
}
FTBitmapGlyphImpl::~FTBitmapGlyphImpl()
{
delete [] data;
}
const FTPoint& FTBitmapGlyphImpl::RenderImpl(const FTPoint& pen, int renderMode)
{
if(data)
{
float dx, dy;
dx = pen.Xf() + pos.Xf();
dy = pen.Yf() - pos.Yf();
glBitmap(0, 0, 0.0f, 0.0f, dx, dy, (const GLubyte*)0);
glPixelStorei(GL_UNPACK_ROW_LENGTH, destPitch * 8);
glBitmap(destWidth, destHeight, 0.0f, 0.0, 0.0, 0.0,
(const GLubyte*)data);
glBitmap(0, 0, 0.0f, 0.0f, -dx, -dy, (const GLubyte*)0);
}
return advance;
}

View file

@ -0,0 +1,71 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTBitmapGlyphImpl__
#define __FTBitmapGlyphImpl__
#include "FTGlyphImpl.h"
class FTBitmapGlyphImpl : public FTGlyphImpl
{
friend class FTBitmapGlyph;
protected:
FTBitmapGlyphImpl(FT_GlyphSlot glyph);
virtual ~FTBitmapGlyphImpl();
virtual const FTPoint& RenderImpl(const FTPoint& pen, int renderMode);
private:
/**
* The width of the glyph 'image'
*/
unsigned int destWidth;
/**
* The height of the glyph 'image'
*/
unsigned int destHeight;
/**
* The pitch of the glyph 'image'
*/
unsigned int destPitch;
/**
* Vector from the pen position to the topleft corner of the bitmap
*/
FTPoint pos;
/**
* Pointer to the 'image' data
*/
unsigned char* data;
};
#endif // __FTBitmapGlyphImpl__

View file

@ -0,0 +1,121 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include <string>
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTBufferGlyphImpl.h"
//
// FTGLBufferGlyph
//
FTBufferGlyph::FTBufferGlyph(FT_GlyphSlot glyph, FTBuffer *buffer) :
FTGlyph(new FTBufferGlyphImpl(glyph, buffer))
{}
FTBufferGlyph::~FTBufferGlyph()
{}
const FTPoint& FTBufferGlyph::Render(const FTPoint& pen, int renderMode)
{
FTBufferGlyphImpl *myimpl = dynamic_cast<FTBufferGlyphImpl *>(impl);
return myimpl->RenderImpl(pen, renderMode);
}
//
// FTGLBufferGlyphImpl
//
FTBufferGlyphImpl::FTBufferGlyphImpl(FT_GlyphSlot glyph, FTBuffer *p)
: FTGlyphImpl(glyph),
has_bitmap(false),
buffer(p)
{
err = FT_Render_Glyph(glyph, FT_RENDER_MODE_NORMAL);
if(err || glyph->format != ft_glyph_format_bitmap)
{
return;
}
bitmap = glyph->bitmap;
pixels = new unsigned char[bitmap.pitch * bitmap.rows];
memcpy(pixels, bitmap.buffer, bitmap.pitch * bitmap.rows);
if(bitmap.width && bitmap.rows)
{
has_bitmap = true;
corner = FTPoint(glyph->bitmap_left, glyph->bitmap_top);
}
}
FTBufferGlyphImpl::~FTBufferGlyphImpl()
{
delete[] pixels;
}
const FTPoint& FTBufferGlyphImpl::RenderImpl(const FTPoint& pen, int renderMode)
{
if(has_bitmap)
{
FTPoint pos(buffer->Pos() + pen + corner);
int dx = (int)(pos.Xf() + 0.5f);
int dy = buffer->Height() - (int)(pos.Yf() + 0.5f);
unsigned char * dest = buffer->Pixels() + dx + dy * buffer->Width();
for(int y = 0; y < bitmap.rows; y++)
{
// FIXME: change the loop bounds instead of doing this test
if(y + dy < 0 || y + dy >= buffer->Height()) continue;
for(int x = 0; x < bitmap.width; x++)
{
if(x + dx < 0 || x + dx >= buffer->Width()) continue;
unsigned char p = pixels[y * bitmap.pitch + x];
if(p)
{
dest[y * buffer->Width() + x] = p;
}
}
}
}
return advance;
}

View file

@ -0,0 +1,52 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTBufferGlyphImpl__
#define __FTBufferGlyphImpl__
#include "FTGlyphImpl.h"
class FTBufferGlyphImpl : public FTGlyphImpl
{
friend class FTBufferGlyph;
protected:
FTBufferGlyphImpl(FT_GlyphSlot glyph, FTBuffer *p);
virtual ~FTBufferGlyphImpl();
virtual const FTPoint& RenderImpl(const FTPoint& pen, int renderMode);
private:
bool has_bitmap;
FT_Bitmap bitmap;
unsigned char *pixels;
FTPoint corner;
FTBuffer *buffer;
};
#endif // __FTBufferGlyphImpl__

View file

@ -0,0 +1,265 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include <iostream>
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTExtrudeGlyphImpl.h"
#include "../FTVectoriser.h"
//
// FTGLExtrudeGlyph
//
FTExtrudeGlyph::FTExtrudeGlyph(FT_GlyphSlot glyph, float depth,
float frontOutset, float backOutset,
bool useDisplayList) :
FTGlyph(new FTExtrudeGlyphImpl(glyph, depth, frontOutset, backOutset,
useDisplayList))
{}
FTExtrudeGlyph::~FTExtrudeGlyph()
{}
const FTPoint& FTExtrudeGlyph::Render(const FTPoint& pen, int renderMode)
{
FTExtrudeGlyphImpl *myimpl = dynamic_cast<FTExtrudeGlyphImpl *>(impl);
return myimpl->RenderImpl(pen, renderMode);
}
//
// FTGLExtrudeGlyphImpl
//
FTExtrudeGlyphImpl::FTExtrudeGlyphImpl(FT_GlyphSlot glyph, float _depth,
float _frontOutset, float _backOutset,
bool useDisplayList)
: FTGlyphImpl(glyph),
vectoriser(0),
glList(0)
{
bBox.SetDepth(-_depth);
if(ft_glyph_format_outline != glyph->format)
{
err = 0x14; // Invalid_Outline
return;
}
vectoriser = new FTVectoriser(glyph);
if((vectoriser->ContourCount() < 1) || (vectoriser->PointCount() < 3))
{
delete vectoriser;
vectoriser = NULL;
return;
}
hscale = glyph->face->size->metrics.x_ppem * 64;
vscale = glyph->face->size->metrics.y_ppem * 64;
depth = _depth;
frontOutset = _frontOutset;
backOutset = _backOutset;
if(useDisplayList)
{
glList = glGenLists(3);
/* Front face */
glNewList(glList + 0, GL_COMPILE);
RenderFront();
glEndList();
/* Back face */
glNewList(glList + 1, GL_COMPILE);
RenderBack();
glEndList();
/* Side face */
glNewList(glList + 2, GL_COMPILE);
RenderSide();
glEndList();
delete vectoriser;
vectoriser = NULL;
}
}
FTExtrudeGlyphImpl::~FTExtrudeGlyphImpl()
{
if(glList)
{
glDeleteLists(glList, 3);
}
else if(vectoriser)
{
delete vectoriser;
}
}
const FTPoint& FTExtrudeGlyphImpl::RenderImpl(const FTPoint& pen,
int renderMode)
{
glTranslatef(pen.Xf(), pen.Yf(), pen.Zf());
if(glList)
{
if(renderMode & FTGL::RENDER_FRONT)
glCallList(glList + 0);
if(renderMode & FTGL::RENDER_BACK)
glCallList(glList + 1);
if(renderMode & FTGL::RENDER_SIDE)
glCallList(glList + 2);
}
else if(vectoriser)
{
if(renderMode & FTGL::RENDER_FRONT)
RenderFront();
if(renderMode & FTGL::RENDER_BACK)
RenderBack();
if(renderMode & FTGL::RENDER_SIDE)
RenderSide();
}
glTranslatef(-pen.Xf(), -pen.Yf(), -pen.Zf());
return advance;
}
void FTExtrudeGlyphImpl::RenderFront()
{
vectoriser->MakeMesh(1.0, 1, frontOutset);
glNormal3d(0.0, 0.0, 1.0);
const FTMesh *mesh = vectoriser->GetMesh();
for(unsigned int j = 0; j < mesh->TesselationCount(); ++j)
{
const FTTesselation* subMesh = mesh->Tesselation(j);
unsigned int polygonType = subMesh->PolygonType();
glBegin(polygonType);
for(unsigned int i = 0; i < subMesh->PointCount(); ++i)
{
FTPoint pt = subMesh->Point(i);
glTexCoord2f(pt.Xf() / hscale,
pt.Yf() / vscale);
glVertex3f(pt.Xf() / 64.0f,
pt.Yf() / 64.0f,
0.0f);
}
glEnd();
}
}
void FTExtrudeGlyphImpl::RenderBack()
{
vectoriser->MakeMesh(-1.0, 2, backOutset);
glNormal3d(0.0, 0.0, -1.0);
const FTMesh *mesh = vectoriser->GetMesh();
for(unsigned int j = 0; j < mesh->TesselationCount(); ++j)
{
const FTTesselation* subMesh = mesh->Tesselation(j);
unsigned int polygonType = subMesh->PolygonType();
glBegin(polygonType);
for(unsigned int i = 0; i < subMesh->PointCount(); ++i)
{
FTPoint pt = subMesh->Point(i);
glTexCoord2f(subMesh->Point(i).Xf() / hscale,
subMesh->Point(i).Yf() / vscale);
glVertex3f(subMesh->Point(i).Xf() / 64.0f,
subMesh->Point(i).Yf() / 64.0f,
-depth);
}
glEnd();
}
}
void FTExtrudeGlyphImpl::RenderSide()
{
int contourFlag = vectoriser->ContourFlag();
for(size_t c = 0; c < vectoriser->ContourCount(); ++c)
{
const FTContour* contour = vectoriser->Contour(c);
size_t n = contour->PointCount();
if(n < 2)
{
continue;
}
glBegin(GL_QUAD_STRIP);
for(size_t j = 0; j <= n; ++j)
{
size_t cur = (j == n) ? 0 : j;
size_t next = (cur == n - 1) ? 0 : cur + 1;
FTPoint frontPt = contour->FrontPoint(cur);
FTPoint nextPt = contour->FrontPoint(next);
FTPoint backPt = contour->BackPoint(cur);
FTPoint normal = FTPoint(0.f, 0.f, 1.f) ^ (frontPt - nextPt);
if(normal != FTPoint(0.0f, 0.0f, 0.0f))
{
glNormal3dv(static_cast<const FTGL_DOUBLE*>(normal.Normalise()));
}
glTexCoord2f(frontPt.Xf() / hscale, frontPt.Yf() / vscale);
if(contourFlag & ft_outline_reverse_fill)
{
glVertex3f(backPt.Xf() / 64.0f, backPt.Yf() / 64.0f, 0.0f);
glVertex3f(frontPt.Xf() / 64.0f, frontPt.Yf() / 64.0f, -depth);
}
else
{
glVertex3f(backPt.Xf() / 64.0f, backPt.Yf() / 64.0f, -depth);
glVertex3f(frontPt.Xf() / 64.0f, frontPt.Yf() / 64.0f, 0.0f);
}
}
glEnd();
}
}

View file

@ -0,0 +1,69 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTExtrudeGlyphImpl__
#define __FTExtrudeGlyphImpl__
#include "FTGlyphImpl.h"
class FTVectoriser;
class FTExtrudeGlyphImpl : public FTGlyphImpl
{
friend class FTExtrudeGlyph;
protected:
FTExtrudeGlyphImpl(FT_GlyphSlot glyph, float depth, float frontOutset,
float backOutset, bool useDisplayList);
virtual ~FTExtrudeGlyphImpl();
virtual const FTPoint& RenderImpl(const FTPoint& pen, int renderMode);
private:
/**
* Private rendering methods.
*/
void RenderFront();
void RenderBack();
void RenderSide();
/**
* Private rendering variables.
*/
unsigned int hscale, vscale;
float depth;
float frontOutset, backOutset;
FTVectoriser *vectoriser;
/**
* OpenGL display list
*/
GLuint glList;
};
#endif // __FTExtrudeGlyphImpl__

View file

@ -0,0 +1,112 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTGlyphImpl.h"
//
// FTGlyph
//
FTGlyph::FTGlyph(FT_GlyphSlot glyph)
{
impl = new FTGlyphImpl(glyph);
}
FTGlyph::FTGlyph(FTGlyphImpl *pImpl)
{
impl = pImpl;
}
FTGlyph::~FTGlyph()
{
delete impl;
}
float FTGlyph::Advance() const
{
return impl->Advance();
}
const FTBBox& FTGlyph::BBox() const
{
return impl->BBox();
}
FT_Error FTGlyph::Error() const
{
return impl->Error();
}
//
// FTGlyphImpl
//
FTGlyphImpl::FTGlyphImpl(FT_GlyphSlot glyph, bool useList) : err(0)
{
if(glyph)
{
bBox = FTBBox(glyph);
advance = FTPoint(glyph->advance.x / 64.0f,
glyph->advance.y / 64.0f);
}
}
FTGlyphImpl::~FTGlyphImpl()
{}
float FTGlyphImpl::Advance() const
{
return advance.Xf();
}
const FTBBox& FTGlyphImpl::BBox() const
{
return bBox;
}
FT_Error FTGlyphImpl::Error() const
{
return err;
}

View file

@ -0,0 +1,198 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
static const FTPoint static_ftpoint;
static const FTBBox static_ftbbox;
FTGL_BEGIN_C_DECLS
#define C_TOR(cname, cargs, cxxname, cxxarg, cxxtype) \
FTGLglyph* cname cargs \
{ \
cxxname *g = new cxxname cxxarg; \
if(g->Error()) \
{ \
delete g; \
return NULL; \
} \
FTGLglyph *ftgl = (FTGLglyph *)malloc(sizeof(FTGLglyph)); \
ftgl->ptr = g; \
ftgl->type = cxxtype; \
return ftgl; \
}
// FTBitmapGlyph::FTBitmapGlyph();
C_TOR(ftglCreateBitmapGlyph, (FT_GlyphSlot glyph),
FTBitmapGlyph, (glyph), GLYPH_BITMAP);
// FTBufferGlyph::FTBufferGlyph();
// FIXME: not implemented
// FTExtrudeGlyph::FTExtrudeGlyph();
C_TOR(ftglCreateExtrudeGlyph, (FT_GlyphSlot glyph, float depth,
float frontOutset, float backOutset, int useDisplayList),
FTExtrudeGlyph, (glyph, depth, frontOutset, backOutset, (useDisplayList != 0)),
GLYPH_EXTRUDE);
// FTOutlineGlyph::FTOutlineGlyph();
C_TOR(ftglCreateOutlineGlyph, (FT_GlyphSlot glyph, float outset,
int useDisplayList),
FTOutlineGlyph, (glyph, outset, (useDisplayList != 0)), GLYPH_OUTLINE);
// FTPixmapGlyph::FTPixmapGlyph();
C_TOR(ftglCreatePixmapGlyph, (FT_GlyphSlot glyph),
FTPixmapGlyph, (glyph), GLYPH_PIXMAP);
// FTPolygonGlyph::FTPolygonGlyph();
C_TOR(ftglCreatePolygonGlyph, (FT_GlyphSlot glyph, float outset,
int useDisplayList),
FTPolygonGlyph, (glyph, outset, (useDisplayList != 0)), GLYPH_POLYGON);
// FTTextureGlyph::FTTextureGlyph();
C_TOR(ftglCreateTextureGlyph, (FT_GlyphSlot glyph, int id, int xOffset,
int yOffset, int width, int height),
FTTextureGlyph, (glyph, id, xOffset, yOffset, width, height),
GLYPH_TEXTURE);
// FTCustomGlyph::FTCustomGlyph();
class FTCustomGlyph : public FTGlyph
{
public:
FTCustomGlyph(FTGLglyph *base, void *p,
void (*render) (FTGLglyph *, void *, FTGL_DOUBLE, FTGL_DOUBLE,
int, FTGL_DOUBLE *, FTGL_DOUBLE *),
void (*destroy) (FTGLglyph *, void *))
: FTGlyph((FT_GlyphSlot)0),
baseGlyph(base),
data(p),
renderCallback(render),
destroyCallback(destroy)
{}
~FTCustomGlyph()
{
destroyCallback(baseGlyph, data);
}
float Advance() const { return baseGlyph->ptr->Advance(); }
const FTPoint& Render(const FTPoint& pen, int renderMode)
{
FTGL_DOUBLE advancex, advancey;
renderCallback(baseGlyph, data, pen.X(), pen.Y(), renderMode,
&advancex, &advancey);
advance = FTPoint(advancex, advancey);
return advance;
}
const FTBBox& BBox() const { return baseGlyph->ptr->BBox(); }
FT_Error Error() const { return baseGlyph->ptr->Error(); }
private:
FTPoint advance;
FTGLglyph *baseGlyph;
void *data;
void (*renderCallback) (FTGLglyph *, void *, FTGL_DOUBLE, FTGL_DOUBLE,
int, FTGL_DOUBLE *, FTGL_DOUBLE *);
void (*destroyCallback) (FTGLglyph *, void *);
};
C_TOR(ftglCreateCustomGlyph, (FTGLglyph *base, void *data,
void (*renderCallback) (FTGLglyph *, void *, FTGL_DOUBLE, FTGL_DOUBLE,
int, FTGL_DOUBLE *, FTGL_DOUBLE *),
void (*destroyCallback) (FTGLglyph *, void *)),
FTCustomGlyph, (base, data, renderCallback, destroyCallback),
GLYPH_CUSTOM);
#define C_FUN(cret, cname, cargs, cxxerr, cxxname, cxxarg) \
cret cname cargs \
{ \
if(!g || !g->ptr) \
{ \
fprintf(stderr, "FTGL warning: NULL pointer in %s\n", #cname); \
cxxerr; \
} \
return g->ptr->cxxname cxxarg; \
}
// FTGlyph::~FTGlyph();
void ftglDestroyGlyph(FTGLglyph *g)
{
if(!g || !g->ptr)
{
fprintf(stderr, "FTGL warning: NULL pointer in %s\n", __FUNCTION__);
return;
}
delete g->ptr;
free(g);
}
// const FTPoint& FTGlyph::Render(const FTPoint& pen, int renderMode);
extern "C++" {
C_FUN(static const FTPoint&, _ftglRenderGlyph, (FTGLglyph *g,
const FTPoint& pen, int renderMode),
return static_ftpoint, Render, (pen, renderMode));
}
void ftglRenderGlyph(FTGLglyph *g, FTGL_DOUBLE penx, FTGL_DOUBLE peny,
int renderMode, FTGL_DOUBLE *advancex,
FTGL_DOUBLE *advancey)
{
FTPoint pen(penx, peny);
FTPoint ret = _ftglRenderGlyph(g, pen, renderMode);
*advancex = ret.X();
*advancey = ret.Y();
}
// float FTGlyph::Advance() const;
C_FUN(float, ftglGetGlyphAdvance, (FTGLglyph *g), return 0.0, Advance, ());
// const FTBBox& FTGlyph::BBox() const;
extern "C++" {
C_FUN(static const FTBBox&, _ftglGetGlyphBBox, (FTGLglyph *g),
return static_ftbbox, BBox, ());
}
void ftglGetGlyphBBox(FTGLglyph *g, float bounds[6])
{
FTBBox ret = _ftglGetGlyphBBox(g);
FTPoint lower = ret.Lower(), upper = ret.Upper();
bounds[0] = lower.Xf(); bounds[1] = lower.Yf(); bounds[2] = lower.Zf();
bounds[3] = upper.Xf(); bounds[4] = upper.Yf(); bounds[5] = upper.Zf();
}
// FT_Error FTGlyph::Error() const;
C_FUN(FT_Error, ftglGetGlyphError, (FTGLglyph *g), return -1, Error, ());
FTGL_END_C_DECLS

View file

@ -0,0 +1,64 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTGlyphImpl__
#define __FTGlyphImpl__
#include "FTGL/ftgl.h"
class FTGlyphImpl
{
friend class FTGlyph;
protected:
FTGlyphImpl(FT_GlyphSlot glyph, bool useDisplayList = true);
virtual ~FTGlyphImpl();
float Advance() const;
const FTBBox& BBox() const;
FT_Error Error() const;
/**
* The advance distance for this glyph
*/
FTPoint advance;
/**
* The bounding box of this glyph.
*/
FTBBox bBox;
/**
* Current error code. Zero means no error.
*/
FT_Error err;
};
#endif // __FTGlyphImpl__

View file

@ -0,0 +1,149 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Éric Beets <ericbeets@free.fr>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTOutlineGlyphImpl.h"
#include "../FTVectoriser.h"
//
// FTGLOutlineGlyph
//
FTOutlineGlyph::FTOutlineGlyph(FT_GlyphSlot glyph, float outset,
bool useDisplayList) :
FTGlyph(new FTOutlineGlyphImpl(glyph, outset, useDisplayList))
{}
FTOutlineGlyph::~FTOutlineGlyph()
{}
const FTPoint& FTOutlineGlyph::Render(const FTPoint& pen, int renderMode)
{
FTOutlineGlyphImpl *myimpl = dynamic_cast<FTOutlineGlyphImpl *>(impl);
return myimpl->RenderImpl(pen, renderMode);
}
//
// FTGLOutlineGlyphImpl
//
FTOutlineGlyphImpl::FTOutlineGlyphImpl(FT_GlyphSlot glyph, float _outset,
bool useDisplayList)
: FTGlyphImpl(glyph),
glList(0)
{
if(ft_glyph_format_outline != glyph->format)
{
err = 0x14; // Invalid_Outline
return;
}
vectoriser = new FTVectoriser(glyph);
if((vectoriser->ContourCount() < 1) || (vectoriser->PointCount() < 3))
{
delete vectoriser;
vectoriser = NULL;
return;
}
outset = _outset;
if(useDisplayList)
{
glList = glGenLists(1);
glNewList(glList, GL_COMPILE);
DoRender();
glEndList();
delete vectoriser;
vectoriser = NULL;
}
}
FTOutlineGlyphImpl::~FTOutlineGlyphImpl()
{
if(glList)
{
glDeleteLists(glList, 1);
}
else if(vectoriser)
{
delete vectoriser;
}
}
const FTPoint& FTOutlineGlyphImpl::RenderImpl(const FTPoint& pen,
int renderMode)
{
glTranslatef(pen.Xf(), pen.Yf(), pen.Zf());
if(glList)
{
glCallList(glList);
}
else if(vectoriser)
{
DoRender();
}
glTranslatef(-pen.Xf(), -pen.Yf(), -pen.Zf());
return advance;
}
void FTOutlineGlyphImpl::DoRender()
{
for(unsigned int c = 0; c < vectoriser->ContourCount(); ++c)
{
const FTContour* contour = vectoriser->Contour(c);
glBegin(GL_LINE_LOOP);
for(unsigned int i = 0; i < contour->PointCount(); ++i)
{
FTPoint point = FTPoint(contour->Point(i).X() + contour->Outset(i).X() * outset,
contour->Point(i).Y() + contour->Outset(i).Y() * outset,
0);
glVertex2f(point.Xf() / 64.0f, point.Yf() / 64.0f);
}
glEnd();
}
}

View file

@ -0,0 +1,69 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTOutlineGlyphImpl__
#define __FTOutlineGlyphImpl__
#include "FTGlyphImpl.h"
class FTVectoriser;
class FTOutlineGlyphImpl : public FTGlyphImpl
{
friend class FTOutlineGlyph;
protected:
FTOutlineGlyphImpl(FT_GlyphSlot glyph, float outset,
bool useDisplayList);
virtual ~FTOutlineGlyphImpl();
virtual const FTPoint& RenderImpl(const FTPoint& pen, int renderMode);
private:
/**
* Private rendering method.
*/
void DoRender();
/**
* Private rendering variables.
*/
FTVectoriser *vectoriser;
/**
* Private rendering variables.
*/
float outset;
/**
* OpenGL display list
*/
GLuint glList;
};
#endif // __FTOutlineGlyphImpl__

View file

@ -0,0 +1,139 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include <math.h>
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTPixmapGlyphImpl.h"
//
// FTGLPixmapGlyph
//
FTPixmapGlyph::FTPixmapGlyph(FT_GlyphSlot glyph) :
FTGlyph(new FTPixmapGlyphImpl(glyph))
{}
FTPixmapGlyph::~FTPixmapGlyph()
{}
const FTPoint& FTPixmapGlyph::Render(const FTPoint& pen, int renderMode)
{
FTPixmapGlyphImpl *myimpl = dynamic_cast<FTPixmapGlyphImpl *>(impl);
return myimpl->RenderImpl(pen, renderMode);
}
//
// FTGLPixmapGlyphImpl
//
FTPixmapGlyphImpl::FTPixmapGlyphImpl(FT_GlyphSlot glyph)
: FTGlyphImpl(glyph),
destWidth(0),
destHeight(0),
data(0)
{
err = FT_Render_Glyph(glyph, FT_RENDER_MODE_NORMAL);
if(err || ft_glyph_format_bitmap != glyph->format)
{
return;
}
FT_Bitmap bitmap = glyph->bitmap;
//check the pixel mode
//ft_pixel_mode_grays
int srcWidth = bitmap.width;
int srcHeight = bitmap.rows;
destWidth = srcWidth;
destHeight = srcHeight;
if(destWidth && destHeight)
{
data = new unsigned char[destWidth * destHeight * 2];
unsigned char* src = bitmap.buffer;
unsigned char* dest = data + ((destHeight - 1) * destWidth * 2);
size_t destStep = destWidth * 2 * 2;
for(int y = 0; y < srcHeight; ++y)
{
for(int x = 0; x < srcWidth; ++x)
{
*dest++ = static_cast<unsigned char>(255);
*dest++ = *src++;
}
dest -= destStep;
}
destHeight = srcHeight;
}
pos.X(glyph->bitmap_left);
pos.Y(srcHeight - glyph->bitmap_top);
}
FTPixmapGlyphImpl::~FTPixmapGlyphImpl()
{
delete [] data;
}
const FTPoint& FTPixmapGlyphImpl::RenderImpl(const FTPoint& pen,
int renderMode)
{
if(data)
{
float dx, dy;
dx = floor(pen.Xf() + pos.Xf());
dy = floor(pen.Yf() - pos.Yf());
glBitmap(0, 0, 0.0f, 0.0f, dx, dy, (const GLubyte*)0);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
glDrawPixels(destWidth, destHeight, GL_LUMINANCE_ALPHA,
GL_UNSIGNED_BYTE, (const GLvoid*)data);
glBitmap(0, 0, 0.0f, 0.0f, -dx, -dy, (const GLubyte*)0);
}
return advance;
}

View file

@ -0,0 +1,67 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTPixmapGlyphImpl__
#define __FTPixmapGlyphImpl__
#include "FTGlyphImpl.h"
class FTPixmapGlyphImpl : public FTGlyphImpl
{
friend class FTPixmapGlyph;
protected:
FTPixmapGlyphImpl(FT_GlyphSlot glyph);
virtual ~FTPixmapGlyphImpl();
virtual const FTPoint& RenderImpl(const FTPoint& pen, int renderMode);
private:
/**
* The width of the glyph 'image'
*/
int destWidth;
/**
* The height of the glyph 'image'
*/
int destHeight;
/**
* Vector from the pen position to the topleft corner of the pixmap
*/
FTPoint pos;
/**
* Pointer to the 'image' data
*/
unsigned char* data;
};
#endif // __FTPixmapGlyphImpl__

View file

@ -0,0 +1,156 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Éric Beets <ericbeets@free.fr>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTPolygonGlyphImpl.h"
#include "../FTVectoriser.h"
//
// FTGLPolyGlyph
//
FTPolygonGlyph::FTPolygonGlyph(FT_GlyphSlot glyph, float outset,
bool useDisplayList) :
FTGlyph(new FTPolygonGlyphImpl(glyph, outset, useDisplayList))
{}
FTPolygonGlyph::~FTPolygonGlyph()
{}
const FTPoint& FTPolygonGlyph::Render(const FTPoint& pen, int renderMode)
{
FTPolygonGlyphImpl *myimpl = dynamic_cast<FTPolygonGlyphImpl *>(impl);
return myimpl->RenderImpl(pen, renderMode);
}
//
// FTGLPolyGlyphImpl
//
FTPolygonGlyphImpl::FTPolygonGlyphImpl(FT_GlyphSlot glyph, float _outset,
bool useDisplayList)
: FTGlyphImpl(glyph),
glList(0)
{
if(ft_glyph_format_outline != glyph->format)
{
err = 0x14; // Invalid_Outline
return;
}
vectoriser = new FTVectoriser(glyph);
if((vectoriser->ContourCount() < 1) || (vectoriser->PointCount() < 3))
{
delete vectoriser;
vectoriser = NULL;
return;
}
hscale = glyph->face->size->metrics.x_ppem * 64;
vscale = glyph->face->size->metrics.y_ppem * 64;
outset = _outset;
if(useDisplayList)
{
glList = glGenLists(1);
glNewList(glList, GL_COMPILE);
DoRender();
glEndList();
delete vectoriser;
vectoriser = NULL;
}
}
FTPolygonGlyphImpl::~FTPolygonGlyphImpl()
{
if(glList)
{
glDeleteLists(glList, 1);
}
else if(vectoriser)
{
delete vectoriser;
}
}
const FTPoint& FTPolygonGlyphImpl::RenderImpl(const FTPoint& pen,
int renderMode)
{
glTranslatef(pen.Xf(), pen.Yf(), pen.Zf());
if(glList)
{
glCallList(glList);
}
else if(vectoriser)
{
DoRender();
}
glTranslatef(-pen.Xf(), -pen.Yf(), -pen.Zf());
return advance;
}
void FTPolygonGlyphImpl::DoRender()
{
vectoriser->MakeMesh(1.0, 1, outset);
const FTMesh *mesh = vectoriser->GetMesh();
for(unsigned int t = 0; t < mesh->TesselationCount(); ++t)
{
const FTTesselation* subMesh = mesh->Tesselation(t);
unsigned int polygonType = subMesh->PolygonType();
glBegin(polygonType);
for(unsigned int i = 0; i < subMesh->PointCount(); ++i)
{
FTPoint point = subMesh->Point(i);
glTexCoord2f(point.Xf() / hscale, point.Yf() / vscale);
glVertex3f(point.Xf() / 64.0f, point.Yf() / 64.0f, 0.0f);
}
glEnd();
}
}

View file

@ -0,0 +1,66 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTPolygonGlyphImpl__
#define __FTPolygonGlyphImpl__
#include "FTGlyphImpl.h"
class FTVectoriser;
class FTPolygonGlyphImpl : public FTGlyphImpl
{
friend class FTPolygonGlyph;
public:
FTPolygonGlyphImpl(FT_GlyphSlot glyph, float outset,
bool useDisplayList);
virtual ~FTPolygonGlyphImpl();
virtual const FTPoint& RenderImpl(const FTPoint& pen, int renderMode);
private:
/**
* Private rendering method.
*/
void DoRender();
/**
* Private rendering variables.
*/
unsigned int hscale, vscale;
FTVectoriser *vectoriser;
float outset;
/**
* OpenGL display list
*/
GLuint glList;
};
#endif // __FTPolygonGlyphImpl__

View file

@ -0,0 +1,153 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include <math.h>
#include "FTGL/ftgl.h"
#include "../FTInternals.h"
#include "FTTextureGlyphImpl.h"
//
// FTGLTextureGlyph
//
FTTextureGlyph::FTTextureGlyph(FT_GlyphSlot glyph, int id, int xOffset,
int yOffset, int width, int height) :
FTGlyph(new FTTextureGlyphImpl(glyph, id, xOffset, yOffset, width, height))
{}
FTTextureGlyph::~FTTextureGlyph()
{}
const FTPoint& FTTextureGlyph::Render(const FTPoint& pen, int renderMode)
{
FTTextureGlyphImpl *myimpl = dynamic_cast<FTTextureGlyphImpl *>(impl);
return myimpl->RenderImpl(pen, renderMode);
}
//
// FTGLTextureGlyphImpl
//
GLint FTTextureGlyphImpl::activeTextureID = 0;
FTTextureGlyphImpl::FTTextureGlyphImpl(FT_GlyphSlot glyph, int id, int xOffset,
int yOffset, int width, int height)
: FTGlyphImpl(glyph),
destWidth(0),
destHeight(0),
glTextureID(id)
{
/* FIXME: need to propagate the render mode all the way down to
* here in order to get FT_RENDER_MODE_MONO aliased fonts.
*/
err = FT_Render_Glyph(glyph, FT_RENDER_MODE_NORMAL);
if(err || glyph->format != ft_glyph_format_bitmap)
{
return;
}
FT_Bitmap bitmap = glyph->bitmap;
destWidth = bitmap.width;
destHeight = bitmap.rows;
if(destWidth && destHeight)
{
glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT);
glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glBindTexture(GL_TEXTURE_2D, glTextureID);
glTexSubImage2D(GL_TEXTURE_2D, 0, xOffset, yOffset, destWidth, destHeight, GL_ALPHA, GL_UNSIGNED_BYTE, bitmap.buffer);
glPopClientAttrib();
}
// 0
// +----+
// | |
// | |
// | |
// +----+
// 1
uv[0].X(static_cast<float>(xOffset) / static_cast<float>(width));
uv[0].Y(static_cast<float>(yOffset) / static_cast<float>(height));
uv[1].X(static_cast<float>(xOffset + destWidth) / static_cast<float>(width));
uv[1].Y(static_cast<float>(yOffset + destHeight) / static_cast<float>(height));
corner = FTPoint(glyph->bitmap_left, glyph->bitmap_top);
}
FTTextureGlyphImpl::~FTTextureGlyphImpl()
{}
const FTPoint& FTTextureGlyphImpl::RenderImpl(const FTPoint& pen,
int renderMode)
{
float dx, dy;
if(activeTextureID != glTextureID)
{
glBindTexture(GL_TEXTURE_2D, (GLuint)glTextureID);
activeTextureID = glTextureID;
}
dx = floor(pen.Xf() + corner.Xf());
dy = floor(pen.Yf() + corner.Yf());
glBegin(GL_QUADS);
glTexCoord2f(uv[0].Xf(), uv[0].Yf());
glVertex2f(dx, dy);
glTexCoord2f(uv[0].Xf(), uv[1].Yf());
glVertex2f(dx, dy - destHeight);
glTexCoord2f(uv[1].Xf(), uv[1].Yf());
glVertex2f(dx + destWidth, dy - destHeight);
glTexCoord2f(uv[1].Xf(), uv[0].Yf());
glVertex2f(dx + destWidth, dy);
glEnd();
return advance;
}

View file

@ -0,0 +1,88 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTTextureGlyphImpl__
#define __FTTextureGlyphImpl__
#include "FTGlyphImpl.h"
class FTTextureGlyphImpl : public FTGlyphImpl
{
friend class FTTextureGlyph;
friend class FTTextureFontImpl;
protected:
FTTextureGlyphImpl(FT_GlyphSlot glyph, int id, int xOffset,
int yOffset, int width, int height);
virtual ~FTTextureGlyphImpl();
virtual const FTPoint& RenderImpl(const FTPoint& pen, int renderMode);
private:
/**
* Reset the currently active texture to zero to get into a known
* state before drawing a string. This is to get round possible
* threading issues.
*/
static void ResetActiveTexture() { activeTextureID = 0; }
/**
* The width of the glyph 'image'
*/
int destWidth;
/**
* The height of the glyph 'image'
*/
int destHeight;
/**
* Vector from the pen position to the topleft corner of the pixmap
*/
FTPoint corner;
/**
* The texture co-ords of this glyph within the texture.
*/
FTPoint uv[2];
/**
* The texture index that this glyph is contained in.
*/
int glTextureID;
/**
* The texture index of the currently active texture
*
* We keep track of the currently active texture to try to reduce the
* number of texture bind operations.
*/
static GLint activeTextureID;
};
#endif // __FTTextureGlyphImpl__

View file

@ -0,0 +1,119 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "config.h"
#include "FTGL/ftgl.h"
#include "FTGlyphContainer.h"
#include "FTFace.h"
#include "FTCharmap.h"
FTGlyphContainer::FTGlyphContainer(FTFace* f)
: face(f),
err(0)
{
glyphs.push_back(NULL);
charMap = new FTCharmap(face);
}
FTGlyphContainer::~FTGlyphContainer()
{
GlyphVector::iterator it;
for(it = glyphs.begin(); it != glyphs.end(); ++it)
{
delete *it;
}
glyphs.clear();
delete charMap;
}
bool FTGlyphContainer::CharMap(FT_Encoding encoding)
{
bool result = charMap->CharMap(encoding);
err = charMap->Error();
return result;
}
unsigned int FTGlyphContainer::FontIndex(const unsigned int charCode) const
{
return charMap->FontIndex(charCode);
}
void FTGlyphContainer::Add(FTGlyph* tempGlyph, const unsigned int charCode)
{
charMap->InsertIndex(charCode, glyphs.size());
glyphs.push_back(tempGlyph);
}
const FTGlyph* const FTGlyphContainer::Glyph(const unsigned int charCode) const
{
unsigned int index = charMap->GlyphListIndex(charCode);
return glyphs[index];
}
FTBBox FTGlyphContainer::BBox(const unsigned int charCode) const
{
return Glyph(charCode)->BBox();
}
float FTGlyphContainer::Advance(const unsigned int charCode,
const unsigned int nextCharCode)
{
unsigned int left = charMap->FontIndex(charCode);
unsigned int right = charMap->FontIndex(nextCharCode);
return face->KernAdvance(left, right).Xf() + Glyph(charCode)->Advance();
}
FTPoint FTGlyphContainer::Render(const unsigned int charCode,
const unsigned int nextCharCode,
FTPoint penPosition, int renderMode)
{
unsigned int left = charMap->FontIndex(charCode);
unsigned int right = charMap->FontIndex(nextCharCode);
FTPoint kernAdvance = face->KernAdvance(left, right);
if(!face->Error())
{
unsigned int index = charMap->GlyphListIndex(charCode);
kernAdvance += glyphs[index]->Render(penPosition, renderMode);
}
return kernAdvance;
}

View file

@ -0,0 +1,155 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTGlyphContainer__
#define __FTGlyphContainer__
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
#include "FTGL/ftgl.h"
#include "FTVector.h"
class FTFace;
class FTGlyph;
class FTCharmap;
/**
* FTGlyphContainer holds the post processed FTGlyph objects.
*
* @see FTGlyph
*/
class FTGlyphContainer
{
typedef FTVector<FTGlyph*> GlyphVector;
public:
/**
* Constructor
*
* @param face The Freetype face
*/
FTGlyphContainer(FTFace* face);
/**
* Destructor
*/
~FTGlyphContainer();
/**
* Sets the character map for the face.
*
* @param encoding the Freetype encoding symbol. See above.
* @return <code>true</code> if charmap was valid
* and set correctly
*/
bool CharMap(FT_Encoding encoding);
/**
* Get the font index of the input character.
*
* @param characterCode The character code of the requested glyph in the
* current encoding eg apple roman.
* @return The font index for the character.
*/
unsigned int FontIndex(const unsigned int characterCode) const;
/**
* Adds a glyph to this glyph list.
*
* @param glyph The FTGlyph to be inserted into the container
* @param characterCode The char code of the glyph NOT the glyph index.
*/
void Add(FTGlyph* glyph, const unsigned int characterCode);
/**
* Get a glyph from the glyph list
*
* @param characterCode The char code of the glyph NOT the glyph index
* @return An FTGlyph or <code>null</code> is it hasn't been
* loaded.
*/
const FTGlyph* const Glyph(const unsigned int characterCode) const;
/**
* Get the bounding box for a character.
* @param characterCode The char code of the glyph NOT the glyph index
*/
FTBBox BBox(const unsigned int characterCode) const;
/**
* Returns the kerned advance width for a glyph.
*
* @param characterCode glyph index of the character
* @param nextCharacterCode the next glyph in a string
* @return advance width
*/
float Advance(const unsigned int characterCode,
const unsigned int nextCharacterCode);
/**
* Renders a character
* @param characterCode the glyph to be Rendered
* @param nextCharacterCode the next glyph in the string. Used for kerning.
* @param penPosition the position to Render the glyph
* @param renderMode Render mode to display
* @return The distance to advance the pen position after Rendering
*/
FTPoint Render(const unsigned int characterCode,
const unsigned int nextCharacterCode,
FTPoint penPosition, int renderMode);
/**
* Queries the Font for errors.
*
* @return The current error code.
*/
FT_Error Error() const { return err; }
private:
/**
* The FTGL face
*/
FTFace* face;
/**
* The Character Map object associated with the current face
*/
FTCharmap* charMap;
/**
* A structure to hold the glyphs
*/
GlyphVector glyphs;
/**
* Current error code. Zero means no error.
*/
FT_Error err;
};
#endif // __FTGlyphContainer__

View file

@ -0,0 +1,145 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Éric Beets <ericbeets@free.fr>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTINTERNALS_H__
#define __FTINTERNALS_H__
#include "FTGL/ftgl.h"
#include <stdlib.h>
#include <stdio.h>
// Fixes for deprecated identifiers in 2.1.5
#ifndef FT_OPEN_MEMORY
#define FT_OPEN_MEMORY (FT_Open_Flags)1
#endif
#ifndef FT_RENDER_MODE_MONO
#define FT_RENDER_MODE_MONO ft_render_mode_mono
#endif
#ifndef FT_RENDER_MODE_NORMAL
#define FT_RENDER_MODE_NORMAL ft_render_mode_normal
#endif
#ifdef WIN32
// Under windows avoid including <windows.h> is overrated.
// Sure, it can be avoided and "name space pollution" can be
// avoided, but why? It really doesn't make that much difference
// these days.
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#ifndef __gl_h_
#include <GL/gl.h>
#include <GL/glu.h>
#endif
#else
// Non windows platforms - don't require nonsense as seen above :-)
#ifndef __gl_h_
#ifdef SDL_main
#include "SDL_opengl.h"
#elif __APPLE_CC__
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#else
#include <GL/gl.h>
#if defined (__sun__) && !defined (__sparc__)
#include <mesa/glu.h>
#else
#include <GL/glu.h>
#endif
#endif
#endif
// Required for compatibility with glext.h style function definitions of
// OpenGL extensions, such as in src/osg/Point.cpp.
#ifndef APIENTRY
#define APIENTRY
#endif
#endif
FTGL_BEGIN_C_DECLS
typedef enum
{
GLYPH_CUSTOM,
GLYPH_BITMAP,
GLYPH_BUFFER,
GLYPH_PIXMAP,
GLYPH_OUTLINE,
GLYPH_POLYGON,
GLYPH_EXTRUDE,
GLYPH_TEXTURE,
} GlyphType;
struct _FTGLglyph
{
FTGlyph *ptr;
FTGL::GlyphType type;
};
typedef enum
{
FONT_CUSTOM,
FONT_BITMAP,
FONT_BUFFER,
FONT_PIXMAP,
FONT_OUTLINE,
FONT_POLYGON,
FONT_EXTRUDE,
FONT_TEXTURE,
} FontType;
struct _FTGLfont
{
FTFont *ptr;
FTGL::FontType type;
};
typedef enum
{
LAYOUT_SIMPLE,
} LayoutType;
struct _FTGLlayout
{
FTLayout *ptr;
FTGLfont *font;
FTGL::LayoutType type;
};
FTGL_END_C_DECLS
#endif //__FTINTERNALS_H__

View file

@ -0,0 +1,80 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include "FTGL/ftgl.h"
#include "../FTFont/FTFontImpl.h"
#include "./FTLayoutImpl.h"
//
// FTLayout
//
FTLayout::FTLayout()
{
impl = new FTLayoutImpl();
}
FTLayout::FTLayout(FTLayoutImpl *pImpl)
{
impl = pImpl;
}
FTLayout::~FTLayout()
{
delete impl;
}
FT_Error FTLayout::Error() const
{
return impl->err;
}
//
// FTLayoutImpl
//
FTLayoutImpl::FTLayoutImpl() :
err(0)
{
;
}
FTLayoutImpl::~FTLayoutImpl()
{
;
}

View file

@ -0,0 +1,171 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Éric Beets <ericbeets@free.fr>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include "../FTInternals.h"
static const FTBBox static_ftbbox;
FTGL_BEGIN_C_DECLS
#define C_TOR(cname, cargs, cxxname, cxxarg, cxxtype) \
FTGLlayout* cname cargs \
{ \
cxxname *l = new cxxname cxxarg; \
if(l->Error()) \
{ \
delete l; \
return NULL; \
} \
FTGLlayout *ftgl = (FTGLlayout *)malloc(sizeof(FTGLlayout)); \
ftgl->ptr = l; \
ftgl->type = cxxtype; \
return ftgl; \
}
// FTSimpleLayout::FTSimpleLayout();
C_TOR(ftglCreateSimpleLayout, (), FTSimpleLayout, (), LAYOUT_SIMPLE);
#define C_FUN(cret, cname, cargs, cxxerr, cxxname, cxxarg) \
cret cname cargs \
{ \
if(!l || !l->ptr) \
{ \
fprintf(stderr, "FTGL warning: NULL pointer in %s\n", #cname); \
cxxerr; \
} \
return l->ptr->cxxname cxxarg; \
}
// FTLayout::~FTLayout();
void ftglDestroyLayout(FTGLlayout *l)
{
if(!l || !l->ptr)
{
fprintf(stderr, "FTGL warning: NULL pointer in %s\n", __FUNCTION__);
return;
}
delete l->ptr;
free(l);
}
// virtual FTBBox FTLayout::BBox(const char* string)
extern "C++" {
C_FUN(static FTBBox, _ftgGetlLayoutBBox, (FTGLlayout *l, const char *s),
return static_ftbbox, BBox, (s));
}
void ftgGetlLayoutBBox(FTGLlayout *l, const char * s, float c[6])
{
FTBBox ret = _ftgGetlLayoutBBox(l, s);
FTPoint lower = ret.Lower(), upper = ret.Upper();
c[0] = lower.Xf(); c[1] = lower.Yf(); c[2] = lower.Zf();
c[3] = upper.Xf(); c[4] = upper.Yf(); c[5] = upper.Zf();
}
// virtual void FTLayout::Render(const char* string, int renderMode);
C_FUN(void, ftglRenderLayout, (FTGLlayout *l, const char *s, int r),
return, Render, (s, r));
// FT_Error FTLayout::Error() const;
C_FUN(FT_Error, ftglGetLayoutError, (FTGLlayout *l), return -1, Error, ());
// void FTSimpleLayout::SetFont(FTFont *fontInit)
void ftglSetLayoutFont(FTGLlayout *l, FTGLfont *font)
{
if(!l || !l->ptr)
{
fprintf(stderr, "FTGL warning: NULL pointer in %s\n", __FUNCTION__);
return;
}
if(l->type != FTGL::LAYOUT_SIMPLE)
{
fprintf(stderr, "FTGL warning: %s not implemented for %d\n",
__FUNCTION__, l->type);
}
l->font = font;
return dynamic_cast<FTSimpleLayout*>(l->ptr)->SetFont(font->ptr);
}
// FTFont *FTSimpleLayout::GetFont()
FTGLfont *ftglGetLayoutFont(FTGLlayout *l)
{
if(!l || !l->ptr)
{
fprintf(stderr, "FTGL warning: NULL pointer in %s\n", __FUNCTION__);
return NULL;
}
if(l->type != FTGL::LAYOUT_SIMPLE)
{
fprintf(stderr, "FTGL warning: %s not implemented for %d\n",
__FUNCTION__, l->type);
}
return l->font;
}
#undef C_FUN
#define C_FUN(cret, cname, cargs, cxxerr, cxxname, cxxarg) \
cret cname cargs \
{ \
if(!l || !l->ptr) \
{ \
fprintf(stderr, "FTGL warning: NULL pointer in %s\n", #cname); \
cxxerr; \
} \
if(l->type != FTGL::LAYOUT_SIMPLE) \
{ \
fprintf(stderr, "FTGL warning: %s not implemented for %d\n", \
__FUNCTION__, l->type); \
cxxerr; \
} \
return dynamic_cast<FTSimpleLayout*>(l->ptr)->cxxname cxxarg; \
}
// void FTSimpleLayout::SetLineLength(const float LineLength);
C_FUN(void, ftglSetLayoutLineLength, (FTGLlayout *l, const float length),
return, SetLineLength, (length));
// float FTSimpleLayout::GetLineLength() const
C_FUN(float, ftglGetLayoutLineLength, (FTGLlayout *l),
return 0.0f, GetLineLength, ());
// void FTSimpleLayout::SetAlignment(const TextAlignment Alignment)
C_FUN(void, ftglSetLayoutAlignment, (FTGLlayout *l, const int a),
return, SetAlignment, ((FTGL::TextAlignment)a));
// TextAlignment FTSimpleLayout::GetAlignment() const
C_FUN(int, ftglGetLayoutAlignement, (FTGLlayout *l),
return FTGL::ALIGN_LEFT, GetAlignment, ());
// void FTSimpleLayout::SetLineSpacing(const float LineSpacing)
C_FUN(void, ftglSetLayoutLineSpacing, (FTGLlayout *l, const float f),
return, SetLineSpacing, (f));
FTGL_END_C_DECLS

View file

@ -0,0 +1,56 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTLayoutImpl__
#define __FTLayoutImpl__
#include "../FTSize.h"
#include "../FTGlyphContainer.h"
class FTLayoutImpl
{
friend class FTLayout;
protected:
FTLayoutImpl();
virtual ~FTLayoutImpl();
protected:
/**
* Current pen or cursor position;
*/
FTPoint pen;
/**
* Current error code. Zero means no error.
*/
FT_Error err;
};
#endif // __FTLayoutImpl__

View file

@ -0,0 +1,460 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "../config.h"
#include <ctype.h>
#include <wctype.h>
#include "../FTInternals.h"
#include "../FTUnicode.h"
#include "../FTGlyphContainer.h"
#include "FTSimpleLayoutImpl.h"
//
// FTSimpleLayout
//
FTSimpleLayout::FTSimpleLayout() :
FTLayout(new FTSimpleLayoutImpl())
{}
FTSimpleLayout::~FTSimpleLayout()
{}
FTBBox FTSimpleLayout::BBox(const char *string, const int len, FTPoint pos)
{
return dynamic_cast<FTSimpleLayoutImpl*>(impl)->BBox(string, len, pos);
}
FTBBox FTSimpleLayout::BBox(const wchar_t *string, const int len, FTPoint pos)
{
return dynamic_cast<FTSimpleLayoutImpl*>(impl)->BBox(string, len, pos);
}
void FTSimpleLayout::Render(const char *string, const int len, FTPoint pos,
int renderMode)
{
return dynamic_cast<FTSimpleLayoutImpl*>(impl)->Render(string, len, pos,
renderMode);
}
void FTSimpleLayout::Render(const wchar_t* string, const int len, FTPoint pos,
int renderMode)
{
return dynamic_cast<FTSimpleLayoutImpl*>(impl)->Render(string, len, pos,
renderMode);
}
void FTSimpleLayout::SetFont(FTFont *fontInit)
{
dynamic_cast<FTSimpleLayoutImpl*>(impl)->currentFont = fontInit;
}
FTFont *FTSimpleLayout::GetFont()
{
return dynamic_cast<FTSimpleLayoutImpl*>(impl)->currentFont;
}
void FTSimpleLayout::SetLineLength(const float LineLength)
{
dynamic_cast<FTSimpleLayoutImpl*>(impl)->lineLength = LineLength;
}
float FTSimpleLayout::GetLineLength() const
{
return dynamic_cast<FTSimpleLayoutImpl*>(impl)->lineLength;
}
void FTSimpleLayout::SetAlignment(const FTGL::TextAlignment Alignment)
{
dynamic_cast<FTSimpleLayoutImpl*>(impl)->alignment = Alignment;
}
FTGL::TextAlignment FTSimpleLayout::GetAlignment() const
{
return dynamic_cast<FTSimpleLayoutImpl*>(impl)->alignment;
}
void FTSimpleLayout::SetLineSpacing(const float LineSpacing)
{
dynamic_cast<FTSimpleLayoutImpl*>(impl)->lineSpacing = LineSpacing;
}
float FTSimpleLayout::GetLineSpacing() const
{
return dynamic_cast<FTSimpleLayoutImpl*>(impl)->lineSpacing;
}
//
// FTSimpleLayoutImpl
//
FTSimpleLayoutImpl::FTSimpleLayoutImpl()
{
currentFont = NULL;
lineLength = 100.0f;
alignment = FTGL::ALIGN_LEFT;
lineSpacing = 1.0f;
}
template <typename T>
inline FTBBox FTSimpleLayoutImpl::BBoxI(const T* string, const int len,
FTPoint position)
{
FTBBox tmp;
WrapText(string, len, position, 0, &tmp);
return tmp;
}
FTBBox FTSimpleLayoutImpl::BBox(const char *string, const int len,
FTPoint position)
{
return BBoxI(string, len, position);
}
FTBBox FTSimpleLayoutImpl::BBox(const wchar_t *string, const int len,
FTPoint position)
{
return BBoxI(string, len, position);
}
template <typename T>
inline void FTSimpleLayoutImpl::RenderI(const T *string, const int len,
FTPoint position, int renderMode)
{
pen = FTPoint(0.0f, 0.0f);
WrapText(string, len, position, renderMode, NULL);
}
void FTSimpleLayoutImpl::Render(const char *string, const int len,
FTPoint position, int renderMode)
{
RenderI(string, len, position, renderMode);
}
void FTSimpleLayoutImpl::Render(const wchar_t* string, const int len,
FTPoint position, int renderMode)
{
RenderI(string, len, position, renderMode);
}
template <typename T>
inline void FTSimpleLayoutImpl::WrapTextI(const T *buf, const int len,
FTPoint position, int renderMode,
FTBBox *bounds)
{
FTUnicodeStringItr<T> breakItr(buf); // points to the last break character
FTUnicodeStringItr<T> lineStart(buf); // points to the line start
float nextStart = 0.0; // total width of the current line
float breakWidth = 0.0; // width of the line up to the last word break
float currentWidth = 0.0; // width of all characters on the current line
float prevWidth; // width of all characters but the current glyph
float wordLength = 0.0; // length of the block since the last break char
int charCount = 0; // number of characters so far on the line
int breakCharCount = 0; // number of characters before the breakItr
float glyphWidth, advance;
FTBBox glyphBounds;
// Reset the pen position
pen.Y(0);
// If we have bounds mark them invalid
if(bounds)
{
bounds->Invalidate();
}
// Scan the input for all characters that need output
FTUnicodeStringItr<T> prevItr(buf);
for (FTUnicodeStringItr<T> itr(buf); *itr; prevItr = itr++, charCount++)
{
// Find the width of the current glyph
glyphBounds = currentFont->BBox(itr.getBufferFromHere(), 1);
glyphWidth = glyphBounds.Upper().Xf() - glyphBounds.Lower().Xf();
advance = currentFont->Advance(itr.getBufferFromHere(), 1);
prevWidth = currentWidth;
// Compute the width of all glyphs up to the end of buf[i]
currentWidth = nextStart + glyphWidth;
// Compute the position of the next glyph
nextStart += advance;
// See if the current character is a space, a break or a regular character
if((currentWidth > lineLength) || (*itr == '\n'))
{
// A non whitespace character has exceeded the line length. Or a
// newline character has forced a line break. Output the last
// line and start a new line after the break character.
// If we have not yet found a break, break on the last character
if(breakItr == lineStart || (*itr == '\n'))
{
// Break on the previous character
breakItr = prevItr;
breakCharCount = charCount - 1;
breakWidth = prevWidth;
// None of the previous words will be carried to the next line
wordLength = 0;
// If the current character is a newline discard its advance
if(*itr == '\n') advance = 0;
}
float remainingWidth = lineLength - breakWidth;
// Render the current substring
FTUnicodeStringItr<T> breakChar = breakItr;
// move past the break character and don't count it on the next line either
++breakChar; --charCount;
// If the break character is a newline do not render it
if(*breakChar == '\n')
{
++breakChar; --charCount;
}
OutputWrapped(lineStart.getBufferFromHere(), breakCharCount,
//breakItr.getBufferFromHere() - lineStart.getBufferFromHere(),
position, renderMode, remainingWidth, bounds);
// Store the start of the next line
lineStart = breakChar;
// TODO: Is Height() the right value here?
pen -= FTPoint(0, currentFont->LineHeight() * lineSpacing);
// The current width is the width since the last break
nextStart = wordLength + advance;
wordLength += advance;
currentWidth = wordLength + advance;
// Reset the safe break for the next line
breakItr = lineStart;
charCount -= breakCharCount;
}
else if(iswspace(*itr))
{
// This is the last word break position
wordLength = 0;
breakItr = itr;
breakCharCount = charCount;
// Check to see if this is the first whitespace character in a run
if(buf == itr.getBufferFromHere() || !iswspace(*prevItr))
{
// Record the width of the start of the block
breakWidth = currentWidth;
}
}
else
{
wordLength += advance;
}
}
float remainingWidth = lineLength - currentWidth;
// Render any remaining text on the last line
// Disable justification for the last row
if(alignment == FTGL::ALIGN_JUSTIFY)
{
alignment = FTGL::ALIGN_LEFT;
OutputWrapped(lineStart.getBufferFromHere(), -1, position, renderMode,
remainingWidth, bounds);
alignment = FTGL::ALIGN_JUSTIFY;
}
else
{
OutputWrapped(lineStart.getBufferFromHere(), -1, position, renderMode,
remainingWidth, bounds);
}
}
void FTSimpleLayoutImpl::WrapText(const char *buf, const int len,
FTPoint position, int renderMode,
FTBBox *bounds)
{
WrapTextI(buf, len, position, renderMode, bounds);
}
void FTSimpleLayoutImpl::WrapText(const wchar_t* buf, const int len,
FTPoint position, int renderMode,
FTBBox *bounds)
{
WrapTextI(buf, len, position, renderMode, bounds);
}
template <typename T>
inline void FTSimpleLayoutImpl::OutputWrappedI(const T *buf, const int len,
FTPoint position, int renderMode,
const float remaining,
FTBBox *bounds)
{
float distributeWidth = 0.0;
// Align the text according as specified by Alignment
switch (alignment)
{
case FTGL::ALIGN_LEFT:
pen.X(0);
break;
case FTGL::ALIGN_CENTER:
pen.X(remaining / 2);
break;
case FTGL::ALIGN_RIGHT:
pen.X(remaining);
break;
case FTGL::ALIGN_JUSTIFY:
pen.X(0);
distributeWidth = remaining;
break;
}
// If we have bounds expand them by the line's bounds, otherwise render
// the line.
if(bounds)
{
FTBBox temp = currentFont->BBox(buf, len);
// Add the extra space to the upper x dimension
temp = FTBBox(temp.Lower() + pen,
temp.Upper() + pen + FTPoint(distributeWidth, 0));
// See if this is the first area to be added to the bounds
if(bounds->IsValid())
{
*bounds |= temp;
}
else
{
*bounds = temp;
}
}
else
{
RenderSpace(buf, len, position, renderMode, distributeWidth);
}
}
void FTSimpleLayoutImpl::OutputWrapped(const char *buf, const int len,
FTPoint position, int renderMode,
const float remaining, FTBBox *bounds)
{
OutputWrappedI(buf, len, position, renderMode, remaining, bounds);
}
void FTSimpleLayoutImpl::OutputWrapped(const wchar_t *buf, const int len,
FTPoint position, int renderMode,
const float remaining, FTBBox *bounds)
{
OutputWrappedI(buf, len, position, renderMode, remaining, bounds);
}
template <typename T>
inline void FTSimpleLayoutImpl::RenderSpaceI(const T *string, const int len,
FTPoint position, int renderMode,
const float extraSpace)
{
float space = 0.0;
// If there is space to distribute, count the number of spaces
if(extraSpace > 0.0)
{
int numSpaces = 0;
// Count the number of space blocks in the input
FTUnicodeStringItr<T> prevItr(string), itr(string);
for(int i = 0; ((len < 0) && *itr) || ((len >= 0) && (i <= len));
++i, prevItr = itr++)
{
// If this is the end of a space block, increment the counter
if((i > 0) && !iswspace(*itr) && iswspace(*prevItr))
{
numSpaces++;
}
}
space = extraSpace/numSpaces;
}
// Output all characters of the string
FTUnicodeStringItr<T> prevItr(string), itr(string);
for(int i = 0; ((len < 0) && *itr) || ((len >= 0) && (i <= len));
++i, prevItr = itr++)
{
// If this is the end of a space block, distribute the extra space
// inside it
if((i > 0) && !iswspace(*itr) && iswspace(*prevItr))
{
pen += FTPoint(space, 0);
}
pen = currentFont->Render(itr.getBufferFromHere(), 1, pen, FTPoint(), renderMode);
}
}
void FTSimpleLayoutImpl::RenderSpace(const char *string, const int len,
FTPoint position, int renderMode,
const float extraSpace)
{
RenderSpaceI(string, len, position, renderMode, extraSpace);
}
void FTSimpleLayoutImpl::RenderSpace(const wchar_t *string, const int len,
FTPoint position, int renderMode,
const float extraSpace)
{
RenderSpaceI(string, len, position, renderMode, extraSpace);
}

View file

@ -0,0 +1,225 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTSimpleLayoutImpl__
#define __FTSimpleLayoutImpl__
#include "FTLayoutImpl.h"
class FTFont;
class FTSimpleLayoutImpl : public FTLayoutImpl
{
friend class FTSimpleLayout;
protected:
FTSimpleLayoutImpl();
virtual ~FTSimpleLayoutImpl() {};
virtual FTBBox BBox(const char* string, const int len,
FTPoint position);
virtual FTBBox BBox(const wchar_t* string, const int len,
FTPoint position);
virtual void Render(const char *string, const int len,
FTPoint position, int renderMode);
virtual void Render(const wchar_t *string, const int len,
FTPoint position, int renderMode);
/**
* Render a string of characters and distribute extra space amongst
* the whitespace regions of the string.
*
* @param string A buffer of wchar_t characters to output.
* @param len The length of the string. If < 0 then all characters
* will be displayed until a null character is encountered.
* @param position TODO
* @param renderMode Render mode to display
* @param extraSpace The amount of extra space to distribute amongst
* the characters.
*/
virtual void RenderSpace(const char *string, const int len,
FTPoint position, int renderMode,
const float extraSpace);
/**
* Render a string of characters and distribute extra space amongst
* the whitespace regions of the string.
*
* @param string A buffer of wchar_t characters to output.
* @param len The length of the string. If < 0 then all characters
* will be displayed until a null character is encountered.
* @param position TODO
* @param renderMode Render mode to display
* @param extraSpace The amount of extra space to distribute amongst
* the characters.
*/
virtual void RenderSpace(const wchar_t *string, const int len,
FTPoint position, int renderMode,
const float extraSpace);
private:
/**
* Either render a string of characters and wrap lines
* longer than a threshold or compute the bounds
* of a string of characters when wrapped. The functionality
* of this method is exposed by the BBoxWrapped and
* RenderWrapped methods.
*
* @param buf A char string to output.
* @param len The length of the string. If < 0 then all characters
* will be displayed until a null character is encountered.
* @param position TODO
* @param renderMode Render mode to display
* @param bounds A pointer to a bounds object. If non null
* the bounds of the text when laid out
* will be stored in bounds. If null the
* text will be rendered.
*/
virtual void WrapText(const char *buf, const int len,
FTPoint position, int renderMode,
FTBBox *bounds);
/**
* Either render a string of characters and wrap lines
* longer than a threshold or compute the bounds
* of a string of characters when wrapped. The functionality
* of this method is exposed by the BBoxWrapped and
* RenderWrapped methods.
*
* @param buf A wchar_t style string to output.
* @param len The length of the string. If < 0 then all characters
* will be displayed until a null character is encountered.
* @param position TODO
* @param renderMode Render mode to display
* @param bounds A pointer to a bounds object. If non null
* the bounds of the text when laid out
* will be stored in bounds. If null the
* text will be rendered.
*/
virtual void WrapText(const wchar_t *buf, const int len,
FTPoint position, int renderMode,
FTBBox *bounds);
/**
* A helper method used by WrapText to either output the text or
* compute it's bounds.
*
* @param buf A pointer to an array of character data.
* @param len The length of the string. If < 0 then all characters
* will be displayed until a null character is encountered.
* @param position TODO
* @param renderMode Render mode to display
* @param RemainingWidth The amount of extra space left on the line.
* @param bounds A pointer to a bounds object. If non null the
* bounds will be initialized or expanded by the
* bounds of the line. If null the text will be
* rendered. If the bounds are invalid (lower > upper)
* they will be initialized. Otherwise they
* will be expanded.
*/
void OutputWrapped(const char *buf, const int len,
FTPoint position, int renderMode,
const float RemainingWidth, FTBBox *bounds);
/**
* A helper method used by WrapText to either output the text or
* compute it's bounds.
*
* @param buf A pointer to an array of character data.
* @param len The length of the string. If < 0 then all characters
* will be displayed until a null character is encountered.
* @param position TODO
* @param renderMode Render mode to display
* @param RemainingWidth The amount of extra space left on the line.
* @param bounds A pointer to a bounds object. If non null the
* bounds will be initialized or expanded by the
* bounds of the line. If null the text will be
* rendered. If the bounds are invalid (lower > upper)
* they will be initialized. Otherwise they
* will be expanded.
*/
void OutputWrapped(const wchar_t *buf, const int len,
FTPoint position, int renderMode,
const float RemainingWidth, FTBBox *bounds);
/**
* The font to use for rendering the text. The font is
* referenced by this but will not be disposed of when this
* is deleted.
*/
FTFont *currentFont;
/**
* The maximum line length for formatting text.
*/
float lineLength;
/**
* The text alignment mode used to distribute
* space within a line or rendered text.
*/
FTGL::TextAlignment alignment;
/**
* The height of each line of text expressed as
* a percentage of the font's line height.
*/
float lineSpacing;
/* Internal generic BBox() implementation */
template <typename T>
inline FTBBox BBoxI(const T* string, const int len, FTPoint position);
/* Internal generic Render() implementation */
template <typename T>
inline void RenderI(const T* string, const int len,
FTPoint position, int renderMode);
/* Internal generic RenderSpace() implementation */
template <typename T>
inline void RenderSpaceI(const T* string, const int len,
FTPoint position, int renderMode,
const float extraSpace);
/* Internal generic WrapText() implementation */
template <typename T>
void WrapTextI(const T* buf, const int len, FTPoint position,
int renderMode, FTBBox *bounds);
/* Internal generic OutputWrapped() implementation */
template <typename T>
void OutputWrappedI(const T* buf, const int len, FTPoint position,
int renderMode, const float RemainingWidth,
FTBBox *bounds);
};
#endif // __FTSimpleLayoutImpl__

View file

@ -0,0 +1,91 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "config.h"
#include "FTLibrary.h"
const FTLibrary& FTLibrary::Instance()
{
static FTLibrary ftlib;
return ftlib;
}
FTLibrary::~FTLibrary()
{
if(library != 0)
{
FT_Done_FreeType(*library);
delete library;
library= 0;
}
// if(manager != 0)
// {
// FTC_Manager_Done(manager);
//
// delete manager;
// manager= 0;
// }
}
FTLibrary::FTLibrary()
: library(0),
err(0)
{
Initialise();
}
bool FTLibrary::Initialise()
{
if(library != 0)
return true;
library = new FT_Library;
err = FT_Init_FreeType(library);
if(err)
{
delete library;
library = 0;
return false;
}
// FTC_Manager* manager;
//
// if(FTC_Manager_New(lib, 0, 0, 0, my_face_requester, 0, manager)
// {
// delete manager;
// manager= 0;
// return false;
// }
return true;
}

122
bazaar/FTGL/src/FTLibrary.h Normal file
View file

@ -0,0 +1,122 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTLibrary__
#define __FTLibrary__
#include <ft2build.h>
#include FT_FREETYPE_H
//#include FT_CACHE_H
#include "FTGL/ftgl.h"
/**
* FTLibrary class is the global accessor for the Freetype library.
*
* This class encapsulates the Freetype Library. This is a singleton class
* and ensures that only one FT_Library is in existence at any one time.
* All constructors are private therefore clients cannot create or
* instantiate this class themselves and must access it's methods via the
* static <code>FTLibrary::Instance()</code> function.
*
* Just because this class returns a valid <code>FTLibrary</code> object
* doesn't mean that the Freetype Library has been successfully initialised.
* Clients should check for errors. You can initialse the library AND check
* for errors using the following code...
* <code>err = FTLibrary::Instance().Error();</code>
*
* @see "Freetype 2 Documentation"
*
*/
class FTLibrary
{
public:
/**
* Global acces point to the single FTLibrary object.
*
* @return The global <code>FTLibrary</code> object.
*/
static const FTLibrary& Instance();
/**
* Gets a pointer to the native Freetype library.
*
* @return A handle to a FreeType library instance.
*/
const FT_Library* const GetLibrary() const { return library; }
/**
* Queries the library for errors.
*
* @return The current error code.
*/
FT_Error Error() const { return err; }
/**
* Destructor
*
* Disposes of the Freetype library
*/
~FTLibrary();
private:
/**
* Default constructors.
*
* Made private to stop clients creating there own FTLibrary
* objects.
*/
FTLibrary();
FTLibrary(const FT_Library&){}
FTLibrary& operator=(const FT_Library&) { return *this; }
/**
* Initialises the Freetype library
*
* Even though this function indicates success via the return value,
* clients can't see this so must check the error codes. This function
* is only ever called by the default c_stor
*
* @return <code>true</code> if the Freetype library was
* successfully initialised, <code>false</code>
* otherwise.
*/
bool Initialise();
/**
* Freetype library handle.
*/
FT_Library* library;
// FTC_Manager* manager;
/**
* Current error code. Zero means no error.
*/
FT_Error err;
};
#endif // __FTLibrary__

137
bazaar/FTGL/src/FTList.h Normal file
View file

@ -0,0 +1,137 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTList__
#define __FTList__
#include "FTGL/ftgl.h"
/**
* Provides a non-STL alternative to the STL list
*/
template <typename FT_LIST_ITEM_TYPE>
class FTList
{
public:
typedef FT_LIST_ITEM_TYPE value_type;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef size_t size_type;
/**
* Constructor
*/
FTList()
: listSize(0),
tail(0)
{
tail = NULL;
head = new Node;
}
/**
* Destructor
*/
~FTList()
{
Node* next;
for(Node *walk = head; walk; walk = next)
{
next = walk->next;
delete walk;
}
}
/**
* Get the number of items in the list
*/
size_type size() const
{
return listSize;
}
/**
* Add an item to the end of the list
*/
void push_back(const value_type& item)
{
Node* node = new Node(item);
if(head->next == NULL)
{
head->next = node;
}
if(tail)
{
tail->next = node;
}
tail = node;
++listSize;
}
/**
* Get the item at the front of the list
*/
reference front() const
{
return head->next->payload;
}
/**
* Get the item at the end of the list
*/
reference back() const
{
return tail->payload;
}
private:
struct Node
{
Node()
: next(NULL)
{}
Node(const value_type& item)
: next(NULL)
{
payload = item;
}
Node* next;
value_type payload;
};
size_type listSize;
Node* head;
Node* tail;
};
#endif // __FTList__

View file

@ -0,0 +1,58 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "config.h"
#include <math.h>
#include "FTGL/ftgl.h"
bool operator == (const FTPoint &a, const FTPoint &b)
{
return((a.values[0] == b.values[0]) && (a.values[1] == b.values[1]) && (a.values[2] == b.values[2]));
}
bool operator != (const FTPoint &a, const FTPoint &b)
{
return((a.values[0] != b.values[0]) || (a.values[1] != b.values[1]) || (a.values[2] != b.values[2]));
}
FTPoint FTPoint::Normalise()
{
double norm = sqrt(values[0] * values[0]
+ values[1] * values[1]
+ values[2] * values[2]);
if(norm == 0.0)
{
return *this;
}
FTPoint temp(values[0] / norm, values[1] / norm, values[2] / norm);
return temp;
}

123
bazaar/FTGL/src/FTSize.cpp Normal file
View file

@ -0,0 +1,123 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "config.h"
#include "FTSize.h"
FTSize::FTSize()
: ftFace(0),
ftSize(0),
size(0),
xResolution(0),
yResolution(0),
err(0)
{}
FTSize::~FTSize()
{}
bool FTSize::CharSize(FT_Face* face, unsigned int pointSize, unsigned int xRes, unsigned int yRes)
{
if(size != pointSize || xResolution != xRes || yResolution != yRes)
{
err = FT_Set_Char_Size(*face, 0L, pointSize * 64, xResolution, yResolution);
if(!err)
{
ftFace = face;
size = pointSize;
xResolution = xRes;
yResolution = yRes;
ftSize = (*ftFace)->size;
}
}
return !err;
}
unsigned int FTSize::CharSize() const
{
return size;
}
float FTSize::Ascender() const
{
return ftSize == 0 ? 0.0f : static_cast<float>(ftSize->metrics.ascender) / 64.0f;
}
float FTSize::Descender() const
{
return ftSize == 0 ? 0.0f : static_cast<float>(ftSize->metrics.descender) / 64.0f;
}
float FTSize::Height() const
{
if(0 == ftSize)
{
return 0.0f;
}
if(FT_IS_SCALABLE((*ftFace)))
{
return ((*ftFace)->bbox.yMax - (*ftFace)->bbox.yMin) * ((float)ftSize->metrics.y_ppem / (float)(*ftFace)->units_per_EM);
}
else
{
return static_cast<float>(ftSize->metrics.height) / 64.0f;
}
}
float FTSize::Width() const
{
if(0 == ftSize)
{
return 0.0f;
}
if(FT_IS_SCALABLE((*ftFace)))
{
return ((*ftFace)->bbox.xMax - (*ftFace)->bbox.xMin) * (static_cast<float>(ftSize->metrics.x_ppem) / static_cast<float>((*ftFace)->units_per_EM));
}
else
{
return static_cast<float>(ftSize->metrics.max_advance) / 64.0f;
}
}
float FTSize::Underline() const
{
return 0.0f;
}

164
bazaar/FTGL/src/FTSize.h Normal file
View file

@ -0,0 +1,164 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTSize__
#define __FTSize__
#include <ft2build.h>
#include FT_FREETYPE_H
#include "FTGL/ftgl.h"
/**
* FTSize class provides an abstraction layer for the Freetype Size.
*
* @see "Freetype 2 Documentation"
*
*/
class FTSize
{
public:
/**
* Default Constructor
*/
FTSize();
/**
* Destructor
*/
virtual ~FTSize();
/**
* Sets the char size for the current face.
*
* This doesn't guarantee that the size was set correctly. Clients
* should check errors. If an error does occur the size object isn't modified.
*
* @param face Parent face for this size object
* @param point_size the face size in points (1/72 inch)
* @param x_resolution the horizontal resolution of the target device.
* @param y_resolution the vertical resolution of the target device.
* @return <code>true</code> if the size has been set. Clients should check Error() for more information if this function returns false()
*/
bool CharSize(FT_Face* face, unsigned int point_size,
unsigned int x_resolution, unsigned int y_resolution);
/**
* get the char size for the current face.
*
* @return The char size in points
*/
unsigned int CharSize() const;
/**
* Gets the global ascender height for the face in pixels.
*
* @return Ascender height
*/
float Ascender() const;
/**
* Gets the global descender height for the face in pixels.
*
* @return Ascender height
*/
float Descender() const;
/**
* Gets the global face height for the face.
*
* If the face is scalable this returns the height of the global
* bounding box which ensures that any glyph will be less than or
* equal to this height. If the font isn't scalable there is no
* guarantee that glyphs will not be taller than this value.
*
* @return height in pixels.
*/
float Height() const;
/**
* Gets the global face width for the face.
*
* If the face is scalable this returns the width of the global
* bounding box which ensures that any glyph will be less than or
* equal to this width. If the font isn't scalable this value is
* the max_advance for the face.
*
* @return width in pixels.
*/
float Width() const;
/**
* Gets the underline position for the face.
*
* @return underline position in pixels
*/
float Underline() const;
/**
* Queries for errors.
*
* @return The current error code.
*/
FT_Error Error() const { return err; }
private:
/**
* The current Freetype face that this FTSize object relates to.
*/
FT_Face* ftFace;
/**
* The Freetype size.
*/
FT_Size ftSize;
/**
* The size in points.
*/
unsigned int size;
/**
* The horizontal resolution.
*/
unsigned int xResolution;
/**
* The vertical resolution.
*/
unsigned int yResolution;
/**
* Current error code. Zero means no error.
*/
FT_Error err;
};
#endif // __FTSize__

237
bazaar/FTGL/src/FTUnicode.h Normal file
View file

@ -0,0 +1,237 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2008 Daniel Remenak <dtremenak@users.sourceforge.net>
*
* Portions derived from ConvertUTF.c Copyright (C) 2001-2004 Unicode, Inc
* Unicode, Inc. hereby grants the right to freely use the information
* supplied in this file in the creation of products supporting the
* Unicode Standard, and to make copies of this file in any form
* for internal or external distribution as long as this notice
* remains attached.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTUnicode__
#define __FTUnicode__
/**
* Provides a way to easily walk multibyte unicode strings in the various
* Unicode encodings (UTF-8, UTF-16, UTF-32, UCS-2, and UCS-4). Encodings
* with elements larger than one byte must already be in the correct endian
* order for the current architecture.
*/
template <typename T>
class FTUnicodeStringItr
{
public:
/**
* Constructor. Also reads the first character and stores it.
*
* @param string The buffer to iterate. No copy is made.
*/
FTUnicodeStringItr(const T* string) : curPos(string), nextPos(string)
{
(*this)++;
};
/**
* Pre-increment operator. Reads the next unicode character and sets
* the state appropriately.
* Note - not protected against overruns.
*/
FTUnicodeStringItr& operator++()
{
curPos = nextPos;
// unicode handling
switch (sizeof(T))
{
case 1: // UTF-8
// get this character
readUTF8(); break;
case 2: // UTF-16
readUTF16(); break;
case 4: // UTF-32
// fall through
default: // error condition really, but give it a shot anyway
curChar = *nextPos++;
}
return *this;
}
/**
* Post-increment operator. Reads the next character and sets
* the state appropriately.
* Note - not protected against overruns.
*/
FTUnicodeStringItr operator++(int)
{
FTUnicodeStringItr temp = *this;
++*this;
return temp;
}
/**
* Equality operator. Two FTUnicodeStringItrs are considered equal
* if they have the same current buffer and buffer position.
*/
bool operator==(const FTUnicodeStringItr& right) const
{
if (curPos == right.getBufferFromHere())
return true;
return false;
}
/**
* Dereference operator.
*
* @return The unicode codepoint of the character currently pointed
* to by the FTUnicodeStringItr.
*/
unsigned int operator*() const
{
return curChar;
}
/**
* Buffer-fetching getter. You can use this to retreive the buffer
* starting at the currently-iterated character for functions which
* require a Unicode string as input.
*/
const T* getBufferFromHere() const { return curPos; }
private:
/**
* Helper function for reading a single UTF8 character from the string.
* Updates internal state appropriately.
*/
void readUTF8();
/**
* Helper function for reading a single UTF16 character from the string.
* Updates internal state appropriately.
*/
void readUTF16();
/**
* The buffer position of the first element in the current character.
*/
const T* curPos;
/**
* The character stored at the current buffer position (prefetched on
* increment, so there's no penalty for dereferencing more than once).
*/
unsigned int curChar;
/**
* The buffer position of the first element in the next character.
*/
const T* nextPos;
// unicode magic numbers
static const char utf8bytes[256];
static const unsigned long offsetsFromUTF8[6];
static const unsigned long highSurrogateStart;
static const unsigned long highSurrogateEnd;
static const unsigned long lowSurrogateStart;
static const unsigned long lowSurrogateEnd;
static const unsigned long highSurrogateShift;
static const unsigned long lowSurrogateBase;
};
/* The first character in a UTF8 sequence indicates how many bytes
* to read (among other things) */
template <typename T>
const char FTUnicodeStringItr<T>::utf8bytes[256] = {
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6
};
/* Magic values subtracted from a buffer value during UTF8 conversion.
* This table contains as many values as there might be trailing bytes
* in a UTF-8 sequence. */
template <typename T>
const unsigned long FTUnicodeStringItr<T>::offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL,
0x03C82080UL, 0xFA082080UL, 0x82082080UL };
// get a UTF8 character; leave the tracking pointer at the start of the
// next character
// not protected against invalid UTF8
template <typename T>
inline void FTUnicodeStringItr<T>::readUTF8()
{
unsigned int ch = 0;
unsigned int extraBytesToRead = utf8bytes[(unsigned char)(*nextPos)];
// falls through
switch (extraBytesToRead)
{
case 6: ch += *nextPos++; ch <<= 6; /* remember, illegal UTF-8 */
case 5: ch += *nextPos++; ch <<= 6; /* remember, illegal UTF-8 */
case 4: ch += *nextPos++; ch <<= 6;
case 3: ch += *nextPos++; ch <<= 6;
case 2: ch += *nextPos++; ch <<= 6;
case 1: ch += *nextPos++;
}
ch -= offsetsFromUTF8[extraBytesToRead-1];
curChar = ch;
}
// Magic numbers for UTF-16 conversions
template <typename T>
const unsigned long FTUnicodeStringItr<T>::highSurrogateStart = 0xD800;
template <typename T>
const unsigned long FTUnicodeStringItr<T>::highSurrogateEnd = 0xDBFF;
template <typename T>
const unsigned long FTUnicodeStringItr<T>::lowSurrogateStart = 0xDC00;
template <typename T>
const unsigned long FTUnicodeStringItr<T>::lowSurrogateEnd = 0xDFFF;
template <typename T>
const unsigned long FTUnicodeStringItr<T>::highSurrogateShift = 10;
template <typename T>
const unsigned long FTUnicodeStringItr<T>::lowSurrogateBase = 0x0010000UL;
template <typename T>
inline void FTUnicodeStringItr<T>::readUTF16()
{
unsigned int ch = *nextPos++;
// if we have the first half of the surrogate pair
if (ch >= highSurrogateStart && ch <= highSurrogateEnd)
{
unsigned int ch2 = *curPos;
// complete the surrogate pair
if (ch2 >= lowSurrogateStart && ch2 <= lowSurrogateEnd)
{
ch = ((ch - highSurrogateStart) << highSurrogateShift)
+ (ch2 - lowSurrogateStart) + lowSurrogateBase;
++nextPos;
}
}
curChar = ch;
}
#endif

215
bazaar/FTGL/src/FTVector.h Normal file
View file

@ -0,0 +1,215 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTVector__
#define __FTVector__
#include "FTGL/ftgl.h"
/**
* Provides a non-STL alternative to the STL vector
*/
template <typename FT_VECTOR_ITEM_TYPE>
class FTVector
{
public:
typedef FT_VECTOR_ITEM_TYPE value_type;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef value_type* iterator;
typedef const value_type* const_iterator;
typedef size_t size_type;
FTVector()
{
Capacity = Size = 0;
Items = 0;
}
virtual ~FTVector()
{
clear();
}
FTVector& operator =(const FTVector& v)
{
reserve(v.capacity());
iterator ptr = begin();
const_iterator vbegin = v.begin();
const_iterator vend = v.end();
while(vbegin != vend)
{
*ptr++ = *vbegin++;
}
Size = v.size();
return *this;
}
size_type size() const
{
return Size;
}
size_type capacity() const
{
return Capacity;
}
iterator begin()
{
return Items;
}
const_iterator begin() const
{
return Items;
}
iterator end()
{
return begin() + size();
}
const_iterator end() const
{
return begin() + size();
}
bool empty() const
{
return size() == 0;
}
reference operator [](size_type pos)
{
return(*(begin() + pos));
}
const_reference operator [](size_type pos) const
{
return *(begin() + pos);
}
void clear()
{
if(Capacity)
{
delete [] Items;
Capacity = Size = 0;
Items = 0;
}
}
void reserve(size_type n)
{
if(capacity() < n)
{
expand(n);
}
}
void push_back(const value_type& x)
{
if(size() == capacity())
{
expand();
}
(*this)[size()] = x;
++Size;
}
void resize(size_type n, value_type x)
{
if(n == size())
{
return;
}
reserve(n);
iterator ibegin, iend;
if(n >= Size)
{
ibegin = this->end();
iend = this->begin() + n;
}
else
{
ibegin = this->begin() + n;
iend = this->end();
}
while(ibegin != iend)
{
*ibegin++ = x;
}
Size = n;
}
private:
void expand(size_type capacity_hint = 0)
{
size_type new_capacity = (capacity() == 0) ? 256 : capacity() * 2;
if(capacity_hint)
{
while(new_capacity < capacity_hint)
{
new_capacity *= 2;
}
}
value_type *new_items = new value_type[new_capacity];
iterator ibegin = this->begin();
iterator iend = this->end();
value_type *ptr = new_items;
while(ibegin != iend)
{
*ptr++ = *ibegin++;
}
if(Capacity)
{
delete [] Items;
}
Items = new_items;
Capacity = new_capacity;
}
size_type Capacity;
size_type Size;
value_type* Items;
};
#endif // __FTVector__

View file

@ -0,0 +1,328 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Éric Beets <ericbeets@free.fr>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "config.h"
#include "FTInternals.h"
#include "FTVectoriser.h"
#ifndef CALLBACK
#define CALLBACK
#endif
#if defined __APPLE_CC__ && __APPLE_CC__ < 5465
typedef GLvoid (*GLUTesselatorFunction) (...);
#elif defined WIN32 && !defined __CYGWIN__
typedef GLvoid (CALLBACK *GLUTesselatorFunction) ();
#else
typedef GLvoid (*GLUTesselatorFunction) ();
#endif
void CALLBACK ftglError(GLenum errCode, FTMesh* mesh)
{
mesh->Error(errCode);
}
void CALLBACK ftglVertex(void* data, FTMesh* mesh)
{
FTGL_DOUBLE* vertex = static_cast<FTGL_DOUBLE*>(data);
mesh->AddPoint(vertex[0], vertex[1], vertex[2]);
}
void CALLBACK ftglCombine(FTGL_DOUBLE coords[3], void* vertex_data[4], GLfloat weight[4], void** outData, FTMesh* mesh)
{
const FTGL_DOUBLE* vertex = static_cast<const FTGL_DOUBLE*>(coords);
*outData = const_cast<FTGL_DOUBLE*>(mesh->Combine(vertex[0], vertex[1], vertex[2]));
}
void CALLBACK ftglBegin(GLenum type, FTMesh* mesh)
{
mesh->Begin(type);
}
void CALLBACK ftglEnd(FTMesh* mesh)
{
mesh->End();
}
FTMesh::FTMesh()
: currentTesselation(0),
err(0)
{
tesselationList.reserve(16);
}
FTMesh::~FTMesh()
{
for(size_t t = 0; t < tesselationList.size(); ++t)
{
delete tesselationList[t];
}
tesselationList.clear();
}
void FTMesh::AddPoint(const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z)
{
currentTesselation->AddPoint(x, y, z);
}
const FTGL_DOUBLE* FTMesh::Combine(const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z)
{
tempPointList.push_back(FTPoint(x, y,z));
return static_cast<const FTGL_DOUBLE*>(tempPointList.back());
}
void FTMesh::Begin(GLenum meshType)
{
currentTesselation = new FTTesselation(meshType);
}
void FTMesh::End()
{
tesselationList.push_back(currentTesselation);
}
const FTTesselation* const FTMesh::Tesselation(size_t index) const
{
return (index < tesselationList.size()) ? tesselationList[index] : NULL;
}
FTVectoriser::FTVectoriser(const FT_GlyphSlot glyph)
: contourList(0),
mesh(0),
ftContourCount(0),
contourFlag(0)
{
if(glyph)
{
outline = glyph->outline;
ftContourCount = outline.n_contours;
contourList = 0;
contourFlag = outline.flags;
ProcessContours();
}
}
FTVectoriser::~FTVectoriser()
{
for(size_t c = 0; c < ContourCount(); ++c)
{
delete contourList[c];
}
delete [] contourList;
delete mesh;
}
void FTVectoriser::ProcessContours()
{
short contourLength = 0;
short startIndex = 0;
short endIndex = 0;
contourList = new FTContour*[ftContourCount];
for(int i = 0; i < ftContourCount; ++i)
{
FT_Vector* pointList = &outline.points[startIndex];
char* tagList = &outline.tags[startIndex];
endIndex = outline.contours[i];
contourLength = (endIndex - startIndex) + 1;
FTContour* contour = new FTContour(pointList, tagList, contourLength);
contourList[i] = contour;
startIndex = endIndex + 1;
}
// Compute each contour's parity. FIXME: see if FT_Outline_Get_Orientation
// can do it for us.
for(int i = 0; i < ftContourCount; i++)
{
FTContour *c1 = contourList[i];
// 1. Find the leftmost point.
FTPoint leftmost(65536.0, 0.0);
for(size_t n = 0; n < c1->PointCount(); n++)
{
FTPoint p = c1->Point(n);
if(p.X() < leftmost.X())
{
leftmost = p;
}
}
// 2. Count how many other contours we cross when going further to
// the left.
int parity = 0;
for(int j = 0; j < ftContourCount; j++)
{
if(j == i)
{
continue;
}
FTContour *c2 = contourList[j];
for(size_t n = 0; n < c2->PointCount(); n++)
{
FTPoint p1 = c2->Point(n);
FTPoint p2 = c2->Point((n + 1) % c2->PointCount());
/* FIXME: combinations of >= > <= and < do not seem stable */
if((p1.Y() < leftmost.Y() && p2.Y() < leftmost.Y())
|| (p1.Y() >= leftmost.Y() && p2.Y() >= leftmost.Y())
|| (p1.X() > leftmost.X() && p2.X() > leftmost.X()))
{
continue;
}
else if(p1.X() < leftmost.X() && p2.X() < leftmost.X())
{
parity++;
}
else
{
FTPoint a = p1 - leftmost;
FTPoint b = p2 - leftmost;
if(b.X() * a.Y() > b.Y() * a.X())
{
parity++;
}
}
}
}
// 3. Make sure the glyph has the proper parity.
c1->SetParity(parity);
}
}
size_t FTVectoriser::PointCount()
{
size_t s = 0;
for(size_t c = 0; c < ContourCount(); ++c)
{
s += contourList[c]->PointCount();
}
return s;
}
const FTContour* const FTVectoriser::Contour(size_t index) const
{
return (index < ContourCount()) ? contourList[index] : NULL;
}
void FTVectoriser::MakeMesh(FTGL_DOUBLE zNormal, int outsetType, float outsetSize)
{
if(mesh)
{
delete mesh;
}
mesh = new FTMesh;
GLUtesselator* tobj = gluNewTess();
gluTessCallback(tobj, GLU_TESS_BEGIN_DATA, (GLUTesselatorFunction)ftglBegin);
gluTessCallback(tobj, GLU_TESS_VERTEX_DATA, (GLUTesselatorFunction)ftglVertex);
gluTessCallback(tobj, GLU_TESS_COMBINE_DATA, (GLUTesselatorFunction)ftglCombine);
gluTessCallback(tobj, GLU_TESS_END_DATA, (GLUTesselatorFunction)ftglEnd);
gluTessCallback(tobj, GLU_TESS_ERROR_DATA, (GLUTesselatorFunction)ftglError);
if(contourFlag & ft_outline_even_odd_fill) // ft_outline_reverse_fill
{
gluTessProperty(tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD);
}
else
{
gluTessProperty(tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO);
}
gluTessProperty(tobj, GLU_TESS_TOLERANCE, 0);
gluTessNormal(tobj, 0.0f, 0.0f, zNormal);
gluTessBeginPolygon(tobj, mesh);
for(size_t c = 0; c < ContourCount(); ++c)
{
/* Build the */
switch(outsetType)
{
case 1 : contourList[c]->buildFrontOutset(outsetSize); break;
case 2 : contourList[c]->buildBackOutset(outsetSize); break;
}
const FTContour* contour = contourList[c];
gluTessBeginContour(tobj);
for(size_t p = 0; p < contour->PointCount(); ++p)
{
const FTGL_DOUBLE* d;
switch(outsetType)
{
case 1: d = contour->FrontPoint(p); break;
case 2: d = contour->BackPoint(p); break;
case 0: default: d = contour->Point(p); break;
}
// XXX: gluTessVertex doesn't modify the data but does not
// specify "const" in its prototype, so we cannot cast to
// a const type.
gluTessVertex(tobj, (GLdouble *)d, (GLvoid *)d);
}
gluTessEndContour(tobj);
}
gluTessEndPolygon(tobj);
gluDeleteTess(tobj);
}

View file

@ -0,0 +1,313 @@
/*
* FTGL - OpenGL font library
*
* Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
* Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FTVectoriser__
#define __FTVectoriser__
#include "FTGL/ftgl.h"
#include "FTContour.h"
#include "FTList.h"
#include "FTVector.h"
#ifndef CALLBACK
#define CALLBACK
#endif
/**
* FTTesselation captures points that are output by OpenGL's gluTesselator.
*/
class FTTesselation
{
public:
/**
* Default constructor
*/
FTTesselation(GLenum m)
: meshType(m)
{
pointList.reserve(128);
}
/**
* Destructor
*/
~FTTesselation()
{
pointList.clear();
}
/**
* Add a point to the mesh.
*/
void AddPoint(const FTGL_DOUBLE x, const FTGL_DOUBLE y,
const FTGL_DOUBLE z)
{
pointList.push_back(FTPoint(x, y, z));
}
/**
* The number of points in this mesh
*/
size_t PointCount() const { return pointList.size(); }
/**
*
*/
const FTPoint& Point(unsigned int index) const
{ return pointList[index]; }
/**
* Return the OpenGL polygon type.
*/
GLenum PolygonType() const { return meshType; }
private:
/**
* Points generated by gluTesselator.
*/
typedef FTVector<FTPoint> PointVector;
PointVector pointList;
/**
* OpenGL primitive type from gluTesselator.
*/
GLenum meshType;
};
/**
* FTMesh is a container of FTTesselation's that make up a polygon glyph
*/
class FTMesh
{
typedef FTVector<FTTesselation*> TesselationVector;
typedef FTList<FTPoint> PointList;
public:
/**
* Default constructor
*/
FTMesh();
/**
* Destructor
*/
~FTMesh();
/**
* Add a point to the mesh
*/
void AddPoint(const FTGL_DOUBLE x, const FTGL_DOUBLE y,
const FTGL_DOUBLE z);
/**
* Create a combine point for the gluTesselator
*/
const FTGL_DOUBLE* Combine(const FTGL_DOUBLE x, const FTGL_DOUBLE y,
const FTGL_DOUBLE z);
/**
* Begin a new polygon
*/
void Begin(GLenum meshType);
/**
* End a polygon
*/
void End();
/**
* Record a gluTesselation error
*/
void Error(GLenum e) { err = e; }
/**
* The number of tesselations in the mesh
*/
size_t TesselationCount() const { return tesselationList.size(); }
/**
* Get a tesselation by index
*/
const FTTesselation* const Tesselation(size_t index) const;
/**
* Return the temporary point list. For testing only.
*/
const PointList& TempPointList() const { return tempPointList; }
/**
* Get the GL ERROR returned by the glu tesselator
*/
GLenum Error() const { return err; }
private:
/**
* The current sub mesh that we are constructing.
*/
FTTesselation* currentTesselation;
/**
* Holds each sub mesh that comprises this glyph.
*/
TesselationVector tesselationList;
/**
* Holds extra points created by gluTesselator. See ftglCombine.
*/
PointList tempPointList;
/**
* GL ERROR returned by the glu tesselator
*/
GLenum err;
};
const FTGL_DOUBLE FTGL_FRONT_FACING = 1.0;
const FTGL_DOUBLE FTGL_BACK_FACING = -1.0;
/**
* FTVectoriser class is a helper class that converts font outlines into
* point data.
*
* @see FTExtrudeGlyph
* @see FTOutlineGlyph
* @see FTPolygonGlyph
* @see FTContour
* @see FTPoint
*
*/
class FTVectoriser
{
public:
/**
* Constructor
*
* @param glyph The freetype glyph to be processed
*/
FTVectoriser(const FT_GlyphSlot glyph);
/**
* Destructor
*/
virtual ~FTVectoriser();
/**
* Build an FTMesh from the vector outline data.
*
* @param zNormal The direction of the z axis of the normal
* for this mesh
* FIXME: change the following for a constant
* @param outsetType Specify the outset type contour
* 0 : Original
* 1 : Front
* 2 : Back
* @param outsetSize Specify the outset size contour
*/
void MakeMesh(FTGL_DOUBLE zNormal = FTGL_FRONT_FACING, int outsetType = 0, float outsetSize = 0.0f);
/**
* Get the current mesh.
*/
const FTMesh* const GetMesh() const { return mesh; }
/**
* Get the total count of points in this outline
*
* @return the number of points
*/
size_t PointCount();
/**
* Get the count of contours in this outline
*
* @return the number of contours
*/
size_t ContourCount() const { return ftContourCount; }
/**
* Return a contour at index
*
* @return the number of contours
*/
const FTContour* const Contour(size_t index) const;
/**
* Get the number of points in a specific contour in this outline
*
* @param c The contour index
* @return the number of points in contour[c]
*/
size_t ContourSize(int c) const { return contourList[c]->PointCount(); }
/**
* Get the flag for the tesselation rule for this outline
*
* @return The contour flag
*/
int ContourFlag() const { return contourFlag; }
private:
/**
* Process the freetype outline data into contours of points
*
* @param front front outset distance
* @param back back outset distance
*/
void ProcessContours();
/**
* The list of contours in the glyph
*/
FTContour** contourList;
/**
* A Mesh for tesselations
*/
FTMesh* mesh;
/**
* The number of contours reported by Freetype
*/
short ftContourCount;
/**
* A flag indicating the tesselation rule for the glyph
*/
int contourFlag;
/**
* A Freetype outline
*/
FT_Outline outline;
};
#endif // __FTVectoriser__

114
bazaar/FTGL/src/Makefile.am Normal file
View file

@ -0,0 +1,114 @@
lib_LTLIBRARIES = libftgl.la
libftgl_la_SOURCES = \
FTBuffer.cpp \
FTCharmap.cpp \
FTCharmap.h \
FTCharToGlyphIndexMap.h \
FTContour.cpp \
FTContour.h \
FTFace.cpp \
FTFace.h \
FTGlyphContainer.cpp \
FTGlyphContainer.h \
FTInternals.h \
FTLibrary.cpp \
FTLibrary.h \
FTList.h \
FTPoint.cpp \
FTSize.cpp \
FTSize.h \
FTVector.h \
FTVectoriser.cpp \
FTVectoriser.h \
FTUnicode.h \
$(ftglyph_sources) \
$(ftfont_sources) \
$(ftlayout_sources) \
$(ftgl_headers) \
$(NULL)
libftgl_la_CPPFLAGS = -IFTGlyph -IFTFont -IFTLayout
libftgl_la_CXXFLAGS = $(FT2_CFLAGS) $(GL_CFLAGS)
libftgl_la_LDFLAGS = \
-no-undefined -version-number $(LT_VERSION)
libftgl_la_LIBADD = \
$(FT2_LIBS) $(GL_LIBS)
ftgldir = $(includedir)/FTGL
ftgl_HEADERS = $(ftgl_headers)
ftgl_headers = \
FTGL/ftgl.h \
FTGL/FTBBox.h \
FTGL/FTBuffer.h \
FTGL/FTPoint.h \
FTGL/FTGlyph.h \
FTGL/FTBitmapGlyph.h \
FTGL/FTBufferGlyph.h \
FTGL/FTExtrdGlyph.h \
FTGL/FTOutlineGlyph.h \
FTGL/FTPixmapGlyph.h \
FTGL/FTPolyGlyph.h \
FTGL/FTTextureGlyph.h \
FTGL/FTFont.h \
FTGL/FTGLBitmapFont.h \
FTGL/FTBufferFont.h \
FTGL/FTGLExtrdFont.h \
FTGL/FTGLOutlineFont.h \
FTGL/FTGLPixmapFont.h \
FTGL/FTGLPolygonFont.h \
FTGL/FTGLTextureFont.h \
FTGL/FTLayout.h \
FTGL/FTSimpleLayout.h \
${NULL}
ftglyph_sources = \
FTGlyph/FTGlyph.cpp \
FTGlyph/FTGlyphImpl.h \
FTGlyph/FTGlyphGlue.cpp \
FTGlyph/FTBitmapGlyph.cpp \
FTGlyph/FTBitmapGlyphImpl.h \
FTGlyph/FTBufferGlyph.cpp \
FTGlyph/FTBufferGlyphImpl.h \
FTGlyph/FTExtrudeGlyph.cpp \
FTGlyph/FTExtrudeGlyphImpl.h \
FTGlyph/FTOutlineGlyph.cpp \
FTGlyph/FTOutlineGlyphImpl.h \
FTGlyph/FTPixmapGlyph.cpp \
FTGlyph/FTPixmapGlyphImpl.h \
FTGlyph/FTPolygonGlyph.cpp \
FTGlyph/FTPolygonGlyphImpl.h \
FTGlyph/FTTextureGlyph.cpp \
FTGlyph/FTTextureGlyphImpl.h \
$(NULL)
ftfont_sources = \
FTFont/FTFont.cpp \
FTFont/FTFontImpl.h \
FTFont/FTFontGlue.cpp \
FTFont/FTBitmapFont.cpp \
FTFont/FTBitmapFontImpl.h \
FTFont/FTBufferFont.cpp \
FTFont/FTBufferFontImpl.h \
FTFont/FTExtrudeFont.cpp \
FTFont/FTExtrudeFontImpl.h \
FTFont/FTOutlineFont.cpp \
FTFont/FTOutlineFontImpl.h \
FTFont/FTPixmapFont.cpp \
FTFont/FTPixmapFontImpl.h \
FTFont/FTPolygonFont.cpp \
FTFont/FTPolygonFontImpl.h \
FTFont/FTTextureFont.cpp \
FTFont/FTTextureFontImpl.h \
$(NULL)
ftlayout_sources = \
FTLayout/FTLayout.cpp \
FTLayout/FTLayoutImpl.h \
FTLayout/FTLayoutGlue.cpp \
FTLayout/FTSimpleLayout.cpp \
FTLayout/FTSimpleLayoutImpl.h \
$(NULL)
NULL =

895
bazaar/FTGL/src/Makefile.in Normal file
View file

@ -0,0 +1,895 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = src
DIST_COMMON = $(ftgl_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/font.m4 \
$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gl.m4 \
$(top_srcdir)/m4/glut.m4 $(top_srcdir)/m4/pkg.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(ftgldir)"
libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
am__DEPENDENCIES_1 =
libftgl_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am__objects_1 =
am__objects_2 = libftgl_la-FTGlyph.lo libftgl_la-FTGlyphGlue.lo \
libftgl_la-FTBitmapGlyph.lo libftgl_la-FTBufferGlyph.lo \
libftgl_la-FTExtrudeGlyph.lo libftgl_la-FTOutlineGlyph.lo \
libftgl_la-FTPixmapGlyph.lo libftgl_la-FTPolygonGlyph.lo \
libftgl_la-FTTextureGlyph.lo $(am__objects_1)
am__objects_3 = libftgl_la-FTFont.lo libftgl_la-FTFontGlue.lo \
libftgl_la-FTBitmapFont.lo libftgl_la-FTBufferFont.lo \
libftgl_la-FTExtrudeFont.lo libftgl_la-FTOutlineFont.lo \
libftgl_la-FTPixmapFont.lo libftgl_la-FTPolygonFont.lo \
libftgl_la-FTTextureFont.lo $(am__objects_1)
am__objects_4 = libftgl_la-FTLayout.lo libftgl_la-FTLayoutGlue.lo \
libftgl_la-FTSimpleLayout.lo $(am__objects_1)
am__objects_5 = $(am__objects_1)
am_libftgl_la_OBJECTS = libftgl_la-FTBuffer.lo libftgl_la-FTCharmap.lo \
libftgl_la-FTContour.lo libftgl_la-FTFace.lo \
libftgl_la-FTGlyphContainer.lo libftgl_la-FTLibrary.lo \
libftgl_la-FTPoint.lo libftgl_la-FTSize.lo \
libftgl_la-FTVectoriser.lo $(am__objects_2) $(am__objects_3) \
$(am__objects_4) $(am__objects_5) $(am__objects_1)
libftgl_la_OBJECTS = $(am_libftgl_la_OBJECTS)
libftgl_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(libftgl_la_CXXFLAGS) \
$(CXXFLAGS) $(libftgl_la_LDFLAGS) $(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/.auto/depcomp
am__depfiles_maybe = depfiles
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(libftgl_la_SOURCES)
DIST_SOURCES = $(libftgl_la_SOURCES)
ftglHEADERS_INSTALL = $(INSTALL_HEADER)
HEADERS = $(ftgl_HEADERS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONVERT = @CONVERT@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
CPPUNIT_LIBS = @CPPUNIT_LIBS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DOXYGEN = @DOXYGEN@
DSYMUTIL = @DSYMUTIL@
DVIPS = @DVIPS@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EPSTOPDF = @EPSTOPDF@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
FRAMEWORK_OPENGL = @FRAMEWORK_OPENGL@
FT2_CFLAGS = @FT2_CFLAGS@
FT2_CONFIG = @FT2_CONFIG@
FT2_LIBS = @FT2_LIBS@
GLUT_CFLAGS = @GLUT_CFLAGS@
GLUT_LIBS = @GLUT_LIBS@
GL_CFLAGS = @GL_CFLAGS@
GL_LIBS = @GL_LIBS@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
KPSEWHICH = @KPSEWHICH@
LATEX = @LATEX@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_MAJOR = @LT_MAJOR@
LT_MICRO = @LT_MICRO@
LT_MINOR = @LT_MINOR@
LT_VERSION = @LT_VERSION@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
NMEDIT = @NMEDIT@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
XMKMF = @XMKMF@
X_CFLAGS = @X_CFLAGS@
X_EXTRA_LIBS = @X_EXTRA_LIBS@
X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
lib_LTLIBRARIES = libftgl.la
libftgl_la_SOURCES = \
FTBuffer.cpp \
FTCharmap.cpp \
FTCharmap.h \
FTCharToGlyphIndexMap.h \
FTContour.cpp \
FTContour.h \
FTFace.cpp \
FTFace.h \
FTGlyphContainer.cpp \
FTGlyphContainer.h \
FTInternals.h \
FTLibrary.cpp \
FTLibrary.h \
FTList.h \
FTPoint.cpp \
FTSize.cpp \
FTSize.h \
FTVector.h \
FTVectoriser.cpp \
FTVectoriser.h \
FTUnicode.h \
$(ftglyph_sources) \
$(ftfont_sources) \
$(ftlayout_sources) \
$(ftgl_headers) \
$(NULL)
libftgl_la_CPPFLAGS = -IFTGlyph -IFTFont -IFTLayout
libftgl_la_CXXFLAGS = $(FT2_CFLAGS) $(GL_CFLAGS)
libftgl_la_LDFLAGS = \
-no-undefined -version-number $(LT_VERSION)
libftgl_la_LIBADD = \
$(FT2_LIBS) $(GL_LIBS)
ftgldir = $(includedir)/FTGL
ftgl_HEADERS = $(ftgl_headers)
ftgl_headers = \
FTGL/ftgl.h \
FTGL/FTBBox.h \
FTGL/FTBuffer.h \
FTGL/FTPoint.h \
FTGL/FTGlyph.h \
FTGL/FTBitmapGlyph.h \
FTGL/FTBufferGlyph.h \
FTGL/FTExtrdGlyph.h \
FTGL/FTOutlineGlyph.h \
FTGL/FTPixmapGlyph.h \
FTGL/FTPolyGlyph.h \
FTGL/FTTextureGlyph.h \
FTGL/FTFont.h \
FTGL/FTGLBitmapFont.h \
FTGL/FTBufferFont.h \
FTGL/FTGLExtrdFont.h \
FTGL/FTGLOutlineFont.h \
FTGL/FTGLPixmapFont.h \
FTGL/FTGLPolygonFont.h \
FTGL/FTGLTextureFont.h \
FTGL/FTLayout.h \
FTGL/FTSimpleLayout.h \
${NULL}
ftglyph_sources = \
FTGlyph/FTGlyph.cpp \
FTGlyph/FTGlyphImpl.h \
FTGlyph/FTGlyphGlue.cpp \
FTGlyph/FTBitmapGlyph.cpp \
FTGlyph/FTBitmapGlyphImpl.h \
FTGlyph/FTBufferGlyph.cpp \
FTGlyph/FTBufferGlyphImpl.h \
FTGlyph/FTExtrudeGlyph.cpp \
FTGlyph/FTExtrudeGlyphImpl.h \
FTGlyph/FTOutlineGlyph.cpp \
FTGlyph/FTOutlineGlyphImpl.h \
FTGlyph/FTPixmapGlyph.cpp \
FTGlyph/FTPixmapGlyphImpl.h \
FTGlyph/FTPolygonGlyph.cpp \
FTGlyph/FTPolygonGlyphImpl.h \
FTGlyph/FTTextureGlyph.cpp \
FTGlyph/FTTextureGlyphImpl.h \
$(NULL)
ftfont_sources = \
FTFont/FTFont.cpp \
FTFont/FTFontImpl.h \
FTFont/FTFontGlue.cpp \
FTFont/FTBitmapFont.cpp \
FTFont/FTBitmapFontImpl.h \
FTFont/FTBufferFont.cpp \
FTFont/FTBufferFontImpl.h \
FTFont/FTExtrudeFont.cpp \
FTFont/FTExtrudeFontImpl.h \
FTFont/FTOutlineFont.cpp \
FTFont/FTOutlineFontImpl.h \
FTFont/FTPixmapFont.cpp \
FTFont/FTPixmapFontImpl.h \
FTFont/FTPolygonFont.cpp \
FTFont/FTPolygonFontImpl.h \
FTFont/FTTextureFont.cpp \
FTFont/FTTextureFontImpl.h \
$(NULL)
ftlayout_sources = \
FTLayout/FTLayout.cpp \
FTLayout/FTLayoutImpl.h \
FTLayout/FTLayoutGlue.cpp \
FTLayout/FTSimpleLayout.cpp \
FTLayout/FTSimpleLayoutImpl.h \
$(NULL)
NULL =
all: all-am
.SUFFIXES:
.SUFFIXES: .cpp .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu src/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
else :; fi; \
done
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
done
clean-libLTLIBRARIES:
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libftgl.la: $(libftgl_la_OBJECTS) $(libftgl_la_DEPENDENCIES)
$(libftgl_la_LINK) -rpath $(libdir) $(libftgl_la_OBJECTS) $(libftgl_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTBitmapFont.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTBitmapGlyph.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTBuffer.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTBufferFont.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTBufferGlyph.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTCharmap.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTContour.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTExtrudeFont.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTExtrudeGlyph.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTFace.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTFont.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTFontGlue.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTGlyph.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTGlyphContainer.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTGlyphGlue.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTLayout.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTLayoutGlue.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTLibrary.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTOutlineFont.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTOutlineGlyph.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTPixmapFont.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTPixmapGlyph.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTPoint.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTPolygonFont.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTPolygonGlyph.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTSimpleLayout.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTSize.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTTextureFont.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTTextureGlyph.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libftgl_la-FTVectoriser.Plo@am__quote@
.cpp.o:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
.cpp.obj:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.cpp.lo:
@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
libftgl_la-FTBuffer.lo: FTBuffer.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTBuffer.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTBuffer.Tpo -c -o libftgl_la-FTBuffer.lo `test -f 'FTBuffer.cpp' || echo '$(srcdir)/'`FTBuffer.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTBuffer.Tpo $(DEPDIR)/libftgl_la-FTBuffer.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTBuffer.cpp' object='libftgl_la-FTBuffer.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTBuffer.lo `test -f 'FTBuffer.cpp' || echo '$(srcdir)/'`FTBuffer.cpp
libftgl_la-FTCharmap.lo: FTCharmap.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTCharmap.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTCharmap.Tpo -c -o libftgl_la-FTCharmap.lo `test -f 'FTCharmap.cpp' || echo '$(srcdir)/'`FTCharmap.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTCharmap.Tpo $(DEPDIR)/libftgl_la-FTCharmap.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTCharmap.cpp' object='libftgl_la-FTCharmap.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTCharmap.lo `test -f 'FTCharmap.cpp' || echo '$(srcdir)/'`FTCharmap.cpp
libftgl_la-FTContour.lo: FTContour.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTContour.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTContour.Tpo -c -o libftgl_la-FTContour.lo `test -f 'FTContour.cpp' || echo '$(srcdir)/'`FTContour.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTContour.Tpo $(DEPDIR)/libftgl_la-FTContour.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTContour.cpp' object='libftgl_la-FTContour.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTContour.lo `test -f 'FTContour.cpp' || echo '$(srcdir)/'`FTContour.cpp
libftgl_la-FTFace.lo: FTFace.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTFace.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTFace.Tpo -c -o libftgl_la-FTFace.lo `test -f 'FTFace.cpp' || echo '$(srcdir)/'`FTFace.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTFace.Tpo $(DEPDIR)/libftgl_la-FTFace.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTFace.cpp' object='libftgl_la-FTFace.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTFace.lo `test -f 'FTFace.cpp' || echo '$(srcdir)/'`FTFace.cpp
libftgl_la-FTGlyphContainer.lo: FTGlyphContainer.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTGlyphContainer.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTGlyphContainer.Tpo -c -o libftgl_la-FTGlyphContainer.lo `test -f 'FTGlyphContainer.cpp' || echo '$(srcdir)/'`FTGlyphContainer.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTGlyphContainer.Tpo $(DEPDIR)/libftgl_la-FTGlyphContainer.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTGlyphContainer.cpp' object='libftgl_la-FTGlyphContainer.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTGlyphContainer.lo `test -f 'FTGlyphContainer.cpp' || echo '$(srcdir)/'`FTGlyphContainer.cpp
libftgl_la-FTLibrary.lo: FTLibrary.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTLibrary.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTLibrary.Tpo -c -o libftgl_la-FTLibrary.lo `test -f 'FTLibrary.cpp' || echo '$(srcdir)/'`FTLibrary.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTLibrary.Tpo $(DEPDIR)/libftgl_la-FTLibrary.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTLibrary.cpp' object='libftgl_la-FTLibrary.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTLibrary.lo `test -f 'FTLibrary.cpp' || echo '$(srcdir)/'`FTLibrary.cpp
libftgl_la-FTPoint.lo: FTPoint.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTPoint.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTPoint.Tpo -c -o libftgl_la-FTPoint.lo `test -f 'FTPoint.cpp' || echo '$(srcdir)/'`FTPoint.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTPoint.Tpo $(DEPDIR)/libftgl_la-FTPoint.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTPoint.cpp' object='libftgl_la-FTPoint.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTPoint.lo `test -f 'FTPoint.cpp' || echo '$(srcdir)/'`FTPoint.cpp
libftgl_la-FTSize.lo: FTSize.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTSize.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTSize.Tpo -c -o libftgl_la-FTSize.lo `test -f 'FTSize.cpp' || echo '$(srcdir)/'`FTSize.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTSize.Tpo $(DEPDIR)/libftgl_la-FTSize.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTSize.cpp' object='libftgl_la-FTSize.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTSize.lo `test -f 'FTSize.cpp' || echo '$(srcdir)/'`FTSize.cpp
libftgl_la-FTVectoriser.lo: FTVectoriser.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTVectoriser.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTVectoriser.Tpo -c -o libftgl_la-FTVectoriser.lo `test -f 'FTVectoriser.cpp' || echo '$(srcdir)/'`FTVectoriser.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTVectoriser.Tpo $(DEPDIR)/libftgl_la-FTVectoriser.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTVectoriser.cpp' object='libftgl_la-FTVectoriser.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTVectoriser.lo `test -f 'FTVectoriser.cpp' || echo '$(srcdir)/'`FTVectoriser.cpp
libftgl_la-FTGlyph.lo: FTGlyph/FTGlyph.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTGlyph.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTGlyph.Tpo -c -o libftgl_la-FTGlyph.lo `test -f 'FTGlyph/FTGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTGlyph.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTGlyph.Tpo $(DEPDIR)/libftgl_la-FTGlyph.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTGlyph/FTGlyph.cpp' object='libftgl_la-FTGlyph.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTGlyph.lo `test -f 'FTGlyph/FTGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTGlyph.cpp
libftgl_la-FTGlyphGlue.lo: FTGlyph/FTGlyphGlue.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTGlyphGlue.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTGlyphGlue.Tpo -c -o libftgl_la-FTGlyphGlue.lo `test -f 'FTGlyph/FTGlyphGlue.cpp' || echo '$(srcdir)/'`FTGlyph/FTGlyphGlue.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTGlyphGlue.Tpo $(DEPDIR)/libftgl_la-FTGlyphGlue.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTGlyph/FTGlyphGlue.cpp' object='libftgl_la-FTGlyphGlue.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTGlyphGlue.lo `test -f 'FTGlyph/FTGlyphGlue.cpp' || echo '$(srcdir)/'`FTGlyph/FTGlyphGlue.cpp
libftgl_la-FTBitmapGlyph.lo: FTGlyph/FTBitmapGlyph.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTBitmapGlyph.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTBitmapGlyph.Tpo -c -o libftgl_la-FTBitmapGlyph.lo `test -f 'FTGlyph/FTBitmapGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTBitmapGlyph.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTBitmapGlyph.Tpo $(DEPDIR)/libftgl_la-FTBitmapGlyph.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTGlyph/FTBitmapGlyph.cpp' object='libftgl_la-FTBitmapGlyph.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTBitmapGlyph.lo `test -f 'FTGlyph/FTBitmapGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTBitmapGlyph.cpp
libftgl_la-FTBufferGlyph.lo: FTGlyph/FTBufferGlyph.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTBufferGlyph.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTBufferGlyph.Tpo -c -o libftgl_la-FTBufferGlyph.lo `test -f 'FTGlyph/FTBufferGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTBufferGlyph.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTBufferGlyph.Tpo $(DEPDIR)/libftgl_la-FTBufferGlyph.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTGlyph/FTBufferGlyph.cpp' object='libftgl_la-FTBufferGlyph.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTBufferGlyph.lo `test -f 'FTGlyph/FTBufferGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTBufferGlyph.cpp
libftgl_la-FTExtrudeGlyph.lo: FTGlyph/FTExtrudeGlyph.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTExtrudeGlyph.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTExtrudeGlyph.Tpo -c -o libftgl_la-FTExtrudeGlyph.lo `test -f 'FTGlyph/FTExtrudeGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTExtrudeGlyph.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTExtrudeGlyph.Tpo $(DEPDIR)/libftgl_la-FTExtrudeGlyph.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTGlyph/FTExtrudeGlyph.cpp' object='libftgl_la-FTExtrudeGlyph.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTExtrudeGlyph.lo `test -f 'FTGlyph/FTExtrudeGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTExtrudeGlyph.cpp
libftgl_la-FTOutlineGlyph.lo: FTGlyph/FTOutlineGlyph.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTOutlineGlyph.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTOutlineGlyph.Tpo -c -o libftgl_la-FTOutlineGlyph.lo `test -f 'FTGlyph/FTOutlineGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTOutlineGlyph.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTOutlineGlyph.Tpo $(DEPDIR)/libftgl_la-FTOutlineGlyph.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTGlyph/FTOutlineGlyph.cpp' object='libftgl_la-FTOutlineGlyph.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTOutlineGlyph.lo `test -f 'FTGlyph/FTOutlineGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTOutlineGlyph.cpp
libftgl_la-FTPixmapGlyph.lo: FTGlyph/FTPixmapGlyph.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTPixmapGlyph.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTPixmapGlyph.Tpo -c -o libftgl_la-FTPixmapGlyph.lo `test -f 'FTGlyph/FTPixmapGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTPixmapGlyph.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTPixmapGlyph.Tpo $(DEPDIR)/libftgl_la-FTPixmapGlyph.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTGlyph/FTPixmapGlyph.cpp' object='libftgl_la-FTPixmapGlyph.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTPixmapGlyph.lo `test -f 'FTGlyph/FTPixmapGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTPixmapGlyph.cpp
libftgl_la-FTPolygonGlyph.lo: FTGlyph/FTPolygonGlyph.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTPolygonGlyph.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTPolygonGlyph.Tpo -c -o libftgl_la-FTPolygonGlyph.lo `test -f 'FTGlyph/FTPolygonGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTPolygonGlyph.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTPolygonGlyph.Tpo $(DEPDIR)/libftgl_la-FTPolygonGlyph.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTGlyph/FTPolygonGlyph.cpp' object='libftgl_la-FTPolygonGlyph.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTPolygonGlyph.lo `test -f 'FTGlyph/FTPolygonGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTPolygonGlyph.cpp
libftgl_la-FTTextureGlyph.lo: FTGlyph/FTTextureGlyph.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTTextureGlyph.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTTextureGlyph.Tpo -c -o libftgl_la-FTTextureGlyph.lo `test -f 'FTGlyph/FTTextureGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTTextureGlyph.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTTextureGlyph.Tpo $(DEPDIR)/libftgl_la-FTTextureGlyph.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTGlyph/FTTextureGlyph.cpp' object='libftgl_la-FTTextureGlyph.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTTextureGlyph.lo `test -f 'FTGlyph/FTTextureGlyph.cpp' || echo '$(srcdir)/'`FTGlyph/FTTextureGlyph.cpp
libftgl_la-FTFont.lo: FTFont/FTFont.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTFont.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTFont.Tpo -c -o libftgl_la-FTFont.lo `test -f 'FTFont/FTFont.cpp' || echo '$(srcdir)/'`FTFont/FTFont.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTFont.Tpo $(DEPDIR)/libftgl_la-FTFont.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTFont/FTFont.cpp' object='libftgl_la-FTFont.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTFont.lo `test -f 'FTFont/FTFont.cpp' || echo '$(srcdir)/'`FTFont/FTFont.cpp
libftgl_la-FTFontGlue.lo: FTFont/FTFontGlue.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTFontGlue.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTFontGlue.Tpo -c -o libftgl_la-FTFontGlue.lo `test -f 'FTFont/FTFontGlue.cpp' || echo '$(srcdir)/'`FTFont/FTFontGlue.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTFontGlue.Tpo $(DEPDIR)/libftgl_la-FTFontGlue.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTFont/FTFontGlue.cpp' object='libftgl_la-FTFontGlue.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTFontGlue.lo `test -f 'FTFont/FTFontGlue.cpp' || echo '$(srcdir)/'`FTFont/FTFontGlue.cpp
libftgl_la-FTBitmapFont.lo: FTFont/FTBitmapFont.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTBitmapFont.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTBitmapFont.Tpo -c -o libftgl_la-FTBitmapFont.lo `test -f 'FTFont/FTBitmapFont.cpp' || echo '$(srcdir)/'`FTFont/FTBitmapFont.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTBitmapFont.Tpo $(DEPDIR)/libftgl_la-FTBitmapFont.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTFont/FTBitmapFont.cpp' object='libftgl_la-FTBitmapFont.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTBitmapFont.lo `test -f 'FTFont/FTBitmapFont.cpp' || echo '$(srcdir)/'`FTFont/FTBitmapFont.cpp
libftgl_la-FTBufferFont.lo: FTFont/FTBufferFont.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTBufferFont.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTBufferFont.Tpo -c -o libftgl_la-FTBufferFont.lo `test -f 'FTFont/FTBufferFont.cpp' || echo '$(srcdir)/'`FTFont/FTBufferFont.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTBufferFont.Tpo $(DEPDIR)/libftgl_la-FTBufferFont.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTFont/FTBufferFont.cpp' object='libftgl_la-FTBufferFont.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTBufferFont.lo `test -f 'FTFont/FTBufferFont.cpp' || echo '$(srcdir)/'`FTFont/FTBufferFont.cpp
libftgl_la-FTExtrudeFont.lo: FTFont/FTExtrudeFont.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTExtrudeFont.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTExtrudeFont.Tpo -c -o libftgl_la-FTExtrudeFont.lo `test -f 'FTFont/FTExtrudeFont.cpp' || echo '$(srcdir)/'`FTFont/FTExtrudeFont.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTExtrudeFont.Tpo $(DEPDIR)/libftgl_la-FTExtrudeFont.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTFont/FTExtrudeFont.cpp' object='libftgl_la-FTExtrudeFont.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTExtrudeFont.lo `test -f 'FTFont/FTExtrudeFont.cpp' || echo '$(srcdir)/'`FTFont/FTExtrudeFont.cpp
libftgl_la-FTOutlineFont.lo: FTFont/FTOutlineFont.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTOutlineFont.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTOutlineFont.Tpo -c -o libftgl_la-FTOutlineFont.lo `test -f 'FTFont/FTOutlineFont.cpp' || echo '$(srcdir)/'`FTFont/FTOutlineFont.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTOutlineFont.Tpo $(DEPDIR)/libftgl_la-FTOutlineFont.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTFont/FTOutlineFont.cpp' object='libftgl_la-FTOutlineFont.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTOutlineFont.lo `test -f 'FTFont/FTOutlineFont.cpp' || echo '$(srcdir)/'`FTFont/FTOutlineFont.cpp
libftgl_la-FTPixmapFont.lo: FTFont/FTPixmapFont.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTPixmapFont.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTPixmapFont.Tpo -c -o libftgl_la-FTPixmapFont.lo `test -f 'FTFont/FTPixmapFont.cpp' || echo '$(srcdir)/'`FTFont/FTPixmapFont.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTPixmapFont.Tpo $(DEPDIR)/libftgl_la-FTPixmapFont.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTFont/FTPixmapFont.cpp' object='libftgl_la-FTPixmapFont.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTPixmapFont.lo `test -f 'FTFont/FTPixmapFont.cpp' || echo '$(srcdir)/'`FTFont/FTPixmapFont.cpp
libftgl_la-FTPolygonFont.lo: FTFont/FTPolygonFont.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTPolygonFont.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTPolygonFont.Tpo -c -o libftgl_la-FTPolygonFont.lo `test -f 'FTFont/FTPolygonFont.cpp' || echo '$(srcdir)/'`FTFont/FTPolygonFont.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTPolygonFont.Tpo $(DEPDIR)/libftgl_la-FTPolygonFont.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTFont/FTPolygonFont.cpp' object='libftgl_la-FTPolygonFont.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTPolygonFont.lo `test -f 'FTFont/FTPolygonFont.cpp' || echo '$(srcdir)/'`FTFont/FTPolygonFont.cpp
libftgl_la-FTTextureFont.lo: FTFont/FTTextureFont.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTTextureFont.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTTextureFont.Tpo -c -o libftgl_la-FTTextureFont.lo `test -f 'FTFont/FTTextureFont.cpp' || echo '$(srcdir)/'`FTFont/FTTextureFont.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTTextureFont.Tpo $(DEPDIR)/libftgl_la-FTTextureFont.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTFont/FTTextureFont.cpp' object='libftgl_la-FTTextureFont.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTTextureFont.lo `test -f 'FTFont/FTTextureFont.cpp' || echo '$(srcdir)/'`FTFont/FTTextureFont.cpp
libftgl_la-FTLayout.lo: FTLayout/FTLayout.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTLayout.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTLayout.Tpo -c -o libftgl_la-FTLayout.lo `test -f 'FTLayout/FTLayout.cpp' || echo '$(srcdir)/'`FTLayout/FTLayout.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTLayout.Tpo $(DEPDIR)/libftgl_la-FTLayout.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTLayout/FTLayout.cpp' object='libftgl_la-FTLayout.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTLayout.lo `test -f 'FTLayout/FTLayout.cpp' || echo '$(srcdir)/'`FTLayout/FTLayout.cpp
libftgl_la-FTLayoutGlue.lo: FTLayout/FTLayoutGlue.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTLayoutGlue.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTLayoutGlue.Tpo -c -o libftgl_la-FTLayoutGlue.lo `test -f 'FTLayout/FTLayoutGlue.cpp' || echo '$(srcdir)/'`FTLayout/FTLayoutGlue.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTLayoutGlue.Tpo $(DEPDIR)/libftgl_la-FTLayoutGlue.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTLayout/FTLayoutGlue.cpp' object='libftgl_la-FTLayoutGlue.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTLayoutGlue.lo `test -f 'FTLayout/FTLayoutGlue.cpp' || echo '$(srcdir)/'`FTLayout/FTLayoutGlue.cpp
libftgl_la-FTSimpleLayout.lo: FTLayout/FTSimpleLayout.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -MT libftgl_la-FTSimpleLayout.lo -MD -MP -MF $(DEPDIR)/libftgl_la-FTSimpleLayout.Tpo -c -o libftgl_la-FTSimpleLayout.lo `test -f 'FTLayout/FTSimpleLayout.cpp' || echo '$(srcdir)/'`FTLayout/FTSimpleLayout.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libftgl_la-FTSimpleLayout.Tpo $(DEPDIR)/libftgl_la-FTSimpleLayout.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FTLayout/FTSimpleLayout.cpp' object='libftgl_la-FTSimpleLayout.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libftgl_la_CPPFLAGS) $(CPPFLAGS) $(libftgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libftgl_la-FTSimpleLayout.lo `test -f 'FTLayout/FTSimpleLayout.cpp' || echo '$(srcdir)/'`FTLayout/FTSimpleLayout.cpp
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
install-ftglHEADERS: $(ftgl_HEADERS)
@$(NORMAL_INSTALL)
test -z "$(ftgldir)" || $(MKDIR_P) "$(DESTDIR)$(ftgldir)"
@list='$(ftgl_HEADERS)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \
echo " $(ftglHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(ftgldir)/$$f'"; \
$(ftglHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(ftgldir)/$$f"; \
done
uninstall-ftglHEADERS:
@$(NORMAL_UNINSTALL)
@list='$(ftgl_HEADERS)'; for p in $$list; do \
f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(ftgldir)/$$f'"; \
rm -f "$(DESTDIR)$(ftgldir)/$$f"; \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES) $(HEADERS)
installdirs:
for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(ftgldir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am: install-ftglHEADERS
install-dvi: install-dvi-am
install-exec-am: install-libLTLIBRARIES
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-ftglHEADERS uninstall-libLTLIBRARIES
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libLTLIBRARIES clean-libtool ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am \
install-ftglHEADERS install-html install-html-am install-info \
install-info-am install-libLTLIBRARIES install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-ftglHEADERS \
uninstall-libLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

5
bazaar/FTGL/src/config.h Normal file
View file

@ -0,0 +1,5 @@
#ifndef _FTGL_config_h_
#define _FTGL_config_h_
#endif