// // 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__10J2DTextBoxFUlRCQ29JGeometry8TBox2PC7ResFONTPCc18J2DTextBoxHBinding18J2DTextBoxVBinding */ J2DTextBox::J2DTextBox(u32 tag, const JGeometry::TBox2& 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); }