327 lines
10 KiB
C++
327 lines
10 KiB
C++
#ifdef _COUNTRY_ME_
|
|
|
|
#pragma once
|
|
#include "../KUIDefine.h"
|
|
#include "KTypes.h"
|
|
#include <map>
|
|
#include "KUIFactory.h"
|
|
#include "KTextRender.h"
|
|
#include "RefCounted.h"
|
|
#include "IntrusivePtr.h"
|
|
|
|
class KSpritePrimitive;
|
|
|
|
struct KUICTRLITEM
|
|
{
|
|
char* strSprAniName;
|
|
int nFrame;
|
|
bool bScalable;
|
|
KSize sizeTarget;
|
|
bool bTiling;
|
|
float fVisibility;
|
|
};
|
|
|
|
enum KAPPLICATION_MESSAGE
|
|
{
|
|
KMOUSE_MOVE = WM_MOUSEMOVE,
|
|
KLBUTTON_UP = WM_LBUTTONUP,
|
|
KLBUTTON_DOWN = WM_LBUTTONDOWN,
|
|
KRBUTTON_UP = WM_RBUTTONUP,
|
|
KRBUTTON_DOWN = WM_RBUTTONDOWN,
|
|
KKEY_DOWN = WM_KEYDOWN,
|
|
KKEY_UP = WM_KEYUP,
|
|
KWHEEL_UP,
|
|
KWHEEL_DOWN,
|
|
KPANEL_BEGIN,
|
|
KPANEL_END,
|
|
KLBUTTON_DBLCLK = WM_LBUTTONDBLCLK,
|
|
KRBUTTON_DBLCLK = WM_RBUTTONDBLCLK,
|
|
};
|
|
|
|
class KViewportObject;
|
|
class KUITipControl;
|
|
class KUIDragAndDropObject;
|
|
|
|
// sonador 1.2.5 Lazy Tooltip 구현
|
|
class KLazyTip : public rp::mixin::ref_counted
|
|
{
|
|
public:
|
|
KLazyTip() {}
|
|
KLazyTip( const char* tip ) : m_Tip( tip ) {}
|
|
virtual ~KLazyTip() {}
|
|
virtual const char* getTip()
|
|
{
|
|
if( m_Tip.empty() )
|
|
createTip( m_Tip );
|
|
return m_Tip.c_str();
|
|
}
|
|
virtual void createTip( std::string& tip ) {}
|
|
private:
|
|
std::string m_Tip;
|
|
};
|
|
|
|
class KUIControl : public KUIWnd
|
|
{
|
|
public:
|
|
KUIControl(void);
|
|
virtual ~KUIControl(void);
|
|
|
|
virtual void Create(KUIWND_CREATE_ARG& CREATE_ARG);
|
|
virtual void Render(KViewportObject * pViewport, bool isFront = false );
|
|
virtual void Process(DWORD dwTime);
|
|
|
|
// 설정하지 않으면 기본값을 사용한다.
|
|
void SetTooltipSprite( const char* szSprName, const char* szAniName = NULL )
|
|
{
|
|
m_strTooltipSprName = szSprName;
|
|
if( NULL != szAniName ) m_strTooltipAniName = szAniName;
|
|
}
|
|
void SetTooltip( LPCSTR lpszText = NULL );
|
|
void SetLazyTooltip( KLazyTip* pLazyTip = NULL );
|
|
|
|
void AddSubTooltip( LPCSTR lpszText = NULL );
|
|
void AddLazySubTooltip( KLazyTip* pLazyTip = NULL );
|
|
void ClearSubTooptip();
|
|
|
|
void SetCaptionRandomColor( bool bFlag )
|
|
{
|
|
m_bCaptionRandomColor = bFlag;
|
|
}
|
|
|
|
// Input arguments are all global screen coordinates
|
|
virtual DWORD OnMouseMessage(DWORD dwMessage, int x, int y);
|
|
virtual void *Perform( KID id, KArg& msg );
|
|
|
|
virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam );
|
|
virtual void OnChangeCaptionNotify();
|
|
virtual void OnChangeAniNameNotify();
|
|
virtual void OnChagneBackNotify();
|
|
|
|
virtual void OnSizeChangeNofity(const KRect& rcNewRect);
|
|
virtual void OnParentSizeChangeNotify(const KRect& rcNewRect, int nXMove, int nYMove, int nResizeStyle);
|
|
|
|
virtual void OnParentPosChangeNotify(int XOffset, int YOffset);
|
|
virtual void OnPosChangeNofity(int XOffset, int YOffset);
|
|
|
|
virtual void OnClipChangeNotify(const KRect& rcClipRect);
|
|
virtual void OnParentClipChangeNotify(const KRect& rcClipRect);
|
|
|
|
virtual void OnAlphaChangeNotify(float fAlpha);
|
|
virtual void OnParentAlphaChangeNotify(float fAlphaDiff);
|
|
|
|
virtual KUIDragAndDropObject* GetDragObject();
|
|
|
|
/// 2012.07.02 SUIControlStatic와의 호환성을 위해서 추가 함 - prodongi
|
|
virtual void SetEnableOption(bool /*enable*/) {}
|
|
|
|
virtual void UpdateBack();
|
|
virtual void UpdateCaption(DWORD maxWidth = 0); // 2010.09.03 - prodongi
|
|
void UpdateAniName();
|
|
void UpdateTip();
|
|
|
|
void SetRotate(float fRadian);
|
|
|
|
static int GetOneLineStringByte(LPCSTR lpszText,DWORD dwWidth);
|
|
|
|
static void SetNULLToolTipOnControl();
|
|
|
|
// MJ 2004/12/01
|
|
int IsUsePos() const { return m_bUsePos; };
|
|
//void UpdateUV( KRect rt, int nTextureCount = 0, int nMapPosX = -1, int nMapPosY = -1 );
|
|
int GetTextureSizeX();
|
|
int GetTextureSizeY();
|
|
|
|
void UpdateUV( KRect rt );
|
|
virtual void SetTooltipOff();
|
|
|
|
void Disable() { m_bIsDisable = true; OnChangeCaptionNotify(); }
|
|
void Enable() { m_bIsDisable = false; OnChangeCaptionNotify(); }
|
|
bool IsDisable() const { return m_bIsDisable; }
|
|
|
|
// 캡션관련
|
|
void SetCaptionYOffset( int nScrollPos ) // 2009. 1. 20 floyd
|
|
{
|
|
m_pCaptionPhrase->SetViewOffsetY( nScrollPos );
|
|
}
|
|
void SplitLine( std::vector< std::string > & vecLineList, const std::string& str, const char* szFontName = KFontManager::KDEFAULT_FONT_NAME, int nFontSize = KFontManager::KDEFAULT_FONT_SIZE, bool bBold = false, bool bUseFontSize = false );
|
|
|
|
void SetEnableColor( const char * pColor ) { m_strEnableColor = pColor; }
|
|
void SetDisableColor( const char * pColor ){ m_strDisableColor = pColor; }
|
|
|
|
static void ToggleDrawRectGrid()
|
|
{
|
|
s_bIsDrawRectGrid = !s_bIsDrawRectGrid;
|
|
}
|
|
|
|
static void SetBlankWidth( short nWidth ) { s_nBlankWidth = nWidth; }
|
|
|
|
void SetUsePosEnable( bool bFlag ) { m_bUsePosEnable = bFlag; }
|
|
void SetToolTipLeftRender( bool bLeft ) { m_bToolTipLeftRender = bLeft; }
|
|
|
|
KUITipControl* GetToolTipControl() { return m_pTipControl; }
|
|
void RenderToolTip(KViewportObject * pViewport, bool isFront = false);
|
|
|
|
void SetDragParent(KUIWnd* p) { m_pDragParent = p; }
|
|
|
|
// 2010.03.15 - bintitle
|
|
// 자신과 동일한 control을 생성하여 반환.
|
|
KUIControl * Clone();
|
|
KUIControl * Clone( const char * newName );
|
|
|
|
// 2010.04.23 bintitle.
|
|
void SetColor( KColor & color );
|
|
|
|
// 2010.04.30 bintitle.
|
|
// Caption을 Wnd크기에 맞게 자르고( 맨끝 .. 처리 ), 원본 Caption이 Tooltip으로 뜨게 처리한다.
|
|
void CutCaptionNTooltip( bool bUpdateCaption=false );
|
|
|
|
int GetFontSize(){
|
|
return m_FontSize; // nui의 caption에 설정한 <size:9> 의 9.
|
|
}
|
|
|
|
/// 2010.05.06 - prodongi
|
|
void clearEmoticonSizeList() { m_emoticonSizeList.clear(); }
|
|
void addEmoticonSize(std::string const& aniName, int width, int height);
|
|
|
|
bool GetUVScrollEndFlag(); // 2011.03.23 - servantes
|
|
void ResetUVScrollEndFlag(); // 2011.03.23 - servantes
|
|
void OnAlphaChangeNotNotify(float alpha); /// 2011.09.23 자신만 알파값 변화를 시킨다 - prodongi
|
|
|
|
protected:
|
|
virtual void _destroyControl();
|
|
virtual void _initControl();
|
|
|
|
// Rendering Relative function
|
|
void _renderChild(KViewportObject* pViewport, bool isFront = false);
|
|
void _renderBack(KViewportObject *pViewport, bool isFront = false);
|
|
void _renderCaption(KViewportObject * pViewport, bool isFront = false);
|
|
void _renderToolTip(KViewportObject * pViewport, bool isFront = false);
|
|
|
|
// Process Relative function
|
|
void _processToolTip();
|
|
|
|
// process alpha show
|
|
void _processAlphaShow( DWORD dwTime );
|
|
|
|
// Argument is flag for vertical,horizontal split when piece count is three(3)
|
|
//사각 재 정리
|
|
void _reArrangeRect(bool bHorizonPiece = true);
|
|
void _makeSpriteForArrangedRect();
|
|
|
|
void _clearRegisteredSprite()
|
|
{
|
|
m_vtSprite.clear();
|
|
}
|
|
void _registerSprite(KSpritePrimitive* pPrSprite)
|
|
{
|
|
m_vtSprite.push_back( pPrSprite);
|
|
}
|
|
void _registerPhrase(KTextPhrase* pPhrase)
|
|
{
|
|
m_vtTextPhrase.push_back( pPhrase);
|
|
}
|
|
void _setToolTipOff();
|
|
|
|
static void OnToolTipOnControl( KUIControl* pControl );
|
|
static void OffToolTipOnControl( KUIControl* pNewControl );
|
|
|
|
private:
|
|
/// 2010.05.06 이모티콘의 사이즈를 m_pTipControl에 변경되도록 설정- prodongi
|
|
void updateToolTipEmoticonSize();
|
|
/// 2010.11.01 툴팁의 화면 경계 체크 - prodongi
|
|
void checkToolTipScreenBound();
|
|
|
|
protected:
|
|
bool m_bUsePosEnable;
|
|
bool m_bUsePos;
|
|
bool m_bUseHorizonPiece;
|
|
bool m_bCaptionRandomColor;
|
|
KRect m_rcPieceArea[9]; //최대 9조각
|
|
int m_nPieceCount; //사용 조각 수
|
|
KSpritePrimitive* m_pSpriteList;
|
|
|
|
// The derivative class has their unique rendering items in these vectors.
|
|
std::vector<KSpritePrimitive *> m_vtSprite;
|
|
std::vector<KTextPhrase *> m_vtTextPhrase;
|
|
|
|
DWORD m_dwToolTipPreStartTime;
|
|
DWORD m_dwToolTipStartTime;
|
|
int m_nToolTipPosX, m_nToolTipPosY;
|
|
int m_nOldPosX, m_nOldPosY;
|
|
|
|
std::string m_strTooltipSprName;
|
|
std::string m_strTooltipAniName;
|
|
|
|
rp::intrusive_ptr< KLazyTip > m_LazyTip; // Lazy Tooltip 구현
|
|
KUITipControl* m_pTipControl;
|
|
|
|
std::vector< rp::intrusive_ptr< KLazyTip > > m_SubLazyTip;
|
|
std::vector< std::string > m_SubTip;
|
|
std::vector< KUITipControl* > m_SubTipContorl;
|
|
|
|
KUIDragAndDropObject* m_pDragObject;
|
|
|
|
int m_nToolTipTextWidth;
|
|
int m_nToolTipTextHeight;
|
|
|
|
bool m_bIsDisable;
|
|
|
|
std::string m_strEnableColor;
|
|
std::string m_strDisableColor;
|
|
|
|
static bool s_bIsDrawRectGrid;
|
|
static short s_nBlankWidth;
|
|
|
|
KWireUtilPrimitive * m_pRectGrid;
|
|
|
|
bool m_bToolTipLeftRender;
|
|
static KUIControl* s_pToolTipOnControl;
|
|
|
|
bool m_bUseCustomSize; // #2.1.2.11.1
|
|
bool m_bUseEmoticonFilter;
|
|
|
|
KUIWnd* m_pDragParent; ///< 드래그용부모, 드래그 이벤트가 직계부모가 아닌 부모의 부모에게 전달되어야 할 일이 있어서 추가 by 정동섭
|
|
|
|
//--------------------------------------
|
|
// 추가. bintitle. 2010.04.30
|
|
bool m_bCutCaption; // 제목의 잘림처리 여부.
|
|
int m_FontSize; // nui의 caption에 설정한 <size:9> 의 9.
|
|
// std::string m_sOrgCaption; // 원본제목. m_bCutCaption가 활성화된경우에는 m_sCaption 에 잘려진 제목이 들어간다. ( .. ). KUIWnd 로 옮김.
|
|
//--------------------------------------
|
|
|
|
// 2010.05.06 이모티콘의 사이즈를 변경시키기 위해서 - prodongi
|
|
struct sEmoticonSize
|
|
{
|
|
sEmoticonSize(std::string const& aniName, int width, int height) : m_aniName(aniName), m_width(width), m_height(height) {}
|
|
std::string m_aniName;
|
|
int m_width;
|
|
int m_height;
|
|
};
|
|
std::vector<sEmoticonSize> m_emoticonSizeList;
|
|
|
|
public:
|
|
//void SetLazyTooltip( KLazyTip* pLazyTip = 0 ) {}
|
|
void SetUsePos( bool use ) { m_bUsePos = use; } // #2.1.2.11.1
|
|
void SetUseCustomSize( bool use ) { m_bUseCustomSize = use; }
|
|
void UseEmoticonFilter( bool use ) { m_bUseEmoticonFilter = use; }
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include <algorithm>
|
|
inline float getClampRatio(DWORD curTime, DWORD totalTime)
|
|
{
|
|
return std::min(static_cast<float>(curTime)/ totalTime, 1.f);
|
|
}
|
|
inline float getClampRatioPow(DWORD curTime, DWORD totalTime)
|
|
{
|
|
return std::min(static_cast<float>(curTime * curTime) / (totalTime * totalTime),1.f);
|
|
}
|
|
inline float getClampRatioSqrt(DWORD curTime, DWORD totalTime)
|
|
{
|
|
return std::min( ::sqrtf(getClampRatio(curTime,totalTime)) , 1.f);
|
|
}
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#endif |