180 lines
4.8 KiB
C++
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 |