#include "stdafx.h" #include "KViewport.h" #include "KPrimitiveSprite.h" #include "KUIControlStatusBar.h" #include "KResourceManager.h" //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // KUIControlStatusBar Implement //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// namespace { KUIWnd* Creator() { return new KUIControlStatusBar; } bool bRegister = KUIFactory::GetInstance()->RegisterCreator( Creator, "statusbar"); } KUIControlStatusBar::KUIControlStatusBar() { for(int i = 0 ; i < 3; ++i) { _registerSprite(&m_StatusSprite[i]); } } KUIControlStatusBar::~KUIControlStatusBar() { } void KUIControlStatusBar::Create(KUIWND_CREATE_ARG& CREATE_ARG) { KUIControl::Create( CREATE_ARG); } void KUIControlStatusBar::_destroyControl() { for ( int j = 0 ; j<3 ; ++j ) { m_StatusSprite[j].SetRes( NULL ); } } void KUIControlStatusBar::_initControl() { KResSprite* pFrameLeft = _getSpriteSet()->GetSpriteRes( m_sAniName.c_str(), 0 ); KResSprite* pFrameCenter = _getSpriteSet()->GetSpriteRes( m_sAniName.c_str(), 1 ); KResSprite* pFrameRight = _getSpriteSet()->GetSpriteRes( m_sAniName.c_str(), 2 ); if( !pFrameLeft || !pFrameRight ) { assert( false && "Cannot find Sprite Res Frame" ); return; } for ( int j = 0 ; j<3 ; ++j ) { KResSprite* pFrame = _getSpriteSet()->GetSpriteRes( m_sAniName.c_str(), j ); m_StatusSprite[j].SetRes( pFrame ); if ( (m_dwStyle & KSTYLE_SB_NORIGHTSIDE) && (m_dwStyle & KSTYLE_SB_NOLEFTSIDE) ) { switch( j ) { case 0: break; case 1: m_StatusSprite[j].SetPosition( m_rcRegion.left, m_rcRegion.top, m_fZPos ); m_StatusSprite[j].SetTargetSize( m_rcRegion.GetWidth(), pFrameCenter->GetSizeY() ); break; case 2: break; } } else if ( m_dwStyle & KSTYLE_SB_NOLEFTSIDE ) { switch( j ) { case 0: break; case 1: m_StatusSprite[j].SetPosition( m_rcRegion.left, m_rcRegion.top, m_fZPos ); m_StatusSprite[j].SetTargetSize( m_rcRegion.GetWidth() - pFrameRight->GetSizeX(), pFrameCenter->GetSizeY() ); break; case 2: m_StatusSprite[j].SetPosition( m_rcRegion.left + m_rcRegion.GetWidth() - pFrameRight->GetSizeX(), m_rcRegion.top, m_fZPos ); break; } } else if ( m_dwStyle & KSTYLE_SB_NORIGHTSIDE ) { switch( j ) { case 0: m_StatusSprite[j].SetPosition( m_rcRegion.left, m_rcRegion.top, m_fZPos ); break; case 1: m_StatusSprite[j].SetPosition( pFrameLeft->GetSizeX() + m_rcRegion.left, m_rcRegion.top, m_fZPos ); m_StatusSprite[j].SetTargetSize( m_rcRegion.GetWidth() - pFrameLeft->GetSizeX(), pFrameCenter->GetSizeY() ); break; case 2: break; } } else { switch( j ) { case 0: m_StatusSprite[j].SetPosition( m_rcRegion.left, m_rcRegion.top, m_fZPos ); break; case 1: m_StatusSprite[j].SetPosition( pFrameLeft->GetSizeX() + m_rcRegion.left, m_rcRegion.top, m_fZPos ); m_StatusSprite[j].SetTargetSize( m_rcRegion.GetWidth() - pFrameLeft->GetSizeX() - pFrameRight->GetSizeX(), pFrameCenter->GetSizeY() ); break; case 2: m_StatusSprite[j].SetPosition( m_rcRegion.left + m_rcRegion.GetWidth() - pFrameRight->GetSizeX(), m_rcRegion.top, m_fZPos ); break; } } } m_rcCaptionArea = m_rcRegion; m_rcCaptionArea.left += pFrameLeft->GetSizeX(); SetCaptionAlign( KTextRender::KTALIGN_LEFT | KTextRender::KTALIGN_VCENTER ); UpdateCaption(); } DWORD KUIControlStatusBar::OnKeyMessage(DWORD dwMessage, DWORD dwKeyCode) { return KUIControl::OnKeyMessage(dwMessage, dwKeyCode); } DWORD KUIControlStatusBar::OnMouseMessage( DWORD dwMessage, int x, int y ) { return KUIControl::OnMouseMessage(dwMessage, x,y); } void KUIControlStatusBar::Render(KViewportObject * pViewport, bool isFront ) { if ( m_bShowFlag ) { if ( !(m_dwStyle & KSTYLE_SB_NOLEFTSIDE) ) pViewport->Register( &m_StatusSprite[0] ); pViewport->Register( &m_StatusSprite[1] ); if ( !(m_dwStyle & KSTYLE_SB_NORIGHTSIDE) ) pViewport->Register( &m_StatusSprite[2] ); // Caption Render _renderCaption(pViewport); // ToolTip Render #ifndef _KUI_INVALIDATION _renderToolTip(pViewport); #endif } }