63 lines
1,019 B
C
63 lines
1,019 B
C
|
/* _KERN.H
|
||
|
*
|
||
|
* Purpose:
|
||
|
* Latin pair-kerning cache.
|
||
|
*
|
||
|
* Authors:
|
||
|
* Keith Curtis
|
||
|
*
|
||
|
* Copyright (c) 1995-2000, Microsoft Corporation. All rights reserved.
|
||
|
*/
|
||
|
|
||
|
#include "_array.h"
|
||
|
|
||
|
struct KPE
|
||
|
{
|
||
|
WCHAR chFirst;
|
||
|
WCHAR chSecond;
|
||
|
|
||
|
short du;
|
||
|
};
|
||
|
|
||
|
typedef unsigned int KERNHASHKEY;
|
||
|
|
||
|
enum KernCacheInitState
|
||
|
{
|
||
|
Unitialized, //Don't know if there are kerning pairs
|
||
|
Initialized, //There are kerning pairs
|
||
|
NoKerningPairs //No kerning pairs found
|
||
|
};
|
||
|
|
||
|
class CKernCache
|
||
|
{
|
||
|
public:
|
||
|
CKernCache::CKernCache()
|
||
|
{
|
||
|
_kcis = Unitialized;
|
||
|
}
|
||
|
BOOL FInit(HFONT hfont);
|
||
|
|
||
|
void Free(void)
|
||
|
{
|
||
|
_pmpkpe.Clear(AF_DELETEMEM);
|
||
|
}
|
||
|
|
||
|
void Add(WCHAR chFirst, WCHAR chSecond, LONG du);
|
||
|
LONG FetchDup(WCHAR chFirst, WCHAR chSecond, long dvpFont);
|
||
|
|
||
|
private:
|
||
|
void Init(HFONT hfont);
|
||
|
inline int Hash(KERNHASHKEY kernhashkey)
|
||
|
{
|
||
|
return kernhashkey % _pmpkpe.Count();
|
||
|
}
|
||
|
static inline KERNHASHKEY MakeHashKey(WCHAR chFirst, WCHAR chSecond)
|
||
|
{
|
||
|
return chFirst | (chSecond << 16);
|
||
|
}
|
||
|
|
||
|
CArray<KPE> _pmpkpe;
|
||
|
KernCacheInitState _kcis;
|
||
|
};
|
||
|
|