Files
eepp/src/ui/cuisprite.cpp
spartanj 2464680ab5 Changed how ui control types are stored.
Some minor ui fixes.
Added Step callback for waypoints and interpolation.
2011-05-09 04:31:38 -03:00

124 lines
2.7 KiB
C++

#include "cuisprite.hpp"
namespace EE { namespace UI {
cUISprite::cUISprite( const cUISprite::CreateParams& Params ) :
cUIComplexControl( Params ),
mSprite( Params.Sprite ),
mRender( Params.SpriteRender ),
mAlignOffset(0,0),
mShapeLast(NULL)
{
mType = UI_TYPE_SPRITE;
if ( ( Flags() & UI_AUTO_SIZE ) || ( Params.Size.x == -1 && Params.Size.y == -1 ) ) {
if ( NULL != mSprite && NULL != mSprite->GetCurrentShape() ) {
Size( mSprite->GetCurrentShape()->Size() );
}
}
}
cUISprite::~cUISprite() {
}
void cUISprite::Sprite( cSprite * sprite ) {
mSprite = sprite;
UpdateSize();
}
void cUISprite::Draw() {
cUIControlAnim::Draw();
if ( mVisible ) {
if ( NULL != mSprite && 0.f != mAlpha ) {
CheckShapeUpdate();
mSprite->Position( (eeFloat)( mScreenPos.x + mAlignOffset.x ), (eeFloat)( mScreenPos.y + mAlignOffset.y ) );
mSprite->Draw( Blend(), mRender );
}
}
}
void cUISprite::CheckShapeUpdate() {
if ( NULL != mSprite && NULL != mSprite->GetCurrentShape() && mSprite->GetCurrentShape() != mShapeLast ) {
UpdateSize();
AutoAlign();
mShapeLast = mSprite->GetCurrentShape();
}
}
void cUISprite::Alpha( const eeFloat& alpha ) {
cUIControlAnim::Alpha( alpha );
if ( NULL != mSprite )
mSprite->Alpha( alpha );
}
cSprite * cUISprite::Sprite() const {
return mSprite;
}
eeColorA cUISprite::Color() const {
if ( NULL != mSprite )
return mSprite->Color();
return eeColorA();
}
void cUISprite::Color( const eeColorA& color ) {
if ( NULL != mSprite )
mSprite->Color( color );
Alpha( color.A() );
}
const EE_RENDERTYPE& cUISprite::RenderType() const {
return mRender;
}
void cUISprite::RenderType( const EE_RENDERTYPE& render ) {
mRender = render;
}
void cUISprite::UpdateSize() {
if ( Flags() & UI_AUTO_SIZE ) {
if ( NULL != mSprite ) {
if ( NULL != mSprite->GetCurrentShape() && mSprite->GetCurrentShape()->Size() != mSize )
Size( mSprite->GetCurrentShape()->Size() );
}
}
}
void cUISprite::AutoAlign() {
if ( NULL == mSprite || NULL == mSprite->GetCurrentShape() )
return;
cShape * tShape = mSprite->GetCurrentShape();
if ( HAlignGet( mFlags ) == UI_HALIGN_CENTER ) {
mAlignOffset.x = mSize.Width() / 2 - tShape->Size().Width() / 2;
} else if ( FontHAlignGet( mFlags ) == UI_HALIGN_RIGHT ) {
mAlignOffset.x = mSize.Width() - tShape->Size().Width();
} else {
mAlignOffset.x = 0;
}
if ( VAlignGet( mFlags ) == UI_VALIGN_CENTER ) {
mAlignOffset.y = mSize.Height() / 2 - tShape->Size().Height() / 2;
} else if ( FontVAlignGet( mFlags ) == UI_VALIGN_BOTTOM ) {
mAlignOffset.y = mSize.Height() - tShape->Size().Height();
} else {
mAlignOffset.y = 0;
}
}
const eeVector2i& cUISprite::AlignOffset() const {
return mAlignOffset;
}
void cUISprite::OnSizeChange() {
AutoAlign();
}
}}