DragonNest/Common/EtInterface/EtUITextBoxData.h
2024-12-19 09:48:26 +08:00

140 lines
No EOL
2.9 KiB
C++

#pragma once
// Note : Line
#define UITEXT_NONE 0x00000000
#define UITEXT_CLIP 0x00000001
#define UITEXT_SYMBOL 0x00000010
// Note : Word
#define UITEXT_RIGHT 0x00000100
#define UITEXT_CENTER 0x00001000
using namespace EtInterface;
struct SWORD_PROPERTY
{
SUICoord uiCoord; // 텍스트가 출력될 좌표와 크기
SUIColorEx uiColor;
DWORD dwFormat; // 텍스트 포맷(UITEXT_CLIP, UITEXT_SYMBOL)
bool bSymbol; // 단어 끝에 "..."를 추가할 것인지 아닌지 여부
bool bAdd; // AddText()된 단어라면 true, AppendText()라면 false
//int nFontIndex; // 다른 폰트를 사용하기 위한 인덱스
D3DCOLOR BgColor;
SWORD_PROPERTY()
: dwFormat(UITEXT_NONE)
//, nFontIndex(-1)
, bSymbol(false)
, bAdd(false)
, BgColor(0)
{
}
void Clear()
{
uiCoord.SetCoord(0.f, 0.f, 0.f, 0.f);
uiColor.Clear();
dwFormat = UITEXT_NONE;
bSymbol = false;
bAdd = false;
BgColor = 0;
}
};
// Note : 추가 되는 텍스트는 한가지 색상을 가진다.
// 따라서 문장이 되더라도 하나의 워드로 본다.
class CWord
{
public:
CWord();
~CWord();
public:
std::wstring m_strWord;
SWORD_PROPERTY m_sProperty;
std::wstring m_strWordWithTag;
public:
void UpdatePos( float fX, float fY );
void Clear();
};
typedef std::vector<CWord> VECWORD;
// 각 라인에 별도의 스트링값을 기억해둔다.
// 채팅창에 라인 클릭시 해당 유저로 귓말 넣는 것을 구현하기 위함인듯 하다.
struct SLineData
{
std::wstring m_strData;
int m_nData;
void Clear()
{
m_strData.clear();
m_nData = 0;
}
};
// Note : 라인은 출력되는 텍스트를 라인으로 분리한다.
// 나중에 라인단위로 관리하기 위해서다.
class CLine
{
public:
CLine();
virtual ~CLine();
enum LineTypeEnum {
Line,
Image,
};
public:
VECWORD m_vecWord;
SUICoord m_uiCoord;
float m_fLineSpace; // Note : 라인과 라인 사이의 간격.
protected:
bool m_bSelected;
bool m_bMouseInLine;
SLineData m_sLineData; // 라인이 가지는 별도의 스트링 값.
public:
void Select( bool bSelect ) { m_bSelected = bSelect; }
bool IsSelected() { return m_bSelected; }
void SetMouseInLine( bool bMouseInCtl ) { m_bMouseInLine = bMouseInCtl; }
bool IsMouseInLine() { return m_bMouseInLine; }
public:
std::wstring GetText();
void SetLineData( SLineData &sLineData ) { m_sLineData = sLineData; }
SLineData &GetLineData() { return m_sLineData; }
public:
void SetLineSpace( float fLineSpace );
float GetLineSpace() { return m_fLineSpace; }
void UpdatePos( float fX, float fY );
virtual LineTypeEnum GetLineType() { return CLine::Line; }
};
class CImageLine : public CLine
{
public:
CImageLine();
virtual ~CImageLine();
protected:
EtTextureHandle m_hTexture;
std::string m_szFileName;
SUICoord m_uiUV;
public:
void SetImage( WCHAR *wszFileName, SUICoord &Coord );
void SetImage( char *szFileName, SUICoord &Coord );
EtTextureHandle GetTexture();
SUICoord &GetTextureUV() { return m_uiUV; }
virtual LineTypeEnum GetLineType() { return CLine::Image; }
};
typedef std::vector<CLine *> VECLINE;
typedef VECLINE::iterator VECLINE_ITER;