mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-20 11:47:00 +08:00
95 lines
3.3 KiB
C++
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 */
|