2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-05-13 15:51:22 +00:00
metaforce/Runtime/GuiSys/CGuiPane.cpp
Lioncash b3d6901f56 CGuiPane: Make static resolving of virtual function in ctor explicit
virtual functions statically resolve in the constructor and destructor.
This makes it explicit to the user that this static resolving behavior
is indeed what is intended
2020-05-09 22:23:44 -04:00

50 lines
1.6 KiB
C++

#include "Runtime/GuiSys/CGuiPane.hpp"
namespace urde {
CGuiPane::CGuiPane(const CGuiWidgetParms& parms, const zeus::CVector2f& dim, const zeus::CVector3f& scaleCenter)
: CGuiWidget(parms), xb8_dim(dim), xc8_scaleCenter(scaleCenter) {
CGuiPane::InitializeBuffers();
}
void CGuiPane::ScaleDimensions(const zeus::CVector3f& scale) {
InitializeBuffers();
for (specter::View::TexShaderVert& v : xc0_verts) {
v.m_pos -= xc8_scaleCenter;
v.m_pos *= scale;
v.m_pos += xc8_scaleCenter;
}
}
void CGuiPane::SetDimensions(const zeus::CVector2f& dim, bool initVBO) {
xb8_dim = dim;
if (initVBO)
InitializeBuffers();
}
zeus::CVector2f CGuiPane::GetDimensions() const { return xb8_dim; }
void CGuiPane::InitializeBuffers() {
if (xc0_verts.size() < 4)
xc0_verts.resize(4);
xc0_verts[0].m_pos.assign(-xb8_dim.x() * 0.5f, 0.f, xb8_dim.y() * 0.5f);
xc0_verts[1].m_pos.assign(-xb8_dim.x() * 0.5f, 0.f, -xb8_dim.y() * 0.5f);
xc0_verts[2].m_pos.assign(xb8_dim.x() * 0.5f, 0.f, xb8_dim.y() * 0.5f);
xc0_verts[3].m_pos.assign(xb8_dim.x() * 0.5f, 0.f, -xb8_dim.y() * 0.5f);
}
void CGuiPane::WriteData(COutputStream& out, bool flag) const {}
std::shared_ptr<CGuiWidget> CGuiPane::Create(CGuiFrame* frame, CInputStream& in, CSimplePool* sp) {
CGuiWidgetParms parms = ReadWidgetHeader(frame, in);
zeus::CVector2f dim = zeus::CVector2f::ReadBig(in);
zeus::CVector3f scaleCenter = zeus::CVector3f::ReadBig(in);
std::shared_ptr<CGuiWidget> ret = std::make_shared<CGuiPane>(parms, dim, scaleCenter);
ret->ParseBaseInfo(frame, in, parms);
return ret;
}
} // namespace urde