143 lines
3.1 KiB
C++
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;
|
|
}
|
|
|