Files
Leviathan/Client/Game/engine/Ui/Controls/KUIControlStatusBar.cpp
T
2026-06-01 12:46:52 +02:00

162 lines
4.2 KiB
C++

#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
}
}