#ifdef _COUNTRY_ME_ #pragma once #include "Pango/PangoCairo.h" #include "K3DTypes.h" #include "KRenderObject.h" #include "KSmartPtr.h" #include 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 listEmoticon; typedef listEmoticon::iterator ilistEmoticon; listEmoticon m_listEmoticons; static K3DRenderDevice * m_pDevice; static PangoContext* s_pPangoContext; sSpriteScrollInfo m_spriteScrollInfo; /// 2011.02.23 - prodongi }; #endif