130 lines
3.4 KiB
C++
130 lines
3.4 KiB
C++
#include "stdafx.h"
|
|
#include "KPrimitiveSprite.h"
|
|
#include "KViewport.h"
|
|
#include "KUIControlTitleBar.h"
|
|
|
|
#include "KResourceManager.h"
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// KUIControlTitleBar Implement
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
namespace
|
|
{
|
|
KUIWnd* Creator()
|
|
{
|
|
return new KUIControlTitleBar;
|
|
}
|
|
bool bRegister = KUIFactory::GetInstance()->RegisterCreator( Creator, "titlebar");
|
|
}
|
|
|
|
KUIControlTitleBar::KUIControlTitleBar()
|
|
{
|
|
for(int i = 0 ; i < 3; ++i)
|
|
{
|
|
_registerSprite(&m_TitleSprite[i]);
|
|
}
|
|
_registerSprite(&m_prCaption);
|
|
}
|
|
|
|
KUIControlTitleBar::~KUIControlTitleBar()
|
|
{
|
|
}
|
|
|
|
void KUIControlTitleBar::_initControl()
|
|
{
|
|
SPRITE_SET* pSet = _getSpriteSet();
|
|
|
|
if( !pSet)
|
|
{
|
|
assert( false && "Cannot find Sprite Set");
|
|
return;
|
|
}
|
|
|
|
KResSprite* pFrameLeft = pSet->GetSpriteRes( m_sAniName.c_str(), 0 );
|
|
KResSprite* pFrameCenter = pSet->GetSpriteRes( m_sAniName.c_str(), 1 );
|
|
KResSprite* pFrameRight = pSet->GetSpriteRes( m_sAniName.c_str(), 2 );
|
|
|
|
if( !pFrameLeft || !pFrameRight )
|
|
{
|
|
assert( false && "Cannot find Sprite Res Frame" );
|
|
return;
|
|
}
|
|
|
|
m_rcRegion.bottom = m_rcRegion.top + pFrameLeft->GetSizeY();
|
|
m_rcRegion.right = m_rcRegion.left + pFrameLeft->GetSizeX() + pFrameLeft->GetSizeX()* .5f + pFrameRight->GetSizeX();
|
|
|
|
if( m_dwStyle & KSTYLE_SPR_CAPTION)
|
|
{
|
|
KResSprite* pFrameCaption = pSet->GetSpriteRes( m_sCaption.c_str(), 0 );
|
|
|
|
if( NULL != pFrameCaption)
|
|
{
|
|
m_prCaption.SetRes( pFrameCaption );
|
|
int nSizeX = pFrameCaption->GetSizeX(); int nSizeY = pFrameCaption->GetSizeY();
|
|
m_rcRegion.right += nSizeX;
|
|
|
|
m_prCaption.SetPosition( m_rcRegion.left + (m_rcRegion.GetWidth() - nSizeX) * .5f,
|
|
m_rcRegion.top + (m_rcRegion.GetHeight() - nSizeY) * .5f, m_fZPos);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DWORD dwCapwith = m_rcRegion.GetWidth();
|
|
if ( m_sCaption.size() > 0 )
|
|
dwCapwith = KTextPhrase::GetStringSize( m_sCaption.c_str(), dwCapwith).width;
|
|
else dwCapwith = 4;
|
|
|
|
m_rcRegion.right += dwCapwith;
|
|
}
|
|
|
|
for ( int j = 0 ; j<3 ; ++j )
|
|
{
|
|
KResSprite* pFrame = _getSpriteSet()->GetSpriteRes( m_sAniName.c_str(), j );
|
|
m_TitleSprite[j].SetRes( pFrame );
|
|
switch( j )
|
|
{
|
|
case 0: m_TitleSprite[j].SetPosition( m_rcRegion.left, m_rcRegion.top, m_fZPos ); break;
|
|
case 1:
|
|
m_TitleSprite[j].SetPosition( pFrameLeft->GetSizeX() + m_rcRegion.left, m_rcRegion.top, m_fZPos );
|
|
m_TitleSprite[j].SetTargetSize( m_rcRegion.GetWidth() - pFrameLeft->GetSizeX() - pFrameRight->GetSizeX(),
|
|
pFrameCenter->GetSizeY() );
|
|
break;
|
|
case 2:
|
|
m_TitleSprite[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();
|
|
}
|
|
|
|
void KUIControlTitleBar::Render(KViewportObject * pViewport, bool isFront )
|
|
{
|
|
if ( m_bShowFlag )
|
|
{
|
|
pViewport->Register( &m_TitleSprite[0] );
|
|
pViewport->Register( &m_TitleSprite[1] );
|
|
pViewport->Register( &m_TitleSprite[2] );
|
|
|
|
if( m_dwStyle & KSTYLE_SPR_CAPTION)
|
|
pViewport->Register( &m_prCaption);
|
|
else
|
|
_renderCaption(pViewport);
|
|
|
|
// ToolTip Render
|
|
#ifndef _KUI_INVALIDATION
|
|
_renderToolTip(pViewport);
|
|
#endif
|
|
}
|
|
}
|
|
void KUIControlTitleBar::OnChangeCaptionNotify()
|
|
{
|
|
_initControl();
|
|
KUIControl::OnChangeCaptionNotify();
|
|
}
|