mirror of https://github.com/PrimeDecomp/prime.git
125 lines
2.8 KiB
C++
125 lines
2.8 KiB
C++
#ifndef _CRASTERFONT
|
|
#define _CRASTERFONT
|
|
|
|
#include "types.h"
|
|
|
|
#include "Kyoto/TToken.hpp"
|
|
#include "rstl/optional_object.hpp"
|
|
#include "rstl/pair.hpp"
|
|
#include "rstl/vector.hpp"
|
|
|
|
#include "string.h"
|
|
|
|
class CGlyph;
|
|
class CKernPair;
|
|
class CTexture;
|
|
class IObjectStore;
|
|
|
|
class CFontInfo {
|
|
public:
|
|
CFontInfo(bool a, bool b, int c, int fontSize, const char* name)
|
|
: x0_(a), x1_(b), x4_(c), x8_fontSize(fontSize) {
|
|
strcpy(xc_name, name);
|
|
}
|
|
|
|
private:
|
|
bool x0_;
|
|
bool x1_;
|
|
int x4_;
|
|
int x8_fontSize;
|
|
char xc_name[64];
|
|
};
|
|
|
|
class CKernPair {
|
|
public:
|
|
CKernPair(wchar_t first, wchar_t second, int howMuch)
|
|
: x0_first(first), x2_second(second), x4_howMuch(howMuch) {}
|
|
|
|
wchar_t GetFirst() const { return x0_first; }
|
|
wchar_t GetSecond() const { return x2_second; }
|
|
int GetHowMuch() const { return x4_howMuch; }
|
|
|
|
private:
|
|
wchar_t x0_first;
|
|
wchar_t x2_second;
|
|
int x4_howMuch;
|
|
};
|
|
|
|
class CGlyph {
|
|
public:
|
|
CGlyph(int a, int b, int c, float startU, float startV, float endU, float endV, int cellWidth,
|
|
int cellHeight, int baseline, int kernStart)
|
|
: x0_a(a)
|
|
, x2_b(b)
|
|
, x4_c(c)
|
|
, x8_startU(startU)
|
|
, xc_startV(startV)
|
|
, x10_endU(endU)
|
|
, x14_endV(endV)
|
|
, x18_cellWidth(cellWidth)
|
|
, x1a_cellHeight(cellHeight)
|
|
, x1c_baseline(baseline)
|
|
, x1e_kernStart(kernStart)
|
|
{}
|
|
|
|
short GetA() const { return x0_a; }
|
|
short GetB() const { return x2_b; }
|
|
short GetC() const { return x4_c; }
|
|
float GetStartU() const { return x8_startU; }
|
|
float GetStartV() const { return xc_startV; }
|
|
float GetEndU() const { return x10_endU; }
|
|
float GetEndV() const { return x14_endV; }
|
|
short GetCellWidth() const { return x18_cellWidth; }
|
|
short GetCellHeight() const { return x1a_cellHeight; }
|
|
short GetBaseline() const { return x1c_baseline; }
|
|
short GetKernStart() const { return x1e_kernStart; }
|
|
//short GetLayer() const { return x20_layer; }
|
|
|
|
private:
|
|
short x0_a;
|
|
short x2_b;
|
|
short x4_c;
|
|
float x8_startU;
|
|
float xc_startV;
|
|
float x10_endU;
|
|
float x14_endV;
|
|
short x18_cellWidth;
|
|
short x1a_cellHeight;
|
|
short x1c_baseline;
|
|
short x1e_kernStart;
|
|
//short x20_layer;
|
|
};
|
|
|
|
enum EFontMode {
|
|
kFM_None = -1,
|
|
kFM_OneLayer,
|
|
kFM_OneLayerOutline,
|
|
kFM_FourLayers,
|
|
kFM_TwoLayersOutline,
|
|
kFM_TwoLayers,
|
|
};
|
|
|
|
class CRasterFont {
|
|
public:
|
|
CRasterFont(CInputStream& in, IObjectStore* store);
|
|
~CRasterFont();
|
|
|
|
void SetTexture(TToken< CTexture > token) { x80_texture = token; }
|
|
bool IsFinishedLoading();
|
|
|
|
private:
|
|
bool x0_initialized;
|
|
int x4_monoWidth;
|
|
int x8_monoHeight;
|
|
rstl::vector< rstl::pair< wchar_t, CGlyph > > xc_glyphs;
|
|
rstl::vector< CKernPair > x1c_kerning;
|
|
EFontMode x2c_mode;
|
|
rstl::optional_object< CFontInfo > x30_fontInfo;
|
|
rstl::optional_object< TToken< CTexture > > x80_texture;
|
|
int x8c_baseline;
|
|
int x90_lineMargin;
|
|
};
|
|
CHECK_SIZEOF(CRasterFont, 0x94)
|
|
|
|
#endif // _CRASTERFONT
|