Files
2026-06-01 12:46:52 +02:00

179 lines
3.6 KiB
C++

#ifdef _COUNTRY_ME_
#pragma once
#include <list>
//#include <string>
#include "KTextLayout.h"
#include "KFontManager.h"
std::string utf8_to_multibyte( const std::string& strUTF8 );
std::string multibyte_to_utf8( const std::string& strMultibyte);
std::wstring multibyte_to_wide( const std::string& strMultibyte );
std::string wide_to_multibyte( const std::wstring& strWide );
struct KParagraphAttr
{
std::string strFontName;
int nFontSize;
DWORD dwColor;
bool bShadow;
bool bBold;
bool bGlow;
KParagraphAttr() :
strFontName( KFontManager::GetInstance()->GetFaceName( KFontManager::KDEFAULT_FONT_NAME ) ),
nFontSize( KFontManager::KDEFAULT_FONT_SIZE ),
dwColor( 0xffffff ), bShadow( false ), bBold( false ), bGlow( false )
{}
KParagraphAttr( const KParagraphAttr& other ) :
strFontName( other.strFontName ),
nFontSize( other.nFontSize ),
dwColor( other.dwColor ),
bShadow( other.bShadow ),
bBold( other.bBold ),
bGlow( other.bGlow )
{}
};
class KTextParagraph
{
public:
enum
{
KTFLAG_UNDER = 1,
KTFLAG_STRIKE = 2,
KTFLAG_INVERSE = 4,
KTFLAG_BOLD = 8,
KTFLAG_SHADOW = 16,
KTFLAG_OUTLINE = 32,
KTFLAG_GLOW = 64,
KTFLAG_GLOW2X = 128,
} FONT_FLAG;
enum
{
KTALIGN_LEFT = DT_LEFT,
KTALIGN_RIGHT = DT_RIGHT,
KTALIGN_HCENTER = DT_CENTER,
KTALIGN_VCENTER = DT_VCENTER,
KTALIGN_TOP = DT_TOP,
KTALIGN_BOTTOM = DT_BOTTOM,
} FONT_ALIGN;
template < class T > struct KTextAttr;
struct KTextAttrBase
{
enum TEXT_ATTRIBUTE
{
TA_FONT = 0,
TA_SIZE = 1,
TA_FCOLOR = 2,
TA_BCOLOR = 3,
TA_BOLD = 4,
TA_INVERSE = 5,
TA_STRIKE = 6,
TA_SHADOW = 7,
TA_OUTLINE = 8,
TA_GLOW = 9,
TA_UNDERLINE = 10
};
KTextAttrBase( TEXT_ATTRIBUTE type_, int nIndex_ ) : type( type_ ), nIndex( nIndex_ ) {}
template <class T> const T& GetAttr()
{
return static_cast < KTextAttr < T > *> ( this )->attr;
}
TEXT_ATTRIBUTE type;
int nIndex;
};
template < class T > struct KTextAttr : public KTextAttrBase
{
KTextAttr( TEXT_ATTRIBUTE ta, int nIndex_, T attr_ ) : KTextAttrBase( ta, nIndex_ ), attr( attr_ ) {}
T attr;
};
typedef std::list < KTextAttrBase* > listAttr;
typedef listAttr::iterator ilistAttr;
/*
KTextParagraph() :
m_dwOffsetX( 0 ),
m_dwOffsetY( 0 ),
m_bLineBreak( false )
{
}
*/
KTextParagraph( const KParagraphAttr& attr ) :
m_attr( attr ),
m_dwOffsetX( 0 ),
m_dwOffsetY( 0 ),
m_bLineBreak( false ),
m_bEmoticon( false )
{}
~KTextParagraph()
{
for ( ilistAttr itor = m_listAttr.begin(); itor != m_listAttr.end(); ++itor )
delete *itor;
}
size_t GetLength()
{
return m_strText.length();
}
DWORD GetOffsetX()
{
return m_dwOffsetX;
}
DWORD GetOffsetY()
{
return m_dwOffsetY;
}
void SetOffsetX( DWORD dwOffsetX )
{
m_dwOffsetX = dwOffsetX;
}
void SetOffsetY( DWORD dwOffsetY )
{
m_dwOffsetY = dwOffsetY;
}
void SetLineBreak( bool bEnable )
{
m_bLineBreak = true;
}
bool GetLineBreak()
{
return m_bLineBreak;
}
const std::string& GetString()
{
return m_strText;
}
std::string GetMultibyteString();
void AddString( const std::string& strText );
template < class T > void AddAttribute( KTextAttrBase::TEXT_ATTRIBUTE ta, T attr )
{
KTextAttr <T>* pAttr = new KTextAttr <T> ( ta, m_strText.length(), attr );
m_listAttr.push_back( pAttr );
}
KParagraphAttr* GetAttr() { return &m_attr; }
PangoAttrList* GetPangoAttrList();
PangoAttrList* GetPangoAttrListWithoutColor();
DWORD GetAttrHash();
KParagraphAttr m_attr;
listAttr m_listAttr;
DWORD m_dwOffsetX;
DWORD m_dwOffsetY;
bool m_bLineBreak;
std::string m_strText;
bool m_bEmoticon;
};
#endif