Files
FC1/CryFont/GlyphCache.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

117 lines
2.4 KiB
C++

//-------------------------------------------------------------------------------------------------
// Author: Márcio Martins
//
// Purpose:
// - Manage and cache glyphs, retrieving them from the renderer as needed
//
// History:
// - [6/6/2003] created the file
//
//-------------------------------------------------------------------------------------------------
#pragma once
#ifdef WIN64
// Workaround for Amd64 compiler
#include <map>
#define hash_map map
#else
#if defined(LINUX)
#include <ext/hash_map>
#else
#include <hash_map>
#endif
#endif
#include <vector>
#include "GlyphBitmap.h"
#include "FontRenderer.h"
typedef struct CCacheSlot
{
unsigned int dwUsage;
int iCacheSlot;
wchar_t cCurrentChar;
int iCharWidth;
int iCharHeight;
CGlyphBitmap pGlyphBitmap;
void Reset()
{
dwUsage = 0;
cCurrentChar = -1;
iCharWidth = 0;
iCharHeight = 0;
pGlyphBitmap.Clear();
}
} CCacheSlot;
typedef std::hash_map<wchar_t, CCacheSlot *> CCacheTable;
typedef std::hash_map<wchar_t, CCacheSlot *>::iterator CCacheTableItor;
typedef std::vector<CCacheSlot *> CCacheSlotList;
typedef std::vector<CCacheSlot *>::iterator CCacheSlotListItor;
#ifdef WIN64
#undef GetCharWidth
#undef GetCharHeight
#endif
class CGlyphCache
{
public:
CGlyphCache();
~CGlyphCache();
int Create(int iChacheSize, int iGlyphBitmapWidth, int iGlyphBitmapHeight, int iSmoothMethod, int iSmoothAmount, float fSizeRatio = 0.8f);
int Release();
int LoadFontFromFile(const string &szFileName);
int LoadFontFromMemory(unsigned char *pFileBuffer, int iDataSize);
int ReleaseFont();
int SetEncoding(FT_Encoding pEncoding) { return m_pFontRenderer.SetEncoding(pEncoding); };
FT_Encoding GetEncoding() { return m_pFontRenderer.GetEncoding(); };
int GetGlyphBitmapSize(int *pWidth, int *pHeight);
int PreCacheGlyph(wchar_t cChar);
int UnCacheGlyph(wchar_t cChar);
int GlyphCached(wchar_t cChar);
CCacheSlot *GetLRUSlot();
CCacheSlot *GetMRUSlot();
int GetGlyph(CGlyphBitmap **pGlyph, int *piWidth, int *piHeight, wchar_t cChar);
private:
int CreateSlotList(int iListSize);
int ReleaseSlotList();
CCacheSlotList m_pSlotList;
CCacheTable m_pCacheTable;
int m_iGlyphBitmapWidth;
int m_iGlyphBitmapHeight;
float m_fSizeRatio;
int m_iSmoothMethod;
int m_iSmoothAmount;
CGlyphBitmap *m_pScaleBitmap;
CFontRenderer m_pFontRenderer;
unsigned int m_dwUsage;
};