libhydride/ftgl/font-manager.h
2017-11-09 22:54:55 +03:00

182 lines
3.8 KiB
C++

/* 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.
*
* <b>Example Usage</b>:
* @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__ */