You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
3.5 KiB
151 lines
3.5 KiB
#ifndef FONT_FILE_DEFINED
|
|
#define FONT_FILE_DEFINED
|
|
|
|
|
|
class GpFontTable;
|
|
|
|
class CacheFaceRealization;
|
|
|
|
class GpFontFile
|
|
{
|
|
|
|
public:
|
|
GpFontFile() : Next(NULL), Prev(NULL), FamilyName(NULL) {}
|
|
~GpFontFile() {}
|
|
|
|
public:
|
|
GpFontFile* GetNext(void) const
|
|
{
|
|
return Next;
|
|
}
|
|
|
|
GpFontFile* GetPrev(void) const
|
|
{
|
|
return Prev;
|
|
}
|
|
|
|
void SetNext(GpFontFile* ff)
|
|
{
|
|
Next = ff;
|
|
}
|
|
|
|
void SetPrev(GpFontFile* ff)
|
|
{
|
|
Prev = ff;
|
|
}
|
|
|
|
void AllocateNameHolders(WCHAR** hFamilyName, int numFonts)
|
|
{
|
|
FamilyName = hFamilyName;
|
|
// Initialize each name to NULL
|
|
for (INT n = 0; n < numFonts; n++)
|
|
{
|
|
FamilyName[n] = NULL;
|
|
}
|
|
}
|
|
|
|
const WCHAR* GetFamilyName(int i) const
|
|
{
|
|
return FamilyName[i];
|
|
}
|
|
|
|
void SetFamilyName(int i, WCHAR* name)
|
|
{
|
|
FamilyName[i] = name;
|
|
}
|
|
|
|
const WCHAR* GetPathName(void) const
|
|
{
|
|
return pwszPathname_;
|
|
}
|
|
|
|
const UINT GetPathNameSize(void) const
|
|
{
|
|
return cwc;
|
|
}
|
|
|
|
void SetPathName(WCHAR* name)
|
|
{
|
|
pwszPathname_ = name;
|
|
}
|
|
|
|
BOOL operator== (GpFontFile const& ff) const
|
|
{
|
|
if (this == &ff)
|
|
return TRUE;
|
|
|
|
return (wcscmp(pwszPathname_, ff.pwszPathname_) == 0);
|
|
}
|
|
|
|
ULONG GetNumEntries(void) const
|
|
{
|
|
return cFonts;
|
|
}
|
|
|
|
GpFontFace* GetFontFace(ULONG iFont)
|
|
{
|
|
return( &(((GpFontFace*)(&aulData))[iFont]) );
|
|
}
|
|
|
|
FONTFILEVIEW * GetFileView() const
|
|
{
|
|
return pfv;
|
|
}
|
|
|
|
// Data members
|
|
public:
|
|
ULONG SizeOfThis;
|
|
|
|
private:
|
|
|
|
// Connects GpFontFile's sharing the same hash bucket
|
|
|
|
GpFontFile* Next;
|
|
GpFontFile* Prev;
|
|
|
|
WCHAR** FamilyName; // Array of family name in this font file
|
|
|
|
public:
|
|
|
|
// pwszPathname_ points to the Unicode upper case path
|
|
// name of the associated font file which is stored at the
|
|
// end of the data structure.
|
|
|
|
WCHAR * pwszPathname_;
|
|
ULONG cwc; // total for all strings
|
|
|
|
// state
|
|
|
|
FLONG flState; // state (ready to die?)
|
|
ULONG cLoaded; // load count
|
|
ULONG cRealizedFace; // total number of RealizedFaces
|
|
ULONG bRemoved; // TRUE if the font file has been removed
|
|
// (RemoveFontFile() )
|
|
|
|
// CacheFaceRealization list
|
|
|
|
CacheFaceRealization *prfaceList; // pointer to head of doubly linked list
|
|
|
|
// driver information
|
|
|
|
ULONG_PTR hff; // font driver handle to font file, RETURNED by DrvLoadGpFontFile
|
|
|
|
// fonts in this file (and filename slimed in)
|
|
|
|
ULONG cFonts; // number of fonts (same as chpfe)
|
|
|
|
FONTFILEVIEW *pfv; // address of FILEVIEW structure, passed to DrvLoadFontFile
|
|
|
|
ULONG_PTR aulData[1]; // data buffer for HFontEntry and filename
|
|
};
|
|
|
|
|
|
|
|
GpFontFile *LoadFontInternal(WCHAR *pwszName, ULONG cwc, FONTFILEVIEW *pffv, BOOL bMem);
|
|
GpFontFile *LoadFontFile(WCHAR * pwszFontFileName);
|
|
GpFontFile *LoadFontMemImage(WCHAR* fontImageName, BYTE* fontMemoryImage, INT fontImageSize);
|
|
VOID UnloadFontFile(GpFontFile *pFontFile);
|
|
|
|
BOOL MakePathName(WCHAR *dst, WCHAR *src);
|
|
|
|
#endif
|