Files
core/DesktopEditor/fontengine/GlyphString.h

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 */