From 7caf2e64b6aa40c28367e736592c44976e58170f Mon Sep 17 00:00:00 2001 From: Laurent Gomila Date: Fri, 9 Aug 2013 16:02:53 +0200 Subject: [PATCH] Added Font::getInfo to retrieve various information about the font (for now, only the family name) (#164) --- include/SFML/Graphics/Font.hpp | 22 +++++++++++++++++++++- src/SFML/Graphics/Font.cpp | 22 ++++++++++++++++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/include/SFML/Graphics/Font.hpp b/include/SFML/Graphics/Font.hpp index d3b1955ee..8bbfcb142 100644 --- a/include/SFML/Graphics/Font.hpp +++ b/include/SFML/Graphics/Font.hpp @@ -49,6 +49,17 @@ class InputStream; //////////////////////////////////////////////////////////// class SFML_GRAPHICS_API Font { +public : + + //////////////////////////////////////////////////////////// + /// \brief Holds various information about a font + /// + //////////////////////////////////////////////////////////// + struct Info + { + std::string family; ///< The font family + }; + public : //////////////////////////////////////////////////////////// @@ -130,6 +141,14 @@ public : //////////////////////////////////////////////////////////// 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 /// @@ -283,7 +302,8 @@ private : 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) 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 m_pixelBuffer; ///< Pixel buffer holding a glyph's pixels before being written to the texture }; diff --git a/src/SFML/Graphics/Font.cpp b/src/SFML/Graphics/Font.cpp index 8afe57e73..4b6bd2ca4 100644 --- a/src/SFML/Graphics/Font.cpp +++ b/src/SFML/Graphics/Font.cpp @@ -67,7 +67,8 @@ Font::Font() : m_library (NULL), m_face (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_streamRec (copy.m_streamRec), m_refCount (copy.m_refCount), +m_info (copy.m_info), m_pages (copy.m_pages), m_pixelBuffer(copy.m_pixelBuffer) { @@ -123,7 +125,7 @@ bool Font::loadFromFile(const std::string& filename) return false; } - // Select the unicode character map + // Select the unicode character map if (FT_Select_Charmap(face, FT_ENCODING_UNICODE) != 0) { 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* :) m_face = face; + // Store the font information + m_info.family = face->family_name ? face->family_name : std::string(); + return true; } @@ -173,6 +178,9 @@ bool Font::loadFromMemory(const void* data, std::size_t sizeInBytes) // Store the loaded font in our ugly void* :) m_face = face; + // Store the font information + m_info.family = face->family_name ? face->family_name : std::string(); + return true; } @@ -233,10 +241,20 @@ bool Font::loadFromStream(InputStream& stream) m_face = face; m_streamRec = rec; + // Store the font information + m_info.family = face->family_name ? face->family_name : std::string(); + return true; } +//////////////////////////////////////////////////////////// +const Font::Info& Font::getInfo() const +{ + return m_info; +} + + //////////////////////////////////////////////////////////// const Glyph& Font::getGlyph(Uint32 codePoint, unsigned int characterSize, bool bold) const {