#ifdef _COUNTRY_ME_ #pragma once #include "../KUIDefine.h" #include "KTypes.h" #include #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에 설정한 의 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 m_vtSprite; std::vector 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에 설정한 의 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 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 inline float getClampRatio(DWORD curTime, DWORD totalTime) { return std::min(static_cast(curTime)/ totalTime, 1.f); } inline float getClampRatioPow(DWORD curTime, DWORD totalTime) { return std::min(static_cast(curTime * curTime) / (totalTime * totalTime),1.f); } inline float getClampRatioSqrt(DWORD curTime, DWORD totalTime) { return std::min( ::sqrtf(getClampRatio(curTime,totalTime)) , 1.f); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #endif