mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-11 14:00:32 +08:00
289 lines
9.8 KiB
C++
289 lines
9.8 KiB
C++
#ifndef _FONT_H
|
|
#define _FONT_H
|
|
|
|
#include "GlyphBitmap.h"
|
|
#include "FontConsts.h"
|
|
|
|
struct TFontCacheTag;
|
|
class CFontFile;
|
|
class CFontPath;
|
|
class CGlyphString;
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
// CFont
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
class CFont
|
|
{
|
|
public:
|
|
|
|
CFont(CFontFile *pFontFile, BOOL bAntiAliasing, BOOL bUseKerning);
|
|
|
|
// Ôóíêöèþ íàäî âûçûâàòüï îñëå êîíñòðóêòîðà, ÷òîáû ó êîíñòðóêòîð ïîäêëàññà ìîã âû÷èñëèòü BBox.
|
|
void InitCache();
|
|
void ClearCache();
|
|
|
|
virtual ~CFont();
|
|
|
|
CFontFile *GetFontFile()
|
|
{
|
|
return m_pFontFile;
|
|
}
|
|
|
|
// Ïðîâåðÿåì èäåíòè÷íîñòü ïî FontFile è ìàòðèöàì.
|
|
BOOL Matches(CFontFile *pFontFile, double *pFontMatrix, double *pTextMatrix)
|
|
{
|
|
// TO DO: Èçìåíèòü ïðîâåðêó ïî FontFile
|
|
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] );
|
|
}
|
|
BOOL Matches(CFontFile *pFontFile)
|
|
{
|
|
return ( pFontFile == m_pFontFile );
|
|
}
|
|
|
|
// Çàáèðàåì ñèìâîë (êàê bitmap) - ñíà÷àëà ïûòàåìñÿ íàéòè åãî â êýøå, åñëè íå íàøëè ñîçäàåì íîâûé Bitmap è äîáàâëÿåì åãî â êýø.
|
|
// Âåëè÷èíû nFracX è nFracY, ïðåäñòàâëÿþò ÷èñëèòåëü íåêîòîðîãî çíà÷åíèÿ èç [0, 1), ãäå çíàìåíàòåëü ðàâåí sfontFraction = 1 << sfontFractionBits.
|
|
// Ïðîèçâîäíûå êëàññû, íå ïîääåðæèâàþùèå, ðàöèîíàëüíûå êîîäðèíàòû äîëæíû ñ÷èòàòü äàííîå çíà÷åíèå 0.
|
|
virtual BOOL GetGlyph(int nCode, int nFracX, int nFracY, TGlyphBitmap *pBitmap);
|
|
|
|
// Ñîçäàåì èç Glyph áèòìàï. Çíà÷åíèÿ nFracX è nFracY èìåþò òîò æå ñìûñë, ÷òî è â GetGlyph.
|
|
virtual BOOL MakeGlyph(int nCode, int nFracX, int nFracY, TGlyphBitmap *pBitmap) = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò ïîçèöèè ñèìâîëîâ â ñòðîêå, íà÷èíàÿ ñ òî÷êè (0;0)
|
|
virtual BOOL GetString(CGlyphString *pString) = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò ïîçèöèè ñèìâîëîâ â ñòðîêå, íà÷èíàÿ ñ òî÷êè (0;0) è ñðàçó ñ÷èòûâàåò ñàìè êàðòèíêè áóêâ
|
|
virtual BOOL GetString2(CGlyphString *pString) = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò CFontPath äëÿ äàííîãî ñèìâîëà.
|
|
virtual CFontPath *GetGlyphPath(int nCode) = 0;
|
|
|
|
// Ôóíêöèÿ óñòàíàâëèâåò çíà÷åíèå, ÿâëÿþñÿò ëè ýëåìåíòû ñòðîêè þíèêîäíûìè çíà÷åíèÿìè èëè íîìåðàìè ãëèôîâ
|
|
virtual void SetStringGID(BOOL bGID) = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò çíà÷åíèå, ÿâëÿþñÿò ëè ýëåìåíòû ñòðîêè þíèêîäíûìè çíà÷åíèÿìè èëè íîìåðàìè ãëèôîâ
|
|
virtual BOOL GetStringGID() = 0;
|
|
|
|
//----- Ãëîáàëüíûå ïàðàìåòðû øðèôòà ----------------------------------------------------
|
|
// Ôóíêöèÿ âîçâðàùàåò Ascent â åäèíèöàõ øðèôòà
|
|
virtual short GetAscender() = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò Descent â åäèíèöàõ øðèôòà
|
|
virtual short GetDescender() = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò âûñîòó áóêâû 'M' â åäèíèöàõ øðèôòà
|
|
virtual unsigned short GetUnitsPerEm() = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò ðàññòîÿíèå ìåæäó ëèíèÿìè â åäèíèöàõ øðèôòà
|
|
virtual short GetLineSpacing() = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò íàçâàíèå ñåìåéñòâà øðèôòà
|
|
virtual char * GetFamilyName() = 0;
|
|
|
|
// Ôóíêöèÿ âîâçàðàùàåò êîëè÷åñòâî øðèôòîâ, õðàíÿùèõñÿ â ôàéëå
|
|
virtual long GetFacesCount() = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò íîìåð òåêóùåãî øðèôòà â ôàéëå
|
|
virtual long GetFaceIndex() = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò êîëè÷åñòâî ãëèôîâ â ôàéëå
|
|
virtual long GetGlyphsCount() = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò ñòèëü øðèôòà â òåêñòîâîé ôîðìå ("Regular", "Bold" è ò.ä.)
|
|
virtual char *GetStyleName() = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò ïîçèöèþ ëèíèè äëÿ ïîä÷åðêèâàíèÿ (îòíîñèòåëüíî BaseLine)
|
|
virtual short GetUnderlinePosition() = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò òîëùèíó ëèíèè ïîä÷åðêèâàíèÿ
|
|
virtual short GetUnderlineThickness() = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò ìàêñèìàëüíîå ðàññòîÿíèå ïî ãîðèçîíòàëè ìåæäó íà÷àëüíûìè òî÷êàìè ðèñîâàíèÿ äâóõ ñîñåäíèõ ñèìâîëîâ
|
|
virtual short GetMaxAdvanceWidth() = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò ìàêñèìàëüíîå ðàññòîÿíèå ïî âåðòèêàëè ìåæäó íà÷àëüíûìè òî÷êàìè ðèñîâàíèÿ äâóõ ñîñåäíèõ ñèìâîëîâ
|
|
virtual short GetMaxAdvanceHeight() = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò íàèìåíüøèé ïðÿìîóãîëüíèê, â êîòîðîì ìîæíî íàðèñîâàòü ëþáóþ áóêâó èç øðèôòà
|
|
virtual void GetBBox(long *plMinX, long *plMinY, long *plMaxX, long *plMaxY) = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò íîìåð ãëèôà ïî åãî èìåíè
|
|
virtual unsigned short GetNameIndex(char *sName) = 0;
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò true, åñëè ñèìâîë ñ þíèêîäíûì çíà÷åíèåì lUnicode ïðèñóòñòâóåò â øðèôòå(â êàêîì-íèáóäü CMap)
|
|
virtual bool IsCharAvailable(long lUnicode) = 0;
|
|
|
|
// Óñòàíàâëèâàåì Dpi
|
|
virtual void SetSizeAndDpi(float fSize, unsigned int unHorDpi, unsigned int unVerDpi) = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò òèï øðèôòà
|
|
virtual const char *GetFontFormat() = 0;
|
|
|
|
// Ôóíêöèÿ ïðîâåðÿåò ïðèñóòñòâóåò ëè äàííûå Unicode Range â øðèôòå èëè CodeRange(åñëè ïàðàìåòð un4ByteIndex ðàâåí 4 èëè 5)
|
|
virtual int IsUnicodeRangeAvailable(unsigned long ulBit, unsigned int un4ByteIndex) = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò íîìåð êîäà ïî íîìåðó ãëèôà
|
|
virtual unsigned long GetCodeByGID(unsigned short ushGID) = 0;
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò panose (â òàáëèöå OS/2)
|
|
virtual void GetPanose(char **ppPanose) = 0;
|
|
|
|
// Ôóíêöèÿ ïðîâåðÿåì ÿâëÿåòñÿ ëè äàííûé øðèôò ìîíîøèðèííûì
|
|
virtual bool IsFixedWidth() = 0;
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
// Ñáðàñûâàåì ìàòðèöó ïðåîáðàçîâàíèé ê åäèíè÷íîé
|
|
virtual void ResetFontMatrix() = 0;
|
|
|
|
// Ñáðàñûâàåì ãëîáàëüíóþ ìàòðèöó
|
|
virtual void ResetTextMatrix() = 0;
|
|
|
|
// Ïðèìåíÿåì ïðåîáðàçîâàíèå (ê ìàòðèöå øðèôòà)
|
|
virtual void ApplyTransform(float fA, float fB, float fC, float fD, float fE, float fF) = 0;
|
|
|
|
// Óñòàíàâëèâàåì ìàòðèöó øðèôòà
|
|
virtual void SetFontMatrix(float fA, float fB, float fC, float fD, float fE, float fF) = 0;
|
|
|
|
// Óñòàíàâëèâàåì ãëîáàëüíóþ ìàòðèöó (îáùàÿ ìàòðèöà äëÿ âñåãî òåêñòà)
|
|
virtual void SetTextMatrix(float fA, float fB, float fC, float fD, float fE, float fF) = 0;
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// Ïîñêîëüêó íå âñåãäà øðèôò èìååòñÿ â íóæíîì ñòèëå, ïîýòîìó íóæíûå ýëåìåíòû ñòèëÿ
|
|
// äåëàåì âðó÷íóþ.
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
// Óñòàíàâëèâàåì, íóæíî ëè äåëàòü øðèôò æèðíûì(àëãîðèòìè÷åñêè)
|
|
void SetBold(BOOL bBold)
|
|
{
|
|
m_bNeedDoBold = bBold;
|
|
};
|
|
|
|
// Ñ÷èòûâàåì, äåëàåòñÿ ëè øðèôò æèðíûì
|
|
BOOL GetBold()
|
|
{
|
|
return m_bNeedDoBold;
|
|
}
|
|
|
|
// Óñòàíàâëèâàåì, íóæíî ëè äåëàòü øðèôò íàêëîííûì(àëãîðèòìè÷åñêè)
|
|
void SetItalic(BOOL bItalic)
|
|
{
|
|
m_bNeedDoItalic = bItalic;
|
|
ResetFontMatrix();
|
|
}
|
|
|
|
// Ñ÷èòûâàåì, äåëàåòñÿ ëè øðèôò íàêëîííûì
|
|
BOOL GetItalic()
|
|
{
|
|
return m_bNeedDoItalic;
|
|
}
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
// Óñòàíàâëèâàåì ñòàíäàðòíûé øðèôò
|
|
void SetDefaultFont(CFont *pDefFont)
|
|
{
|
|
m_pDefaultFont = pDefFont;
|
|
}
|
|
|
|
|
|
// Ôóíêöèÿ âîçâðàùàåò ñòàíäàðòíûé øðèôò
|
|
CFont *GetDefaultFont()
|
|
{
|
|
return m_pDefaultFont;
|
|
}
|
|
|
|
void SetUseDefaultFont(BOOL bUse)
|
|
{
|
|
m_bUseDefaultFont = bUse;
|
|
}
|
|
|
|
BOOL GetUseDefaultFont()
|
|
{
|
|
return m_bUseDefaultFont;
|
|
}
|
|
|
|
|
|
// Ôóíêöèÿ ôîçâðàùàåò 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;
|
|
}
|
|
|
|
// Óñòàíàâëèâàåì ìåæñèâîëüíûé èíòåðâàë
|
|
void SetCharSpacing(float fCharSpacing)
|
|
{
|
|
m_fCharSpacing = fCharSpacing;
|
|
}
|
|
|
|
// Ïîëó÷àåì ìåæñèìâîëüíûé èíòåðâàë
|
|
float GetCharSpacing()
|
|
{
|
|
return m_fCharSpacing;
|
|
}
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
float GetFontSize()
|
|
{
|
|
return m_fSize;
|
|
}
|
|
unsigned int GetVerDpi()
|
|
{
|
|
return m_unVerDpi;
|
|
}
|
|
|
|
unsigned int GetHorDpi()
|
|
{
|
|
return m_unHorDpi;
|
|
}
|
|
|
|
protected:
|
|
|
|
CFontFile *m_pFontFile;
|
|
double m_arrdFontMatrix[6]; // FontMatrix (Text space -> Device space)
|
|
double m_arrdTextMatrix[6]; // TextMatrix (Text space -> User space)
|
|
BOOL m_bAntiAliasing; // Anti-aliasing
|
|
BOOL m_bUseKerning; // Èñïîëüçîâàòü è äîñòóïåí ëè Kerning
|
|
|
|
float m_fSize; // Ðàçìåð øðèôòà
|
|
unsigned int m_unHorDpi; // Ãîðèçîíòàëüíîå ðàçðåøåíèå
|
|
unsigned int m_unVerDpi; // Âåðòèêàëüíîå ðàçðåøåíèå
|
|
|
|
BOOL m_bNeedDoItalic; // Äàííûé øðèôò íóæíî ñäåëàòü íàêëîííûì | Òàêîå ñëó÷àåòñÿ â 2-õ ñëó÷àÿõ, ëèáî ìû ãðóçèì øðèôò èç ôàéëà,
|
|
BOOL m_bNeedDoBold; // Äàííûé øðèôò íóæíî ñäåëàòü æèðíûì | ëèáî ñðåäè óñòàíîâëåííûõ øðèôòîâ íåò øðèôòà ñ íóæíûì ñòèëåì.
|
|
|
|
float m_fCharSpacing; // Ìåæñèìâîëüíûé èíòåðâàë
|
|
|
|
int m_nMinX; //
|
|
int m_nMinY; // Glyph BBox
|
|
int m_nMaxX; //
|
|
int m_nMaxY; //
|
|
|
|
unsigned char *m_pCache; // Glyph bitmap cache
|
|
TFontCacheTag *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
|
|
|
|
CFont *m_pDefaultFont; // Ñòàíäàðòíûé øðèôò, êîòîðûé èñïîëüçóåòñÿ, åñëè â èñõîäíîì êàêèå-òî ñèìâîëû íå ðèñóþòñÿ
|
|
BOOL m_bUseDefaultFont; // Èñïîëüçóåì ëè ñòàíäàðòíûé øðèôò? Åñëè íåò, òîãäà êîãäà íåò ñèìâîëà ðèñóåì ñòàíäàðòíûé ñèìâîë
|
|
};
|
|
|
|
#endif /* _FONT_H */
|