mirror of
https://github.com/PrimeDecomp/prime.git
synced 2025-08-19 10:11:31 +00:00
36 lines
1.3 KiB
C++
36 lines
1.3 KiB
C++
#include "Kyoto/Text/CTextInstruction.hpp"
|
|
#include "Kyoto/Text/CBlockInstruction.hpp"
|
|
#include "Kyoto/Text/CFontRenderState.hpp"
|
|
#include "Kyoto/Text/CInstruction.hpp"
|
|
#include "Kyoto/Text/CLineInstruction.hpp"
|
|
#include "Kyoto/Text/TextCommon.hpp"
|
|
|
|
CTextInstruction* CTextInstruction::Create(const wchar_t* str, const int len) {
|
|
char* test = rs_new char[len * sizeof(wchar_t) + sizeof(CTextInstruction) + sizeof(wchar_t)];
|
|
return new (test) CTextInstruction(str, len);
|
|
}
|
|
|
|
void CTextInstruction::Invoke(CFontRenderState& state, CTextRenderBuffer* buffer) const {
|
|
if (state.GetBlock()->GetTextDirection() == kTD_Horizontal) {
|
|
int xOut;
|
|
int yOut;
|
|
int baseline = state.GetLine()->GetBaseline();
|
|
state.GetFont()->DrawString(state.GetOptions(), state.GetX(), baseline + state.GetY(), xOut,
|
|
yOut, buffer, mString, mLength);
|
|
state.SetX(xOut);
|
|
} else {
|
|
int xOut;
|
|
int yOut;
|
|
int scale = (state.GetLine()->GetX() - state.GetFont()->GetMonoWidth()) / 2;
|
|
state.GetFont()->DrawString(state.GetOptions(), scale + state.GetX(), state.GetY(), xOut, yOut,
|
|
buffer, mString, mLength);
|
|
state.SetY(yOut);
|
|
}
|
|
}
|
|
|
|
CTextInstruction::CTextInstruction(const wchar_t* str, const int len) : mLength(len) {
|
|
for (int i = 0; i < len; ++i) {
|
|
mString[i] = str[i];
|
|
}
|
|
}
|