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

194 lines
4.8 KiB
C++

#include "stdafx.h"
#include "KUIControlQJTV.h"
#include "KDeviceManager.h"
#include "KResource.h"
#include "KPrimitiveSprite.h"
#include "GameDefine.h"
#include "KUIWndManager.h"
#ifdef _RAC
#include "SGameViewPort.h"
#else
#include "KViewport.h"
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// KUIControlQJTV Implement
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
namespace
{
KUIWnd* ControlQJTVStatic()
{
return new KUIControlQJTV;
}
bool bQJTVStaticRegister = KUIFactory::GetInstance()->RegisterCreator( ControlQJTVStatic, "qjtv_static");
}
KUIControlQJTV::KUIControlQJTV()
: m_bXVID(false)
{
m_spRes = new KResSprite;
}
KUIControlQJTV::~KUIControlQJTV()
{
}
void KUIControlQJTV::Create(KUIWND_CREATE_ARG& CREATE_ARG)
{
KUIControl::Create( CREATE_ARG);
}
void KUIControlQJTV::Render(KViewportObject * pViewport, bool isFront )
{
if( IsShow() )
pViewport->Register( &m_prSprite );
}
void KUIControlQJTV::OnPosChangeNofity(int XOffset, int YOffset)
{
KUIControl::OnPosChangeNofity(XOffset, YOffset);
m_prSprite.SetAddPosition(XOffset, YOffset);
}
void KUIControlQJTV::OnAlphaChangeNotify(float fAlpha)
{
KUIControl::OnAlphaChangeNotify( fAlpha );
m_prSprite.SetVisibility( fAlpha );
}
DWORD KUIControlQJTV::OnMouseMessage(DWORD dwMessage, int x, int y)
{
DWORD dwRet = KUIControl::OnMouseMessage(dwMessage,x,y);
if(KMR_NO_GET & dwRet)
return dwRet;
if( IsDisable() ) return dwRet;
return dwRet;
}
void KUIControlQJTV::SetRenderTarget( K3DTexture* pRenderTarget, int nWidth, int nHeight )
{
m_spRenderTarget = pRenderTarget;
if( m_spRenderTarget != NULL)
{
//Center 계산
int nHalfWidth = pRenderTarget->GetWidth()/2;
int nHalfHeight = pRenderTarget->GetHeight()/2;
KRect rect;
rect.left = nHalfWidth - nWidth/2;
rect.top = nHalfHeight - nHeight/2;
rect.right = nHalfWidth + nWidth/2;
rect.bottom = nHalfHeight + nHeight/2;
float fUV[4];
fUV[0] = (float)rect.left/pRenderTarget->GetWidth();
fUV[1] = (float)rect.top/pRenderTarget->GetHeight();
fUV[2] = (float)rect.right/pRenderTarget->GetWidth();
fUV[3] = (float)rect.bottom/pRenderTarget->GetHeight();
m_spRes->SetTexture(m_spRenderTarget, &rect);
m_rcRegion.right = m_rcRegion.left + GetRect().GetWidth();
m_rcRegion.bottom = m_rcRegion.top + GetRect().GetHeight();
m_prSprite.SetRes( m_spRes );
m_prSprite.SetVisibility( 1.0f );
K3DMatrix mat;
K3DMatrixIdentity( mat );
mat.SetPosVector( K3DVertex( m_rcRegion.left, m_rcRegion.top, m_fZPos ) );
if(m_bXVID)
mat._22 *= -1.0f;
m_prSprite.SetTransform( mat );
m_prSprite.SetTargetSize( GetRect().GetWidth(), GetRect().GetHeight() );
m_prSprite.SetSourceUVRect( fUV[0], fUV[1], fUV[2], fUV[3] );
InvalidateWnd();
}
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
namespace
{
KUIWnd* ControlDynamicTextureStatic()
{
return new KUIControlDynamicTexture;
}
bool bDynamicTextureStatic = KUIFactory::GetInstance()->RegisterCreator( ControlDynamicTextureStatic, "dynamictexture_static" );
}
KUIControlDynamicTexture::KUIControlDynamicTexture()
{
m_spRes = new KResSprite;
}
KUIControlDynamicTexture::~KUIControlDynamicTexture()
{
}
void KUIControlDynamicTexture::Create(KUIWND_CREATE_ARG& CREATE_ARG)
{
KUIControl::Create( CREATE_ARG);
}
void KUIControlDynamicTexture::Render(KViewportObject * pViewport, bool isFront /*= false*/ )
{
if( IsShow() )
pViewport->Register( &m_prSprite );
}
void KUIControlDynamicTexture::OnPosChangeNofity(int XOffset, int YOffset)
{
KUIControl::OnPosChangeNofity(XOffset, YOffset);
m_prSprite.SetAddPosition(XOffset, YOffset);
}
void KUIControlDynamicTexture::OnAlphaChangeNotify(float fAlpha)
{
KUIControl::OnAlphaChangeNotify( fAlpha );
m_prSprite.SetVisibility( fAlpha );
}
void KUIControlDynamicTexture::SetRenderTarget( K3DTexture* pTexture, int nWidth, int nHeight )
{
m_spRenderTarget = pTexture;
if( m_spRenderTarget != NULL)
{
m_spRes->SetTexture(m_spRenderTarget, NULL);
float fUV[4];
fUV[0] = 0.f;
fUV[1] = 0.f;
fUV[2] = (float)nWidth/pTexture->GetWidth();
fUV[3] = (float)nHeight/pTexture->GetHeight();
m_rcRegion.right = m_rcRegion.left + GetRect().GetWidth();
m_rcRegion.bottom = m_rcRegion.top + GetRect().GetHeight();
m_prSprite.SetRes( m_spRes );
m_prSprite.SetVisibility( 1.0f );
K3DMatrix mat;
K3DMatrixIdentity( mat );
mat.SetPosVector( K3DVertex( m_rcRegion.left, m_rcRegion.top, m_fZPos ) );
m_prSprite.SetTransform( mat );
m_prSprite.SetTargetSize( GetRect().GetWidth(), GetRect().GetHeight() );
m_prSprite.SetSourceUVRect( fUV[0], fUV[1], fUV[2], fUV[3] );
InvalidateWnd();
}
}