Added Font::getInfo to retrieve various information about the font (for now, only the family name) (#164)

This commit is contained in:
Laurent Gomila 2013-08-09 16:02:53 +02:00
parent 6d4c844959
commit 7caf2e64b6
2 changed files with 41 additions and 3 deletions

View File

@ -49,6 +49,17 @@ class InputStream;
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
class SFML_GRAPHICS_API Font class SFML_GRAPHICS_API Font
{ {
public :
////////////////////////////////////////////////////////////
/// \brief Holds various information about a font
///
////////////////////////////////////////////////////////////
struct Info
{
std::string family; ///< The font family
};
public : public :
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
@ -130,6 +141,14 @@ public :
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
bool loadFromStream(InputStream& stream); bool loadFromStream(InputStream& stream);
////////////////////////////////////////////////////////////
/// \brief Get the font information
///
/// \return A structure that holds the font information
///
////////////////////////////////////////////////////////////
const Info& getInfo() const;
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
/// \brief Retrieve a glyph of the font /// \brief Retrieve a glyph of the font
/// ///
@ -283,7 +302,8 @@ private :
void* m_face; ///< Pointer to the internal font face (it is typeless to avoid exposing implementation details) void* m_face; ///< Pointer to the internal font face (it is typeless to avoid exposing implementation details)
void* m_streamRec; ///< Pointer to the stream rec instance (it is typeless to avoid exposing implementation details) void* m_streamRec; ///< Pointer to the stream rec instance (it is typeless to avoid exposing implementation details)
int* m_refCount; ///< Reference counter used by implicit sharing int* m_refCount; ///< Reference counter used by implicit sharing
mutable PageTable m_pages; ///< Table containing the glyphs pages by character size Info m_info; ///< Information about the font
mutable PageTable m_pages; ///< Table containing the glyphs pages by character size
mutable std::vector<Uint8> m_pixelBuffer; ///< Pixel buffer holding a glyph's pixels before being written to the texture mutable std::vector<Uint8> m_pixelBuffer; ///< Pixel buffer holding a glyph's pixels before being written to the texture
}; };

View File

@ -67,7 +67,8 @@ Font::Font() :
m_library (NULL), m_library (NULL),
m_face (NULL), m_face (NULL),
m_streamRec(NULL), m_streamRec(NULL),
m_refCount (NULL) m_refCount (NULL),
m_info ()
{ {
} }
@ -79,6 +80,7 @@ m_library (copy.m_library),
m_face (copy.m_face), m_face (copy.m_face),
m_streamRec (copy.m_streamRec), m_streamRec (copy.m_streamRec),
m_refCount (copy.m_refCount), m_refCount (copy.m_refCount),
m_info (copy.m_info),
m_pages (copy.m_pages), m_pages (copy.m_pages),
m_pixelBuffer(copy.m_pixelBuffer) m_pixelBuffer(copy.m_pixelBuffer)
{ {
@ -123,7 +125,7 @@ bool Font::loadFromFile(const std::string& filename)
return false; return false;
} }
// Select the unicode character map // Select the unicode character map
if (FT_Select_Charmap(face, FT_ENCODING_UNICODE) != 0) if (FT_Select_Charmap(face, FT_ENCODING_UNICODE) != 0)
{ {
err() << "Failed to load font \"" << filename << "\" (failed to set the Unicode character set)" << std::endl; err() << "Failed to load font \"" << filename << "\" (failed to set the Unicode character set)" << std::endl;
@ -133,6 +135,9 @@ bool Font::loadFromFile(const std::string& filename)
// Store the loaded font in our ugly void* :) // Store the loaded font in our ugly void* :)
m_face = face; m_face = face;
// Store the font information
m_info.family = face->family_name ? face->family_name : std::string();
return true; return true;
} }
@ -173,6 +178,9 @@ bool Font::loadFromMemory(const void* data, std::size_t sizeInBytes)
// Store the loaded font in our ugly void* :) // Store the loaded font in our ugly void* :)
m_face = face; m_face = face;
// Store the font information
m_info.family = face->family_name ? face->family_name : std::string();
return true; return true;
} }
@ -233,10 +241,20 @@ bool Font::loadFromStream(InputStream& stream)
m_face = face; m_face = face;
m_streamRec = rec; m_streamRec = rec;
// Store the font information
m_info.family = face->family_name ? face->family_name : std::string();
return true; return true;
} }
////////////////////////////////////////////////////////////
const Font::Info& Font::getInfo() const
{
return m_info;
}
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
const Glyph& Font::getGlyph(Uint32 codePoint, unsigned int characterSize, bool bold) const const Glyph& Font::getGlyph(Uint32 codePoint, unsigned int characterSize, bool bold) const
{ {