mirror of https://github.com/PrimeDecomp/prime.git
Match and link CBlockInstruction
This commit is contained in:
parent
b49d6096c7
commit
3bba1300af
|
@ -3,8 +3,8 @@
|
|||
.section .data
|
||||
.balign 8
|
||||
|
||||
.global lbl_803ED8C8
|
||||
lbl_803ED8C8:
|
||||
.global __vt__17CBlockInstruction
|
||||
__vt__17CBlockInstruction:
|
||||
# ROM: 0x3EA8C8
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
|
@ -39,8 +39,8 @@ __dt__17CBlockInstructionFv:
|
|||
/* 80305DE4 00302D44 93 E1 00 0C */ stw r31, 0xc(r1)
|
||||
/* 80305DE8 00302D48 7C 7F 1B 79 */ or. r31, r3, r3
|
||||
/* 80305DEC 00302D4C 41 82 00 30 */ beq lbl_80305E1C
|
||||
/* 80305DF0 00302D50 3C 60 80 3F */ lis r3, lbl_803ED8C8@ha
|
||||
/* 80305DF4 00302D54 38 03 D8 C8 */ addi r0, r3, lbl_803ED8C8@l
|
||||
/* 80305DF0 00302D50 3C 60 80 3F */ lis r3, __vt__17CBlockInstruction@ha
|
||||
/* 80305DF4 00302D54 38 03 D8 C8 */ addi r0, r3, __vt__17CBlockInstruction@l
|
||||
/* 80305DF8 00302D58 90 1F 00 00 */ stw r0, 0(r31)
|
||||
/* 80305DFC 00302D5C 41 82 00 10 */ beq lbl_80305E0C
|
||||
/* 80305E00 00302D60 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha
|
||||
|
@ -103,12 +103,10 @@ SetupPositionLTR__17CBlockInstructionCFR16CFontRenderState:
|
|||
/* 80305EB0 00302E10 7C 05 00 2E */ lwzx r0, r5, r0
|
||||
/* 80305EB4 00302E14 7C 09 03 A6 */ mtctr r0
|
||||
/* 80305EB8 00302E18 4E 80 04 20 */ bctr
|
||||
.global lbl_80305EBC
|
||||
lbl_80305EBC:
|
||||
/* 80305EBC 00302E1C 80 03 00 08 */ lwz r0, 8(r3)
|
||||
/* 80305EC0 00302E20 90 04 00 D8 */ stw r0, 0xd8(r4)
|
||||
/* 80305EC4 00302E24 4E 80 00 20 */ blr
|
||||
.global lbl_80305EC8
|
||||
lbl_80305EC8:
|
||||
/* 80305EC8 00302E28 80 A3 00 30 */ lwz r5, 0x30(r3)
|
||||
/* 80305ECC 00302E2C 80 03 00 10 */ lwz r0, 0x10(r3)
|
||||
|
@ -120,7 +118,6 @@ lbl_80305EC8:
|
|||
/* 80305EE4 00302E44 7C 06 02 14 */ add r0, r6, r0
|
||||
/* 80305EE8 00302E48 90 04 00 D8 */ stw r0, 0xd8(r4)
|
||||
/* 80305EEC 00302E4C 4E 80 00 20 */ blr
|
||||
.global lbl_80305EF0
|
||||
lbl_80305EF0:
|
||||
/* 80305EF0 00302E50 80 C3 00 34 */ lwz r6, 0x34(r3)
|
||||
/* 80305EF4 00302E54 80 A3 00 24 */ lwz r5, 0x24(r3)
|
||||
|
@ -134,7 +131,6 @@ lbl_80305EF0:
|
|||
/* 80305F14 00302E74 7C 06 02 14 */ add r0, r6, r0
|
||||
/* 80305F18 00302E78 90 04 00 D8 */ stw r0, 0xd8(r4)
|
||||
/* 80305F1C 00302E7C 4E 80 00 20 */ blr
|
||||
.global lbl_80305F20
|
||||
lbl_80305F20:
|
||||
/* 80305F20 00302E80 80 A3 00 08 */ lwz r5, 8(r3)
|
||||
/* 80305F24 00302E84 80 03 00 10 */ lwz r0, 0x10(r3)
|
||||
|
@ -143,7 +139,6 @@ lbl_80305F20:
|
|||
/* 80305F30 00302E90 7C 03 00 50 */ subf r0, r3, r0
|
||||
/* 80305F34 00302E94 90 04 00 D8 */ stw r0, 0xd8(r4)
|
||||
/* 80305F38 00302E98 4E 80 00 20 */ blr
|
||||
.global lbl_80305F3C
|
||||
lbl_80305F3C:
|
||||
/* 80305F3C 00302E9C 80 C3 00 34 */ lwz r6, 0x34(r3)
|
||||
/* 80305F40 00302EA0 80 03 00 24 */ lwz r0, 0x24(r3)
|
||||
|
|
|
@ -2317,11 +2317,11 @@ BeginBlock__18CTextExecuteBufferFiiiib14ETextDirection14EJustification22EVertica
|
|||
/* 80303BB8 00300B18 7C 7A 1B 79 */ or. r26, r3, r3
|
||||
/* 80303BBC 00300B1C 41 82 00 54 */ beq .L_80303C10
|
||||
/* 80303BC0 00300B20 3C 80 80 3E */ lis r4, __vt__12CInstruction@ha
|
||||
/* 80303BC4 00300B24 3C 60 80 3F */ lis r3, lbl_803ED8C8@ha
|
||||
/* 80303BC4 00300B24 3C 60 80 3F */ lis r3, __vt__17CBlockInstruction@ha
|
||||
/* 80303BC8 00300B28 38 84 9A 6C */ addi r4, r4, __vt__12CInstruction@l
|
||||
/* 80303BCC 00300B2C 38 00 00 00 */ li r0, 0
|
||||
/* 80303BD0 00300B30 90 9A 00 00 */ stw r4, 0(r26)
|
||||
/* 80303BD4 00300B34 38 63 D8 C8 */ addi r3, r3, lbl_803ED8C8@l
|
||||
/* 80303BD4 00300B34 38 63 D8 C8 */ addi r3, r3, __vt__17CBlockInstruction@l
|
||||
/* 80303BD8 00300B38 90 7A 00 00 */ stw r3, 0(r26)
|
||||
/* 80303BDC 00300B3C 92 FA 00 04 */ stw r23, 4(r26)
|
||||
/* 80303BE0 00300B40 93 1A 00 08 */ stw r24, 8(r26)
|
||||
|
|
|
@ -552,7 +552,7 @@ LIBS = [
|
|||
["Kyoto/Text/CTextParser", False],
|
||||
["Kyoto/Text/CWordBreakTables", False],
|
||||
"Kyoto/Text/CWordInstruction",
|
||||
"Kyoto/Text/CBlockInstruction",
|
||||
["Kyoto/Text/CBlockInstruction", True],
|
||||
["Kyoto/Text/CFont", True],
|
||||
["Kyoto/Graphics/CLight", True],
|
||||
"Kyoto/Graphics/CCubeModel",
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
#ifndef _CBLOCKINSTRUCTION
|
||||
#define _CBLOCKINSTRUCTION
|
||||
|
||||
#include "Kyoto/Text/CInstruction.hpp"
|
||||
#include "Kyoto/Text/TextCommon.hpp"
|
||||
|
||||
class CBlockInstruction : public CInstruction {
|
||||
public:
|
||||
CBlockInstruction(int offX, int offY, int extX, int extY, ETextDirection dir, EJustification just,
|
||||
EVerticalJustification vjust)
|
||||
: x4_offsetX(offX)
|
||||
, x8_offsetY(offY)
|
||||
, xc_blockExtentX(extX)
|
||||
, x10_blockExtentY(extY)
|
||||
, x14_dir(dir)
|
||||
, x18_justification(just)
|
||||
, x1c_vertJustification(vjust)
|
||||
, x20_largestMonoW(0)
|
||||
, x24_largestMonoH(0)
|
||||
, x28_largestBaseline(0)
|
||||
, x2c_lineX(0)
|
||||
, x30_lineY(0)
|
||||
, x34_lineCount(0) {}
|
||||
|
||||
void Invoke(CFontRenderState& state, CTextRenderBuffer* buf) const;
|
||||
void SetupPositionLTR(CFontRenderState& state) const;
|
||||
void TestLargestFont(int monoW, int monoH, int baseline);
|
||||
void PageInvoke(CFontRenderState& state, CTextRenderBuffer* buf) const;
|
||||
|
||||
private:
|
||||
int x4_offsetX;
|
||||
int x8_offsetY;
|
||||
int xc_blockExtentX;
|
||||
int x10_blockExtentY;
|
||||
ETextDirection x14_dir;
|
||||
EJustification x18_justification;
|
||||
EVerticalJustification x1c_vertJustification;
|
||||
int x20_largestMonoW;
|
||||
int x24_largestMonoH;
|
||||
int x28_largestBaseline;
|
||||
int x2c_lineX;
|
||||
int x30_lineY;
|
||||
int x34_lineCount;
|
||||
};
|
||||
|
||||
#endif // _CBLOCKINSTRUCTION
|
|
@ -3,38 +3,7 @@
|
|||
|
||||
#include "Kyoto/Graphics/CColor.hpp"
|
||||
#include "rstl/reserved_vector.hpp"
|
||||
|
||||
enum ETextDirection {
|
||||
kTD_Horizontal,
|
||||
kTD_Vertical,
|
||||
};
|
||||
|
||||
enum EJustification {
|
||||
kJustification_Left = 0,
|
||||
kJustification_Center,
|
||||
kJustification_Right,
|
||||
kJustification_Full,
|
||||
kJustification_NLeft,
|
||||
kJustification_NCenter,
|
||||
kJustification_NRight,
|
||||
kJustification_LeftMono,
|
||||
kJustification_CenterMono,
|
||||
kJustification_RightMono,
|
||||
};
|
||||
|
||||
enum EVerticalJustification {
|
||||
kVerticalJustification_Top = 0,
|
||||
kVerticalJustification_Center,
|
||||
kVerticalJustification_Bottom,
|
||||
kVerticalJustification_Full,
|
||||
kVerticalJustification_NTop,
|
||||
kVerticalJustification_NCenter,
|
||||
kVerticalJustification_NBottom,
|
||||
kVerticalJustification_TopMono,
|
||||
kVerticalJustification_CenterMono,
|
||||
kVerticalJustification_RightMono,
|
||||
};
|
||||
|
||||
#include "Kyoto/Text/TextCommon.hpp"
|
||||
|
||||
class CDrawStringOptions {
|
||||
public:
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#ifndef _CFONTRENDERSTATE
|
||||
#define _CFONTRENDERSTATE
|
||||
|
||||
#include "Kyoto/Text/CSaveableState.hpp"
|
||||
#include "Kyoto/Text/CDrawStringOptions.hpp"
|
||||
#include "Kyoto/Text/CSaveableState.hpp"
|
||||
#include "Kyoto/Text/TextCommon.hpp"
|
||||
|
||||
class CBlockInstruction;
|
||||
|
@ -16,11 +16,15 @@ public:
|
|||
void RefreshPalette();
|
||||
CDrawStringOptions& GetOptions() { return x0_state.GetOptions(); }
|
||||
const TToken< CRasterFont >& GetFont() { return x0_state.GetFont(); }
|
||||
void SetLineSpacing(float spacing) { x0_state.SetLineSpacing(spacing); }
|
||||
void SetExtraLineSpace(int spacing) { x0_state.SetLineExtraSpace(spacing); }
|
||||
|
||||
rstl::vector< CTextColor >& GetColors() { return x0_state.GetColors(); }
|
||||
rstl::vector< bool >& GetOverride() { return x0_state.GetOverride(); }
|
||||
void SetLineSpacing(float spacing) { x0_state.SetLineSpacing(spacing); }
|
||||
void SetExtraLineSpace(int spacing) { x0_state.SetLineExtraSpace(spacing); }
|
||||
void SetBlock(const CBlockInstruction* block) { x88_curBlock = const_cast<CBlockInstruction*>(block); }
|
||||
void SetX(int x) { xd4_curX = x; }
|
||||
int GetX() const { return xd4_curX; }
|
||||
void SetY(int y) { xd8_curY = y; }
|
||||
int GetY() const { return xd8_curY; }
|
||||
private:
|
||||
CSaveableState x0_state;
|
||||
CBlockInstruction* x88_curBlock;
|
||||
|
|
|
@ -1,9 +1,39 @@
|
|||
#ifndef _TEXTCOMMON
|
||||
#define _TEXTCOMMON
|
||||
|
||||
|
||||
enum EColorType {
|
||||
|
||||
};
|
||||
|
||||
enum ETextDirection {
|
||||
kTD_Horizontal,
|
||||
kTD_Vertical,
|
||||
};
|
||||
|
||||
enum EJustification {
|
||||
kJustification_Left = 0,
|
||||
kJustification_Center,
|
||||
kJustification_Right,
|
||||
kJustification_Full,
|
||||
kJustification_NLeft,
|
||||
kJustification_NCenter,
|
||||
kJustification_NRight,
|
||||
kJustification_LeftMono,
|
||||
kJustification_CenterMono,
|
||||
kJustification_RightMono,
|
||||
};
|
||||
|
||||
enum EVerticalJustification {
|
||||
kVerticalJustification_Top = 0,
|
||||
kVerticalJustification_Center,
|
||||
kVerticalJustification_Bottom,
|
||||
kVerticalJustification_Full,
|
||||
kVerticalJustification_NTop,
|
||||
kVerticalJustification_NCenter,
|
||||
kVerticalJustification_NBottom,
|
||||
kVerticalJustification_TopMono,
|
||||
kVerticalJustification_CenterMono,
|
||||
kVerticalJustification_RightMono,
|
||||
};
|
||||
|
||||
#endif // _TEXTCOMMON
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
#include "Kyoto/Text/CBlockInstruction.hpp"
|
||||
#include "Kyoto/Text/CFontRenderState.hpp"
|
||||
|
||||
void CBlockInstruction::Invoke(CFontRenderState& state, CTextRenderBuffer* buf) const {
|
||||
state.GetOptions().SetTextDirection(x14_dir);
|
||||
state.SetBlock(this);
|
||||
if (x14_dir == kTD_Horizontal) {
|
||||
SetupPositionLTR(state);
|
||||
}
|
||||
}
|
||||
void CBlockInstruction::SetupPositionLTR(CFontRenderState& state) const {
|
||||
switch (x1c_vertJustification) {
|
||||
case kVerticalJustification_Top:
|
||||
case kVerticalJustification_Full:
|
||||
case kVerticalJustification_NTop:
|
||||
case kVerticalJustification_TopMono:
|
||||
state.SetY(x8_offsetY);
|
||||
break;
|
||||
case kVerticalJustification_Center:
|
||||
case kVerticalJustification_NCenter:
|
||||
state.SetY(x8_offsetY + (x10_blockExtentY - x30_lineY) / 2);
|
||||
break;
|
||||
case kVerticalJustification_CenterMono:
|
||||
state.SetY(x8_offsetY + (x10_blockExtentY - x34_lineCount * x24_largestMonoH) / 2);
|
||||
break;
|
||||
case kVerticalJustification_Bottom:
|
||||
case kVerticalJustification_NBottom:
|
||||
state.SetY(x8_offsetY + x10_blockExtentY - x30_lineY);
|
||||
break;
|
||||
case kVerticalJustification_RightMono:
|
||||
state.SetY(x8_offsetY + x10_blockExtentY - x34_lineCount * x24_largestMonoH);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CBlockInstruction::TestLargestFont(int monoW, int monoH, int baseline) {
|
||||
if (!x28_largestBaseline) {
|
||||
x28_largestBaseline = baseline;
|
||||
}
|
||||
|
||||
if (x20_largestMonoW < monoW) {
|
||||
x20_largestMonoW = monoW;
|
||||
}
|
||||
|
||||
if (x24_largestMonoH < monoH) {
|
||||
x24_largestMonoH = monoH;
|
||||
x28_largestBaseline = baseline;
|
||||
}
|
||||
}
|
||||
|
||||
void CBlockInstruction::PageInvoke(CFontRenderState& state, CTextRenderBuffer* buf) const {
|
||||
Invoke(state, buf);
|
||||
}
|
|
@ -29,9 +29,6 @@ bool CFontImageDef::IsLoaded() const {
|
|||
}
|
||||
|
||||
int CFontImageDef::CalculateBaseline() {
|
||||
int height;
|
||||
|
||||
height = GetHeight();
|
||||
|
||||
int height = GetHeight();
|
||||
return (height * 2.5f) / 3.f;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue