Files
dl_old/dl/ui/dl_ui_background.cpp
2026-09-08 12:18:03 +08:00

236 lines
3.9 KiB
C++

#include "dl_ui_background.h"
#ifndef DL_DISABLE_RENDER
#include "render/dl_graphics.h"
#include "ui/dl_ui_manager.h"
#include "system/dl_system.h"
namespace dl::UI
{
void Background::RefreshSize()
{
Position size = _cptElemData._size;
if (_bWindowW)
size.w = g_system->GetWindowSize().w / g_ui->GetScale();
if (_bWindowH)
size.h = g_system->GetWindowSize().h / g_ui->GetScale();
size += _sizeExtra;
switch (_ui._type)
{
case Type::SPRITE:
_ui._spr->SetQuad(createQuad(size, false) + _cptElemData._pos);
break;
case Type::SPRITE9:
_ui._spr9->SetRect(createRect(toPoint(_cptElemData._pos), toSize(size)));
break;
default:
break;
}
}
dl::UI::Background* Background::Clone()
{
Background* ret = new Background;
ret->_coor = _coor->Clone();
switch (_ui._type)
{
case Type::SPRITE:
ret->_ui._spr = g_factory->CloneSprite(_ui._spr);
ret->_ui._spr->SetCoor(ret->_coor);
break;
case Type::SPRITE9:
ret->_ui._spr9 = _ui._spr9->Clone();
ret->_ui._spr9->GetCoor()->SetParent(ret->_coor);
break;
default:
break;
}
ret->_ui._type = _ui._type;
return ret;
}
void Background::Set(gcSprite spr)
{
Clear();
_ui._spr = spr;
_ui._type = Type::SPRITE;
_ui._spr->SetUI(true);
_ui._spr->SetCoor(_coor);
_cptElemData._size = _ui._spr->GetSize();
}
void Background::Set(Sprite9* spr9)
{
Clear();
_ui._spr9 = spr9;
_ui._type = Type::SPRITE9;
_ui._spr9->SetUI(true);
_ui._spr9->GetCoor()->SetParent(_coor);
_cptElemData._size = toPosition(_ui._spr9->GetSize());
}
void Background::Clear()
{
switch (_ui._type)
{
case Type::SPRITE:
break;
case Type::SPRITE9:
delete _ui._spr9;
_ui._spr9 = nullptr;
break;
default:
break;
}
_ui._type = Type::NONE;
}
bool Background::IsPickup()
{
switch (_ui._type)
{
case Type::SPRITE:
return _ui._spr->IsPickup();
case Type::SPRITE9:
return _ui._spr9->IsPickup();
default:
return false;
}
}
void Background::Render()
{
switch (_ui._type)
{
case Type::SPRITE:
_ui._spr->Render();
break;
case Type::SPRITE9:
_ui._spr9->Render();
break;
default:
break;
}
if (_cbRender)
_cbRender(this);
}
void Background::SetOrder(float order)
{
switch (_ui._type)
{
case Type::SPRITE:
_ui._spr->SetOrder(order);
break;
case Type::SPRITE9:
_ui._spr9->SetOrder(order);
break;
default:
break;
}
}
void Background::SetUI(bool ui, bool change_sampler)
{
switch (_ui._type)
{
case Type::SPRITE:
_ui._spr->SetUI(ui, change_sampler);
break;
case Type::SPRITE9:
_ui._spr9->SetUI(ui, change_sampler);
break;
default:
break;
}
}
void Background::SetOffset(const Position& offset)
{
_cptElemData._pos = offset;
RefreshSize();
}
Position Background::GetOffset()
{
return _cptElemData._pos;
}
void Background::SetSize(const Position& size)
{
_cptElemData._size = size;
RefreshSize();
}
void Background::SetSizeExtra(const Position& size)
{
_sizeExtra = size;
RefreshSize();
}
Position Background::GetSize()
{
return _cptElemData._size;
}
void Background::RenderDebug()
{
{
Position p0 = _cptElemData._pos;
Position p1 = p0 + GetSize();
g_gfx->SetCoor(_coor);
g_gfx->SetColor(createColor(ColorDef::PURPLE, 1.0f));
g_gfx->Rectangle2D(p0, p1);
}
}
dl::Position Background::GetSizeReal()
{
switch (_ui._type)
{
case Type::SPRITE:
return _ui._spr->GetSize();
case Type::SPRITE9:
return toPosition(_ui._spr9->GetSize());
default:
break;
}
return {};
}
float Background::GetOrder()
{
switch (_ui._type)
{
case Type::SPRITE:
return _ui._spr->GetOrder();
case Type::SPRITE9:
return _ui._spr9->GetOrder();
default:
break;
}
return 0;
}
void Background::SetColor(const Color& col)
{
switch (_ui._type)
{
case Type::SPRITE:
return _ui._spr->SetColor(col);
case Type::SPRITE9:
return _ui._spr9->SetColor(col);
default:
break;
}
}
}
#endif