mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-19 22:01:45 +08:00
172 lines
5.1 KiB
C++
172 lines
5.1 KiB
C++
#ifndef _BUILD_GLYPH_STRING_H
|
|
#define _BUILD_GLYPH_STRING_H
|
|
|
|
#include "../common/Types.h"
|
|
#include "../common/Array.h"
|
|
|
|
#include <math.h>
|
|
#include <string>
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
// TGlyphBitmap
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
class TGlyphBitmap
|
|
{
|
|
public:
|
|
int nX; // Ñäâèã ïî X íà÷àëüíîé òî÷êè äëÿ ðèñîâàíèÿ ñèìâîëà
|
|
int nY; // Ñäâèã ïî Y íà÷àëüíîé òî÷êè äëÿ ðèñîâàíèÿ ñèìâîëà
|
|
int nWidth; // Øèðèíà ñèìâîëà
|
|
int nHeight; // Âûñîòà ñèìâîëà
|
|
BOOL bAA; // Anti-aliased: True îçíà÷àåò, ÷òî Bitmap 8-áèòíûé(ò.å. ñ àëüôîé); False - Bitmap 1-áèòíûé
|
|
BYTE* pData; // Bitmap data(êàðòèíêà ñ ñèìâîëîì)
|
|
BOOL bFreeData; // True, åñëè ïàìÿòü â pData íóæíî îñâîáîäèòü
|
|
|
|
TGlyphBitmap();
|
|
~TGlyphBitmap();
|
|
};
|
|
|
|
enum EGlyphState
|
|
{
|
|
glyphstateNormal = 0, // ñèìâîë îòðèñîâàëñÿ â íóæíîì øðèôòå
|
|
glyphstateDeafault, // ñèìâîë îòðèñîâàëñÿ â äåôîëòîâîì øðèôòå
|
|
glyphstateMiss // ñèìâîë íå îòðèñîâàëñÿ
|
|
};
|
|
|
|
struct TBBox
|
|
{
|
|
float fMinX;
|
|
float fMaxX;
|
|
float fMinY;
|
|
float fMaxY;
|
|
};
|
|
|
|
struct TMetrics
|
|
{
|
|
float fWidth;
|
|
float fHeight;
|
|
|
|
float fHoriBearingX;
|
|
float fHoriBearingY;
|
|
float fHoriAdvance;
|
|
|
|
float fVertBearingX;
|
|
float fVertBearingY;
|
|
float fVertAdvance;
|
|
};
|
|
|
|
class TGlyph
|
|
{
|
|
public:
|
|
long lUnicode; // Þíèêîä
|
|
float fX; // Ïîçèöèÿ ãëèôà
|
|
float fY; // íà BaseLine
|
|
|
|
float fLeft; //
|
|
float fTop; // BBox
|
|
float fRight; //
|
|
float fBottom; //
|
|
|
|
TMetrics oMetrics;
|
|
|
|
EGlyphState eState;
|
|
|
|
bool bBitmap;
|
|
TGlyphBitmap oBitmap;
|
|
|
|
public:
|
|
TGlyph();
|
|
~TGlyph();
|
|
};
|
|
|
|
|
|
namespace FontConstants
|
|
{
|
|
//---------------------------------------------------------------------------------------------------
|
|
// Êîíñòàíòû ñâÿçàííûå ñ CharMap: Platform, Encoding ID
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
const long c_lUniPlatform = 0;
|
|
const long c_lMacPlatform = 1;
|
|
const long c_lWinPlatform = 3;
|
|
|
|
const long c_lWinEncSymbol = 0;
|
|
const long c_lWinEncUSC2 = 1;
|
|
const long c_lWinEncShiftJIS = 2;
|
|
const long c_lWinEncPRC = 3;
|
|
const long c_lWinEncBig5 = 4;
|
|
const long c_lWinEncWansung = 5;
|
|
const long c_lWinEncJohab = 6;
|
|
const long c_lWinEncUCS4 = 10;
|
|
|
|
//--------------------------------------------------------------------------
|
|
// FontStyle: face types and common styles
|
|
//--------------------------------------------------------------------------
|
|
|
|
enum FontStyle
|
|
{
|
|
FontStyleRegular = 0,
|
|
FontStyleBold = 1,
|
|
FontStyleItalic = 2,
|
|
FontStyleBoldItalic = 3,
|
|
FontStyleUnderline = 4,
|
|
FontStyleStrikeout = 8
|
|
};
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Unit constants
|
|
//--------------------------------------------------------------------------
|
|
|
|
enum Unit
|
|
{
|
|
UnitWorld, // 0 -- World coordinate (non-physical unit)
|
|
UnitDisplay, // 1 -- Variable -- for PageTransform only
|
|
UnitPixel, // 2 -- Each unit is one device pixel.
|
|
UnitPoint, // 3 -- Each unit is a printer's point, or 1/72 inch.
|
|
UnitInch, // 4 -- Each unit is 1 inch.
|
|
UnitDocument, // 5 -- Each unit is 1/300 inch.
|
|
UnitMillimeter // 6 -- Each unit is 1 millimeter.
|
|
};
|
|
}
|
|
|
|
class CGlyphString
|
|
{
|
|
public:
|
|
CGlyphString();
|
|
CGlyphString(const std::wstring& wsString, float fX = 0, float fY = 0);
|
|
~CGlyphString();
|
|
void SetString(const std::wstring& wsString, float fX = 0, float fY = 0);
|
|
void SetStringGID(const LONG& gid, float fX = 0, float fY = 0);
|
|
void Reset();
|
|
int GetLength();
|
|
void SetBBox(int nIndex, float fLeft, float fTop, float fRight, float fBottom);
|
|
void SetMetrics(int nIndex, float fWidth, float fHeight, float fHoriAdvance, float fHoriBearingX, float fHoriBearingY, float fVertAdvance, float fVertBearingX, float fVertBearingY);
|
|
void SetStartPoint(int nIndex, float fX, float fY);
|
|
void SetState(int nIndex, EGlyphState eState);
|
|
void GetBBox(float *pfLeft, float *pfTop, float *pfRight, float *pfBottom, int nIndex = -1, int nType = 0);
|
|
void GetBBox2(float *pfLeft, float *pfTop, float *pfRight, float *pfBottom);
|
|
void SetCTM(float fA, float fB, float fC, float fD, float fE ,float fF);
|
|
void ResetCTM();
|
|
void Transform(float *pfX, float *pfY);
|
|
void SetTrans(float fX, float fY);
|
|
TGlyph* GetAt(int nIndex);
|
|
BOOL GetNext(TGlyph*& pGlyph);
|
|
public:
|
|
float m_fTransX;
|
|
float m_fTransY;
|
|
|
|
float m_fX; // Êîîðäèíàòû íà÷àëüíîé òî÷êè äëÿ ðèñîâàíèÿ
|
|
float m_fY; //
|
|
|
|
float m_fEndX; // Êîîðäèíàòû êîíå÷íîé òî÷êè
|
|
float m_fEndY; //
|
|
|
|
double m_arrCTM[6]; // Ãëîáàëüíàÿ ìàòðèöà ïðåîáðàçîâàíèÿ
|
|
double m_dIDet; // (Äåòåðìèíàíò ìàòðèöû ïðåîáðàçîâàíèÿ)^(-1)
|
|
|
|
private:
|
|
TGlyph* m_pGlyphsBuffer; // Ñèìâîëû â äàííîé ñòðîêå
|
|
int m_nGlyphsCount; // Êîëè÷åñòâî ñèìâîëîâ â ñòðîêå
|
|
int m_nGlyphIndex; // Íîìåð òåêóùåãî ñèìâîëà
|
|
};
|
|
|
|
#endif /* _BUILD_GLYPH_STRING_H */ |