#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(); }