mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 15:01:33 -04:00
211 lines
6.5 KiB
C++
211 lines
6.5 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: J2DTextBox.cpp
|
|
//
|
|
|
|
#include "JSystem/J2DGraph/J2DTextBox.h"
|
|
#include "JSystem/JKernel/JKRFileLoader.h"
|
|
#include "JSystem/JSupport/JSURandomInputStream.h"
|
|
#include "JSystem/JUtility/JUTResource.h"
|
|
#include "JSystem/J2DGraph/J2DPrint.h"
|
|
#include "dolphin/gx/GXTransform.h"
|
|
#include "__va_arg.h"
|
|
|
|
/* 802D51D8-802D5268 .text __ct__10J2DTextBoxFPCcPCc */
|
|
J2DTextBox::J2DTextBox(const char* font, const char* str) : mpFont(NULL), mStringPtr(NULL) {
|
|
void * font_res = JKRFileLoader::getGlbResource(font, NULL);
|
|
initiate((ResFONT*) font_res, str, HBIND_LEFT, VBIND_TOP);
|
|
}
|
|
|
|
/* 802D5268-802D55D4 .text __ct__10J2DTextBoxFP7J2DPaneP20JSURandomInputStream */
|
|
J2DTextBox::J2DTextBox(J2DPane* parent, JSURandomInputStream* stream) : mpFont(NULL), mStringPtr(NULL) {
|
|
s32 streamPos = stream->getPosition();
|
|
J2DPaneHeader header;
|
|
s32 endPos;
|
|
u8 num;
|
|
stream->read(&header, sizeof(header));
|
|
mMagic = header.mMagic;
|
|
endPos = streamPos + header.mSize;
|
|
makePaneStream(parent, stream);
|
|
JUTResReference resRef;
|
|
num = stream->readU8();
|
|
ResFONT * font_res = (ResFONT *) resRef.getResource(stream, 'FONT', NULL);
|
|
if (font_res != NULL)
|
|
mpFont = new JUTResFont(font_res, NULL);
|
|
|
|
mCharColor.set(stream->readU32());
|
|
mGradColor.set(stream->readU32());
|
|
u8 bindingFlag = stream->readU8();
|
|
mBindingH = (bindingFlag >> 2) & 0x03;
|
|
mBindingV = (bindingFlag >> 0) & 0x03;
|
|
|
|
mCharSpace = stream->readS16();
|
|
mLineSpace = stream->readS16();
|
|
mFontSizeX = stream->readU16();
|
|
mFontSizeY = stream->readU16();
|
|
|
|
s16 stringLen = stream->readU16();
|
|
mStringPtr = new char[stringLen + 1];
|
|
stream->read(mStringPtr, stringLen);
|
|
mStringPtr[stringLen] = '\0';
|
|
|
|
num -= 10;
|
|
if (num) {
|
|
u8 isConnectParent = stream->readU8();
|
|
if (isConnectParent)
|
|
setConnectParent(true);
|
|
num--;
|
|
}
|
|
|
|
mBlack = JUtility::TColor(0);
|
|
mWhite = JUtility::TColor(0xffffffff);
|
|
|
|
if (num) {
|
|
mBlack.set(stream->readU32());
|
|
num--;
|
|
}
|
|
if (num) {
|
|
mWhite.set(stream->readU32());
|
|
num--;
|
|
}
|
|
|
|
field_0xd8 = 0.0f;
|
|
field_0xdc = 0.0f;
|
|
|
|
stream->seek(endPos, JSUStreamSeekFrom_SET);
|
|
mTextFontOwned = true;
|
|
}
|
|
|
|
/* 802D55D4-802D5660 .text __ct__10J2DTextBoxFUlRCQ29JGeometry8TBox2<f>PC7ResFONTPCc18J2DTextBoxHBinding18J2DTextBoxVBinding */
|
|
J2DTextBox::J2DTextBox(u32 tag, const JGeometry::TBox2<f32>& bounds, const ResFONT* font_res, const char* str, J2DTextBoxHBinding hbind, J2DTextBoxVBinding vbind) : J2DPane(tag, bounds), mpFont(NULL), mStringPtr(NULL) {
|
|
initiate(font_res, str, hbind, vbind);
|
|
}
|
|
|
|
/* 802D5660-802D5820 .text initiate__10J2DTextBoxFPC7ResFONTPCc18J2DTextBoxHBinding18J2DTextBoxVBinding */
|
|
void J2DTextBox::initiate(const ResFONT* font, const char* str, J2DTextBoxHBinding bindingH, J2DTextBoxVBinding bindingV) {
|
|
if (font != NULL)
|
|
mpFont = new JUTResFont(font, NULL);
|
|
|
|
mCharColor.set(0xFFFFFFFF);
|
|
mGradColor.set(0xFFFFFFFF);
|
|
mBlack = JUtility::TColor(0x00000000);
|
|
mWhite = JUtility::TColor(0xFFFFFFFF);
|
|
mBindingH = bindingH;
|
|
mBindingV = bindingV;
|
|
size_t temp = strlen(str);
|
|
mStringPtr = new char[temp + 1];
|
|
strcpy(mStringPtr, str);
|
|
field_0xd8 = 0.0f;
|
|
field_0xdc = 0.0f;
|
|
mCharSpace = 0.0f;
|
|
if (mpFont == NULL) {
|
|
mLineSpace = 0.0f;
|
|
mFontSizeX = 0.0f;
|
|
mFontSizeY = 0.0f;
|
|
} else {
|
|
mLineSpace = mpFont->getLeading();
|
|
mFontSizeX = mpFont->getWidth();
|
|
mFontSizeY = mpFont->getHeight();
|
|
}
|
|
mMagic = 'TBX1';
|
|
mTextFontOwned = true;
|
|
}
|
|
|
|
/* 802D5820-802D58B8 .text __dt__10J2DTextBoxFv */
|
|
J2DTextBox::~J2DTextBox() {
|
|
if (mTextFontOwned)
|
|
delete mpFont;
|
|
delete[] mStringPtr;
|
|
}
|
|
|
|
/* 802D58B8-802D5928 .text setFont__10J2DTextBoxFP7JUTFont */
|
|
void J2DTextBox::setFont(JUTFont* font) {
|
|
if (font) {
|
|
if (mTextFontOwned)
|
|
delete mpFont;
|
|
mpFont = font;
|
|
mTextFontOwned = false;
|
|
}
|
|
}
|
|
|
|
/* 802D5928-802D5AA4 .text draw__10J2DTextBoxFfff18J2DTextBoxHBinding */
|
|
void J2DTextBox::draw(f32 x, f32 y, f32 f31, J2DTextBoxHBinding hbind) {
|
|
if (!mVisible) {
|
|
return;
|
|
}
|
|
J2DPrint print(mpFont, mCharSpace, mLineSpace, mCharColor, mGradColor, mBlack, mWhite);
|
|
print.setFontSize(mFontSizeX, mFontSizeY);
|
|
makeMatrix(x, y);
|
|
GXLoadPosMtxImm(mMtx, 0);
|
|
GXSetCurrentMtx(0);
|
|
print.printReturn(mStringPtr, f31, 0.0f, hbind, VBIND_TOP, 0.0f, -mFontSizeY, mDrawAlpha);
|
|
Mtx mtx;
|
|
MTXIdentity(mtx);
|
|
GXLoadPosMtxImm(mtx, 0);
|
|
}
|
|
|
|
/* 802D5AA4-802D5AAC .text getStringPtr__10J2DTextBoxCFv */
|
|
char* J2DTextBox::getStringPtr() const {
|
|
return mStringPtr;
|
|
}
|
|
|
|
/* 802D5AAC-802D5B6C .text setString__10J2DTextBoxFPCce */
|
|
s32 J2DTextBox::setString(const char* str, ...) {
|
|
va_list args;
|
|
va_start(args, str);
|
|
|
|
delete[] mStringPtr;
|
|
u32 strLen = strlen(str);
|
|
mStringPtr = new char[strLen + 1];
|
|
strcpy(mStringPtr, str);
|
|
|
|
va_end(args);
|
|
return strLen;
|
|
}
|
|
|
|
/* 802D5B6C-802D5BE4 .text setConnectParent__10J2DTextBoxFb */
|
|
bool J2DTextBox::setConnectParent(bool v) {
|
|
if (getPaneTree()->getParent() == NULL)
|
|
return false;
|
|
if (getPaneTree()->getParent()->getObject()->getTypeID() != 17)
|
|
return false;
|
|
mIsConnectParent = v;
|
|
return v;
|
|
}
|
|
|
|
/* 802D5BE4-802D5C4C .text drawSelf__10J2DTextBoxFff */
|
|
void J2DTextBox::drawSelf(f32 x, f32 y) {
|
|
Mtx mtx;
|
|
MTXIdentity(mtx);
|
|
drawSelf(x, y, &mtx);
|
|
}
|
|
|
|
/* 802D5C4C-802D5DA4 .text drawSelf__10J2DTextBoxFffPA3_A4_f */
|
|
void J2DTextBox::drawSelf(f32 x, f32 y, Mtx* pMtx) {
|
|
J2DPrint print(mpFont, mCharSpace, mLineSpace, mCharColor, mGradColor, mBlack, mWhite);
|
|
print.setFontSize(mFontSizeX, mFontSizeY);
|
|
Mtx mtx;
|
|
MTXConcat(*pMtx, mDrawMtx, mtx);
|
|
GXLoadPosMtxImm(mtx, 0);
|
|
print.locate(x, y);
|
|
f32 w = mBounds.f.x - mBounds.i.x + 0.0001f;
|
|
f32 h = mBounds.f.y - mBounds.i.y;
|
|
print.printReturn(mStringPtr, w, h, (J2DTextBoxHBinding)mBindingH, (J2DTextBoxVBinding)mBindingV, field_0xd8, field_0xdc, mDrawAlpha);
|
|
}
|
|
|
|
/* 802D5DA4-802D5EB0 .text resize__10J2DTextBoxFff */
|
|
void J2DTextBox::resize(f32 w, f32 h) {
|
|
if (mIsConnectParent && getPaneTree() != NULL && getPaneTree()->getParent() != NULL) {
|
|
J2DPane * pane = getPaneTree()->getParent()->getObject();
|
|
|
|
if (pane->getTypeID() == 17) {
|
|
f32 newW = pane->getWidth() + (w - getWidth());
|
|
f32 newH = pane->getHeight() + (h - getHeight());
|
|
pane->resize(newW, newH);
|
|
return;
|
|
}
|
|
}
|
|
|
|
J2DPane::resize(w, h);
|
|
}
|