mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-05-30 01:56:31 +03:00
124 lines
2.7 KiB
C++
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();
|
|
}
|
|
|
|
}}
|