123
This commit is contained in:
117
CryFont/GlyphCache.h
Normal file
117
CryFont/GlyphCache.h
Normal file
@@ -0,0 +1,117 @@
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
// 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;
|
||||
};
|
||||
Reference in New Issue
Block a user