/* Freetype GL - A C OpenGL Freetype engine * * Distributed under the OSI-approved BSD 2-Clause License. See accompanying * file `LICENSE` for more details. */ #ifndef __FONT_MANAGER_H__ #define __FONT_MANAGER_H__ #ifdef __cplusplus extern "C" { #endif #include "vector.h" #include "markup.h" #include "texture-font.h" #include "texture-atlas.h" #ifdef __cplusplus namespace ftgl { #endif /** * @file font-manager.h * @author Nicolas Rougier (Nicolas.Rougier@inria.fr) * * @defgroup font-manager Font manager * * Structure in charge of caching fonts. * * Example Usage: * @code * #include "font-manager.h" * * int main( int arrgc, char *argv[] ) * { * font_manager_t * manager = manager_new( 512, 512, 1 ); * texture_font_t * font = font_manager_get( manager, "Mono", 12, 0, 0 ); * * return 0; * } * @endcode * * @{ */ /** * Structure in charge of caching fonts. */ typedef struct font_manager_t { /** * Texture atlas to hold font glyphs. */ texture_atlas_t * atlas; /** * Cached textures. */ vector_t * fonts; /** * Default glyphs to be loaded when loading a new font. */ char * cache; } font_manager_t; /** * Creates a new empty font manager. * * @param width width of the underlying atlas * @param height height of the underlying atlas * @param depth bit depth of the underlying atlas * * @return a new font manager. * */ font_manager_t * font_manager_new( size_t width, size_t height, size_t depth ); /** * Deletes a font manager. * * @param self a font manager. */ void font_manager_delete( font_manager_t *self ); /** * Deletes a font from the font manager. * * Note that font glyphs are not removed from the atlas. * * @param self a font manager. * @param font font to be deleted * */ void font_manager_delete_font( font_manager_t * self, texture_font_t * font ); /** * Request for a font based on a filename. * * @param self a font manager. * @param filename font filename * @param size font size * * @return Requested font */ texture_font_t * font_manager_get_from_filename( font_manager_t * self, const char * filename, const float size ); /** * Request for a font based on a description * * @param self a font manager * @param family font family * @param size font size * @param bold whether font is bold * @param italic whether font is italic * * @return Requested font */ texture_font_t * font_manager_get_from_description( font_manager_t * self, const char * family, const float size, const int bold, const int italic ); /** * Request for a font based on a markup * * @param self a font manager * @param markup Markup describing a font * * @return Requested font */ texture_font_t * font_manager_get_from_markup( font_manager_t *self, const markup_t *markup ); /** * Search for a font filename that match description. * * @param self a font manager * @param family font family * @param size font size * @param bold whether font is bold * @param italic whether font is italic * * @return Requested font filename */ char * font_manager_match_description( font_manager_t * self, const char * family, const float size, const int bold, const int italic ); /** @} */ #ifdef __cplusplus } } #endif // ifdef __cplusplus #endif /* __FONT_MANAGER_H__ */