Files
Leviathan/Client/Game/game/Localization/MiddleEast/KTextLayout.h
T
2026-06-01 12:46:52 +02:00

180 lines
4.8 KiB
C++

#ifdef _COUNTRY_ME_
#pragma once
#include "Pango/PangoCairo.h"
#include "K3DTypes.h"
#include "KRenderObject.h"
#include "KSmartPtr.h"
#include <list>
class KTextParser;
class KTextParagraph;
struct KTextEmoticon;
class KSpritePrimitive;
class KParagraphLayout
{
public:
KParagraphLayout( int nWidth, int nHeight, int nSpacing, DWORD dwAlign );
~KParagraphLayout();
void Layout( KTextParagraph* pPara );
KSize GetActualSize( KTextParagraph* pPara, int nOffsetX );
void Render( cairo_t* cr, KTextParagraph* pPara, int nX, int nY );
int GetLineCount( KTextParagraph* pPara, int nOffsetX );
void SetAlign( DWORD dwAlign );
private:
void _Render( cairo_t* cr, LPCSTR szText, double r, double g, double b, double a, double dX, double dY );
PangoContext* m_context;
PangoLayout* m_layout;
int m_nWidth, m_nHeight;
int m_nSpacing;
DWORD m_dwAlign;
};
class KTextLayout2
{
public:
enum
{
KDEFAULT_LINE_SPACING = 1,
};
KTextLayout2();
KTextLayout2( int nWidth, int nHeight, int nSpacing = KDEFAULT_LINE_SPACING );
~KTextLayout2(void);
void Initialize( int nWidth, int nHeight, int nSpacing = KDEFAULT_LINE_SPACING ) { m_nWidth = nWidth; m_nHeight = nHeight; m_nSpacing = nSpacing; }
void Clear();
// 2010.09.03 - prodongi
void AddString( LPCSTR lpszString, float fZPos = 0.0f, bool bTagEnable = true, bool bDummy1 = true, bool bDummy2 = true, bool isScroll = false, DWORD maxWidth = 0, bool isSpriteScroll = false );
//void AddString( LPCSTR lpszString, float fZPos = 0.0f, bool bTagEnable = true, bool bDummy1 = true, bool bDummy2 = true );
static void InitLayoutEngine( K3DRenderDevice * pDevice );
static void DestroyLayoutEngine();
void SetViewOffsetY( float fY )
{
m_fViewOffsetY = fY;
SetPosition( m_vPosition.x, m_vPosition.y, m_vPosition.z );
}
void Render(KViewportObject * pViewport, bool isFront);
void SetPosition( float fX, float fY, float fZ );
void SetAddPosition( float fAddX, float fAddY, float fAddZ = 0.0f );
void SetVisibility(float fVisibility)
{
m_fVisibility = fVisibility;
}
float GetVisibility()
{
return m_fVisibility;
}
void SetAlign( DWORD dwAlign )
{
m_dwAlign = dwAlign;
AddString( m_strText.c_str() );
}
void SetEllipsize( bool bEllipsize )
{
m_bEllipsize = bEllipsize;
}
void SetClipRect(const KRect & rcRect);
SIZE GetTextureSize()
{
return m_sizeTexture;
}
K3DVector GetPosition()
{
return m_vPosition;
}
DWORD GetLineNumber()
{
return 1; // 이거 어떻게 구하지? -_- #중동
}
DWORD GetTotalLineHeigt();
/// 2010.06.14 빈 함수로 남겨둔다(쓰이고 있지 않음) - prodongi
void modifyEmoticonSize(std::string const& /*aniName*/, int /*width*/, int /*height*/) {}
// 2010.06.17 - prodongi
DWORD GetWidth() { return (DWORD)m_nWidth; }
DWORD GetHeight() { return (DWORD)m_nHeight; }
// 2010.06.24 - prodongi
int GetSpacing() { return m_nSpacing; }
KSpritePrimitive* GetSpritePrimitive() const { return m_prSprite; }
static KSize GetLayoutSize( KTextParagraph* pParagraph, int nLimitWidth );
static void SplitLine( std::vector< std::string > & vecLineList, int nLimitWidth, const std::string& _strOriginal, const char* szFontName, int nFontSize, bool bBold );
static PangoContext* GetPangoContext()
{
return s_pPangoContext;
}
/// 2011.02.23 스프라이트 스크롤 설정 정보를 저장하는 구조체 - prodongi
struct sSpriteScrollInfo
{
sSpriteScrollInfo() : m_scroll(false), m_type(0), m_v(0.0f), m_margin(0.0f) {}
void operator = (sSpriteScrollInfo const& info)
{
set(info.m_scroll, info.m_type, info.m_v, info.m_margin);
}
void set(bool scroll, DWORD type, float v, float margin)
{
m_scroll = scroll;
m_type = type;
m_v = v;
m_margin = margin;
}
bool m_scroll;
DWORD m_type;
float m_v;
float m_margin;
};
void setSpriteScroll(bool scroll, DWORD type, float v, float margin); /// 2011.01.18 - prodongi
void setSpriteScrollInfo(KTextLayout2::sSpriteScrollInfo const& info); /// 2011.02.23 - prodongi
void getSpriteScrollInfo(KTextLayout2::sSpriteScrollInfo& info); /// 2011.02.23 - prodongi
void updateSpriteScrollInfo(); /// 2011.02.23 - prodongi
sSpriteScrollInfo* GetSpriteScrollInfo() { return &m_spriteScrollInfo; } /// 2011.03.23 - servantes
private:
std::string m_strText;
int m_nWidth, m_nHeight;
SIZE m_sizeTexture;
int m_nSpacing;
DWORD m_dwAlign;
bool m_bEllipsize;
K3DVertex m_vPosition;
float m_fAlignOffsetY;
float m_fViewOffsetY;
float m_fVisibility;
KResSpriteSPtr m_spResSprite;
class KSpritePrimitive* m_prSprite;
KRect m_rcClipRect;
K3DTextureSPtr m_spTexture;
typedef std::list <KTextEmoticon*> listEmoticon;
typedef listEmoticon::iterator ilistEmoticon;
listEmoticon m_listEmoticons;
static K3DRenderDevice * m_pDevice;
static PangoContext* s_pPangoContext;
sSpriteScrollInfo m_spriteScrollInfo; /// 2011.02.23 - prodongi
};
#endif