Files
core/ASCOfficePDFReader/SFont.h

95 lines
3.3 KiB
C++

#ifndef _SFONT_H
#define _SFONT_H
#include "STypes.h"
struct SGlyphBitmap;
struct SFontCacheTag;
class SFontFile;
class SPath;
//-------------------------------------------------------------------------------------------------------------------------------
#define sfontFractionBits 2
#define sfontFraction (1 << sfontFractionBits)
#define sfontFractionMul ((double)1 / (double)sfontFraction)
//-------------------------------------------------------------------------------------------------------------------------------
// SFont
//-------------------------------------------------------------------------------------------------------------------------------
class SFont
{
public:
SFont(SFontFile *pFontFile, double *pFontMatrix, double *pTextMatrix, BOOL bAntiAliasing);
// Ôóíêöèþ íàäî âûçûâàòüï îñëå êîíñòðóêòîðà, ÷òîáû ó êîíñòðóêòîð ïîäêëàññà ìîã âû÷èñëèòü BBox.
void InitCache();
virtual ~SFont();
SFontFile *GetFontFile()
{
return m_pFontFile;
}
// Ïðîâåðÿåì èäåíòè÷íîñòü ïî FontFile è ìàòðèöàì.
BOOL Matches(SFontFile *pFontFile, double *pFontMatrix, double *pTextMatrix)
{
return ( pFontFile == m_pFontFile &&
pFontMatrix[0] == m_arrdFontMatrix[0] && pFontMatrix[1] == m_arrdFontMatrix[1] && pFontMatrix[2] == m_arrdFontMatrix[2] && pFontMatrix[3] == m_arrdFontMatrix[3] &&
pTextMatrix[0] == m_arrdTextMatrix[0] && pTextMatrix[1] == m_arrdTextMatrix[1] && pTextMatrix[2] == m_arrdTextMatrix[2] && pTextMatrix[3] == m_arrdTextMatrix[3] );
}
// Çàáèðàåì ñèìâîë (êàê bitmap) - ñíà÷àëà ïûòàåìñÿ íàéòè åãî â êýøå, åñëè íå íàøëè ñîçäàåì íîâûé Bitmap è äîáàâëÿåì åãî â êýø.
// Âåëè÷èíû nFracX è nFracY, ïðåäñòàâëÿþò ÷èñëèòåëü íåêîòîðîãî çíà÷åíèÿ èç [0, 1), ãäå çíàìåíàòåëü ðàâåí sfontFraction = 1 << sfontFractionBits.
// Ïðîèçâîäíûå êëàññû, íå ïîääåðæèâàþùèå, ðàöèîíàëüíûå êîîäðèíàòû äîëæíû ñ÷èòàòü äàííîå çíà÷åíèå 0.
virtual BOOL GetGlyph(int nCode, int nFracX, int nFracY, SGlyphBitmap *pBitmap);
// Ñîçäàåì èç Glyph áèòìàï. Çíà÷åíèÿ nFracX è nFracY èìåþò òîò æå ñìûñë, ÷òî è â GetGlyph.
virtual BOOL MakeGlyph(int nCode, int nFracX, int nFracY, SGlyphBitmap *pBitmap) = 0;
// Ôóíêöèÿ ôîçâðàùàåò Path äëÿ äàííîãî ñèìâîëà.
virtual SPath *GetGlyphPath(int nCode) = 0;
// Ôóíêöèÿ ôîçâðàùàåò FontMatrix.
double *GetMatrix()
{
return m_arrdFontMatrix;
}
// Ôóíêöèÿ ôîçâðàùàåò BBox äëÿ Glyph.
void GetBBox(int *pnMinX, int *pnMinY, int *pnMaxX, int *pnMaxY)
{
*pnMinX = m_nMinX;
*pnMinY = m_nMinY;
*pnMaxX = m_nMaxX;
*pnMaxY = m_nMaxY;
}
protected:
SFontFile *m_pFontFile;
double m_arrdFontMatrix[4]; // FontMatrix (Text space -> Device space)
double m_arrdTextMatrix[4]; // TextMatrix (Text space -> User space)
BOOL m_bAntiAliasing; // Anti-aliasing
int m_nMinX; //
int m_nMinY; // Glyph BBox
int m_nMaxX; //
int m_nMaxY; //
unsigned char *m_pCache; // Glyph bitmap cache
SFontCacheTag *m_pCacheTags; // Cache Tags
int m_nGlyphWidth; // Øèðèíà Glyph bitmaps
int m_nGlyphHeight; // Âûñîòà Glyph bitmaps
int m_nGlyphSize; // Ðçàìåð Glyph bitmaps â áàéòàõ
int m_nCacheSets; // Êîëè÷åñòâî Sets â êýøå
int m_nCacheAssoc; // Êîëè÷åñòâî Glyphs â Set
};
#endif /* _SFONT_H */