DragonNest/Common/EtInterface/EtUITextBoxData.cpp
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

143 lines
3.1 KiB
C++

#include "StdAfx.h"
#include "EtUITextBoxData.h"
#include "EtTexture.h"
#include "EternityEngine.h"
#include "EtResourceMng.h"
// Note : Class Word
//
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
CWord::CWord()
{
}
CWord::~CWord()
{
}
void CWord::UpdatePos( float fX, float fY )
{
m_sProperty.uiCoord.fX = fX;
m_sProperty.uiCoord.fY = fY;
}
void CWord::Clear()
{
m_sProperty.Clear();
m_strWord.clear();
m_strWordWithTag.clear();
}
/////////////////////////////////////////////////////////////////
// Note : Class Line
//
CLine::CLine()
: m_fLineSpace(0.0f)
, m_bSelected(false)
, m_bMouseInLine(false)
, m_uiCoord( 0.f, 0.f, 0.f, 0.f )
{
}
CLine::~CLine()
{
SAFE_DELETE_VEC( m_vecWord );
}
void CLine::SetLineSpace( float fLineSpace )
{
m_uiCoord.fHeight -= GetLineSpace();
this->m_fLineSpace = fLineSpace;
m_uiCoord.fHeight += GetLineSpace();
}
void CLine::UpdatePos( float fX, float fY )
{
m_uiCoord.fX = fX;
m_uiCoord.fY = fY;
fY += GetLineSpace();
for( int i=0; i<(int)m_vecWord.size(); i++ )
{
if( m_vecWord[i].m_sProperty.dwFormat & UITEXT_RIGHT )
{
// 버그 발견.
// Word의 Pos를 정할때 라인 좌상단 기준에서 fX를 구해야하는게 아니라,
// 부모 다이얼로그 좌상단 기준에서 fX를 구해야하는 것이다.
// (이건 모든 컨트롤의 fX를 정할때 적용되는 사실이다.)
// 결국 부모 다이얼로그의 DrawDlgText를 사용해 렌더링되기 때문이다.
//
// 그렇기 때문에 Word의 fX를 정할때는 라인의 fX만큼 오프셋 처리를 해줘야한다.
//
// 우측정렬일때는 Append(해당줄에 추가)나, Add(다음줄에 추가)나 상관하지 않고 결정한다.
m_vecWord[i].UpdatePos( m_uiCoord.fX + m_uiCoord.fWidth - m_vecWord[i].m_sProperty.uiCoord.fWidth, fY );
// Note : 오른쪽 정렬이라는 것은 마지막 Word를 뜻한다.
return;
}
else if( m_vecWord[i].m_sProperty.dwFormat & UITEXT_CENTER )
{
// Append에 CENTER붙이면 라인의 센터에 둬야하나, 남은 공간의 센터에 둬야하나.
// 만약 라인의 센터에 둔다면 Append에서 CENTER자체를 받게 해둔 거 자체가 오류일테니,
// 남는 공간에서 CENTER에 해야겠다.
float fEmptyWidth = m_uiCoord.fWidth - (fX - m_uiCoord.fX);
float fWordWidth = m_vecWord[i].m_sProperty.uiCoord.fWidth;
// RIGHT와 달리 fX에다가 추가해야 좌측에 뭔가 적혔을때의 너비를 기억하게 된다.
m_vecWord[i].UpdatePos( fX + (fEmptyWidth - fWordWidth)*0.5f, fY );
}
else
{
m_vecWord[i].UpdatePos( fX, fY );
}
fX = m_vecWord[i].m_sProperty.uiCoord.Right();
}
}
std::wstring CLine::GetText()
{
std::wstring strTemp;
for( int i=0; i<(int)m_vecWord.size(); i++ )
{
strTemp += m_vecWord[i].m_strWord;
}
return strTemp;
}
CImageLine::CImageLine()
{
m_hTexture;
std::string m_szFileName;
}
CImageLine::~CImageLine()
{
SAFE_RELEASE_SPTR( m_hTexture );
}
void CImageLine::SetImage( WCHAR *wszFileName, SUICoord &Coord )
{
ToMultiString( wszFileName, m_szFileName );
SetImage( (char*)m_szFileName.c_str(), Coord );
}
void CImageLine::SetImage( char *szFileName, SUICoord &Coord )
{
m_szFileName = szFileName;
m_hTexture = EternityEngine::LoadTexture( CEtResourceMng::GetInstance().GetFullName( szFileName ).c_str() );
m_uiUV = Coord;
}
EtTextureHandle CImageLine::GetTexture()
{
return m_hTexture;
}