/**
 * Free everything allocated w.r.t. fonts.
 */
void UninitFreeType()
{
	ResetFontSizes();
	ResetGlyphCache();

	UnloadFace(&_face_small);
	UnloadFace(&_face_medium);
	UnloadFace(&_face_large);

	FT_Done_FreeType(_library);
	_library = NULL;
}
/**
 * Free everything allocated w.r.t. fonts.
 */
void UninitFreeType()
{
	ResetGlyphCache(true);
	ResetGlyphCache(false);

	UnloadFace(&_face_small);
	UnloadFace(&_face_medium);
	UnloadFace(&_face_large);
	UnloadFace(&_face_mono);

	FT_Done_FreeType(_library);
	_library = NULL;
}
/**
 * (Re)initialize the freetype related things, i.e. load the non-sprite fonts.
 * @param monospace Whether to initialise the monospace or regular fonts.
 */
void InitFreeType(bool monospace)
{
	ResetFontSizes(monospace);
	ResetGlyphCache(monospace);

	if (monospace) {
		UnloadFace(&_face_mono);
	} else {
		UnloadFace(&_face_small);
		UnloadFace(&_face_medium);
		UnloadFace(&_face_large);
	}

	if (StrEmpty(_freetype.small_font) && StrEmpty(_freetype.medium_font) && StrEmpty(_freetype.large_font) && StrEmpty(_freetype.mono_font)) {
		DEBUG(freetype, 1, "No font faces specified, using sprite fonts instead");
		return;
	}

	if (_library == NULL) {
		if (FT_Init_FreeType(&_library) != FT_Err_Ok) {
			ShowInfoF("Unable to initialize FreeType, using sprite fonts instead");
			return;
		}

		DEBUG(freetype, 2, "Initialized");
	}

	/* Load each font */
	if (monospace) {
		LoadFreeTypeFont(_freetype.mono_font ,  &_face_mono,   "mono");

		if (_face_mono != NULL) {
			SetFontGeometry(_face_mono, FS_MONO, _freetype.mono_size);
		}
	} else {
		LoadFreeTypeFont(_freetype.small_font,  &_face_small,  "small");
		LoadFreeTypeFont(_freetype.medium_font, &_face_medium, "medium");
		LoadFreeTypeFont(_freetype.large_font,  &_face_large,  "large");

		/* Set each font size */
		if (_face_small != NULL) {
			SetFontGeometry(_face_small, FS_SMALL, _freetype.small_size);
		}
		if (_face_medium != NULL) {
			SetFontGeometry(_face_medium, FS_NORMAL, _freetype.medium_size);
		}
		if (_face_large != NULL) {
			SetFontGeometry(_face_large, FS_LARGE, _freetype.large_size);
		}
	}
}