libglez/ftgl/font-manager.h
2017-12-07 17:07:55 +03:00

163 lines
3.7 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__ */